it('will retry listening a specified number of times', function (done) {
      var seneca1 = Seneca({
        log: 'silent',
        default_plugins: {
          transport: false
        }
      })

      var seneca2 = Seneca({
        log: 'silent',
        default_plugins: {
          transport: false
        }
      })

      var settings1 = {
        tcp: {
          port: 0
        }
      }

      var callmap = {}

      var transportUtil1 = new TransportUtil({
        callmap: callmap,
        seneca: seneca1,
        options: settings1
      })

      var tcp1 = Tcp.listen(settings1, transportUtil1)
      expect(typeof tcp1).to.equal('function')

      tcp1.call(seneca1, { type: 'tcp' }, function (err, address) {
        expect(err).to.not.exist()

        var settings2 = {
          tcp: {
            port: address.port,
            max_listen_attempts: 10,
            attempt_delay: 10
          }
        }
        var transportUtil2 = new TransportUtil({
          callmap: callmap,
          seneca: seneca2,
          options: settings2
        })
        var tcp2 = Tcp.listen(settings2, transportUtil2)
        expect(typeof tcp2).to.equal('function')

        setTimeout(function () {
          seneca1.close()
        }, 20)

        tcp2.call(seneca2, { type: 'tcp' }, function (err, address) {
          expect(err).to.not.exist()
          done()
        })
      })
    })
Example #2
0
  it('verify content', function (done) {
    var si = seneca()
      .use('..', {folder: './email-templates', content: {bar: {a: 1, b: 0}}})
    si.ready(function () {

      var mail = si.pin({role: 'mail', cmd: '*'})

        ;
      mail.generate({code: 'bar'}, function (err, out) {
        assert.isNull(err)
        //console.dir(out)
        assert.equal('<div>a:1,b:0</div>', out.html)
        assert.equal('a:1,b:0', out.text)

        si.add({role: 'mail', hook: 'content'}, function (args, done) {
          args.content = args.content || {}
          args.content.b = 2
          this.parent(args, done)
        })

        ;
        mail.generate({code: 'bar'}, function (err, out) {
          assert.isNull(err)
          assert.equal('<div>a:1,b:2</div>', out.html)
          assert.equal('a:1,b:2', out.text)
          done()

        })
      })
    })
  })
Example #3
0
	beforeEach( function () {
		seneca = Seneca()
			.use( 'entity' )
			.use( require( '../feeds' ) )
			.use( 'mesh' )
			.error( expect.fail );
	} );
Example #4
0
module.exports = function (lab) {
  var Seneca = require('seneca')
  var Code = require('code')

  var describe = lab.describe
  var it = lab.it
  var before = lab.before

  var expect = Code.expect
  var si = Seneca({log: 'silent', strict: {result: false}})
  if (si.version >= '2.0.0') {
    si.use(require('seneca-entity'))
  }
  si
    .use('cache')
    .use('../token')

  describe('cmd:clear, token: string,required$', function () {
    before(function (done) {
      si.ready(function (err) {
        if (err) return process.exit(!console.error(err))

        done()
      })
    })

    it('responds { ok: true} in anyways, do not depend on token is existing or not', function (done) {
      si.act('role:token, cmd:generate, data: true, duration: 10', function (err, respond) {
        expect(err).to.not.exist()
        var token = respond.token
        si.act({role: 'token', cmd: 'clear', token: token}, function (err, respond) {
          expect(err).to.not.exist()

          var tokenent = si.make('sys', 'token')
          tokenent.load$(token, function (err, tokenData) {
            expect(err).to.not.exist()
            expect(tokenData).to.not.exist()
            done()
          })
        })
      })
    })

    it('can remove token in cache and in entity', function (done) {
      si.act('role:token, cmd:generate, data: true, cache: true, duration: 10', function (err, respond) {
        expect(err).to.not.exist()
        var token = respond.token
        si.act({role: 'token', cmd: 'clear', token: token}, function (err, respond) {
          expect(err).to.not.exist()

          si.act({role: 'cache', cmd: 'get', token: token}, function (err, respond) {
            expect(err).to.not.exist()
            expect(respond).to.not.exist()
            done()
          })
        })
      })
    })
  })
}
Example #5
0
const main = function () {
  loadSerializer();
  loadSensor();

  const server = Seneca();

  let offset = 100;
  server.add({ role: 'temperature', cmd: 'offset' }, (args, cb) => {
    offset = parseInt(args.offset, 10);
    cb();
  });

  setInterval(() => {
    sensor.act({ role: 'temperature', cmd: 'read', offset: offset }, (err, args) => {
      if (err) {
        console.error(err);
        return;
      }

      serializer.act({ role: 'serialize', cmd: 'write', temperature: args.temperature, sensorId: args.sensorId }, () => {});
    });
  }, 2000);

  server.listen({ port: 8000 });
};
    it('can listen on ephemeral port', function (done) {
      var seneca = Seneca({
        log: 'silent',
        default_plugins: {
          transport: false
        }
      })

      var settings = {
        tcp: {
          port: 0,
          host: 'localhost'
        }
      }

      var callmap = {}

      var transportUtil = new TransportUtil({
        callmap: callmap,
        seneca: seneca,
        options: settings
      })

      var tcp = Tcp.listen(settings, transportUtil)
      expect(typeof tcp).to.equal('function')

      tcp.call(seneca, { type: 'tcp' }, function (err) {
        expect(err).to.not.exist()
        done()
      })
    })
Example #7
0
    function legacy_false () {
      Seneca({log: 'silent', legacy: {error_codes: false, validate: false}})
        .use('../joi', {legacy: false})
        .add({
          a: 0
        }, function (msg, done) {
          done(null, {c: 0})
        })
        .add({
          a: 1,
          b: {c: 2}
        }, function (msg, done) {
          done(null, {c: 1})
        })
        .act('a:0,b:1', function (err, out) {
          if (err) return done(err)
          Assert.equal(0, out.c)

          this.act('a:1,b:{c:2}', function (err, out) {
            if (err) return done(err)
            Assert.equal(1, out.c)

            this.act('a:1,b:2', function (err, out) {
              Assert.equal('act_invalid_msg', err.code)
              done()
            })
          })
        })
    }
describe('github', function() {

  var si = seneca({log:'silent',from:'./mine.options.js'})
        .use('jsonfile-store')
        .use('../github.js')

  it('parse', function( fin ) {
    si.options({errhandler:make_errhandler(fin)})

    si.act(
      'role:github,cmd:parse',
      {giturl:'git://github.com/rjrodger/norma.git'}, function(err,out){
        assert.equal('rjrodger',out.user)
        assert.equal('norma',out.repo)
        fin()
      })
  })


  it('query', function( fin ) {
    si.options({errhandler:make_errhandler(fin)})

    si.act(
      'role:github,cmd:query',
      {name:'norma',user:'******',repo:'norma'}, function(err,out){
        assert.equal(out.id,'norma')
        assert.equal(out.repo,'norma')
        assert.equal(out.user,'rjrodger')
        fin()
      })
  })


  it('get', function( fin ) {
    si.options({errhandler:make_errhandler(fin)})

    si.make$('mod').load$('gex',function(err,out){

      if( out ) {
        out.remove$(do_get)
      }
      else do_get()

      function do_get() {
        si.act(
          'role:github,cmd:get',
          {name:'gex',giturl:'https://github.com/rjrodger/gex.git'}, 
          function(err,out){
            assert.equal( out.id,   'gex')
            assert.equal( out.repo, 'gex')
            assert.equal( out.user, 'rjrodger')
            fin()
          })
      }
    })

  })


})
Example #9
0
app.register(Basic, (err) => {
  if (err) throw err

  app.auth.strategy('simple', 'basic', {validateFunc: validate})

  // The config we will pass to seneca-web
  var config = {
    adapter: require('seneca-web-adapter-hapi'),
    context: app,
    routes: Routes
  }

  // Server and start as usual.

  var seneca = Seneca()
    .use(Plugin)
    .use(Web, config)
    .ready(() => {
      var server = seneca.export('web/context')()

      server.start((err) => {
        console.log(err || 'server started on: ' + server.info.uri)
      })
    })
})
Example #10
0
  it('handles errors lower priority entity service', function(done) {
    var seneca = Seneca().test()
    seneca.use('entity')
    seneca.use(SENECA_CACHE_PLUGIN)

    seneca.ready(function() {
      seneca.add({ role: 'entity', cmd: 'save' }, function bad_entity_save(
        ignore,
        callback
      ) {
        return callback(new Error('Bad entity service'))
      })

      seneca.use('..')

      seneca.ready(function() {
        var type = internals.type()
        var entry = seneca.make(type, { a: 1 })

        // Save

        entry.save$(function(err, saved) {
          expect(err).to.exist()
          done()
        })
      })
    })
  })
Example #11
0
    it('should get and set context', function (testDone) {
      var seneca = createSeneca();
      var context = {a: {b: {c: 1}}, d: [2, 3, 4]};
      var context2 = {test: 'data'};
      seneca.add('role:test,cmd:run', function (msg, done) {
        expect(senecaContext.getContext(this)).to.be.null;
        senecaContext.setContext(this, context);
        expect(senecaContext.getContext(this)).to.deep.equal(context);
        this.act({role: 'test', cmd: 'run2'}, done);
      });
      seneca.add('role:test,cmd:run2', function (msg, done) {
        expect(senecaContext.getContext(this)).to.deep.equal(context);
        senecaContext.setContext(this, context2);
        expect(senecaContext.getContext(this)).to.deep.equal(context2);

        // If possible, a cached context from context$ property is returned.
        // Check, if it can be recreated from tx$.
        expect(this.fixedargs.context$).to.deep.equal(context2);
        delete this.fixedargs.context$;
        expect(senecaContext.getContext(this)).to.deep.equal(context2);
        expect(this.fixedargs.context$).to.deep.equal(context2);
        done();
      });
      seneca.act({role: 'test', cmd: 'run'}, testDone);
    });
Example #12
0
  Consul.getService('broker', (err, brokerService) => {
    if (err || !brokerService || !brokerService.address) {
      return retry(loadBroker);
    }

    broker = Seneca().client({ host: brokerService.address, port: brokerService.port });
    loading = false;
  });
Example #13
0
function seneca_instance(opts) {
  var seneca = Seneca().test()
  //.quiet()
  seneca.use('entity')
  seneca.use(SENECA_CACHE_PLUGIN)
  seneca.use('..', opts)
  return seneca
}
Example #14
0
describe('npm', function() {

  var si = seneca({log:'silent',from:'./mine.options.js'})
        .use('jsonfile-store')
        .use('../npm.js')

  it('extract', function( fin ) {
    si.options({errhandler:make_errhandler(fin)})

    si.act(
      'role:npm,cmd:extract',
      {data:test_data}, function(err,out){
        //console.log(out)
        assert.equal('npm-version-verify-test',out.name)
        assert.equal('0.0.2',out.version)
        fin()
      })
  })


  it('query', function( fin ) {
    si.options({errhandler:make_errhandler(fin)})

    si.act(
      'role:npm,cmd:query',
      {name:'npm-version-verify-test'}, 
      function(err,out){
        assert.equal('npm-version-verify-test',out.name)
        assert.equal('0.0.2',out.version)
        fin()
      })
  })

  it('get', function( fin ) {
    si.options({errhandler:make_errhandler(fin)})

    si.make$('npm').load$('npm-version-verify-test',function(err,out){

      if( out ) {
        out.remove$(do_get)
      }
      else do_get()

      function do_get() {
        si.act(
          'role:npm,cmd:get',
          {name:'npm-version-verify-test'}, 
          function(err,out){
            assert.equal('npm-version-verify-test',out.name)
            assert.equal('0.0.2',out.version)
            fin()
          })
      }
    })

  })

})
Example #15
0
  it('handles upstream error when updating a record (writeData) - qqq', function(done) {
    var seneca = Seneca().test()
    //.quiet()
    seneca.use('entity')

    seneca.use('./broken')
    seneca.use('..')

    seneca.ready(function() {
      var control = this.export(SENECA_CACHE_PLUGIN + '/control')

      var type = internals.type()
      var entry = seneca.make(type, { a: 1 })

      // Save

      entry.save$(function(err, saved) {
        var id = saved.id
        saved.b = 5

        // Update

        control.set = true

        saved.save$(function(err, modified) {
          expect(err).to.exist()

          // Remove

          control.set = false

          saved.remove$(function(err, out) {
            expect(err).to.not.exist()
            seneca.act({ plugin: 'vcache', cmd: 'stats' }, function(
              err,
              stats
            ) {
              expect(stats).to.contain({
                set: 1,
                get: 0,
                vadd: 1,
                vmiss: 0,
                vhit: 0,
                lru_hit: 0,
                net_hit: 0,
                lru_miss: 0,
                net_miss: 0,
                drop: 1,
                cache_errs: 1
              })

              done()
            })
          })
        })
      })
    })
  })
Example #16
0
				fs.close(info.fd, function (err)
				{
					var c0 = Seneca({});
					c0.use(require("seneca-balance-client")).client({type: 'balance', pin: 'role:test'});
					c0.use('..', {pin: 'role:test', localfile: info.path, port: 47111});
					setTimeout(function ()
					{
						c0.act({role: "test"}, function (err, result)
						{
							if (result.result == 'ok')
							{
								fs.open(info.path, 'w', function (err, fd)
								{
									if (!err)
									{
										fs.write(fd, JSON.stringify([{"primary_ip": "127.0.0.1"}]));
										fs.close(fd, function (err)
										{
											setTimeout(function ()
											{
												c0.act({role: "test"}, function (err, result)
												{
													if (result.result == 'ok')
													{
														fs.open(info.path, "w", function (err, fd)
														{
															if (!err)
															{
																fs.write(fd, JSON.stringify([{"primary_ip": "localhost"}]));
																fs.close(fd, function (err)
																{
																	setTimeout(function ()
																	{
																		c0.act({role: "test"}, function (err, result)
																		{
																			if (result.result == 'ok')
																			{
																				done();
																			}
																			else done(new Error('fail'));
																		});
																	}, 2000);
																});
															}
														});
													}
													else done(new Error('fail'));
												});
											}, 2000);
										});
									}
								});
							}
							else done(new Error('fail'));
						});
					}, 2000);
				});
 it('Create Game and get Game ID',function(done){
   this.timeout(100000);
   var gameConsumer = seneca();
   gameConsumer.use('../.././microservices/gameplay/gameManagerPlugin',{player1:player1,player2:player2,player3:player3});
   gameConsumer.act('role:gameManager,action:create',function(err,response){
     if(err) return done(err);
     response.should.have.property('gameId');
     done();
   });
 });
Example #18
0
  it('can be used by seneca', function (done) {
    var seneca = Seneca({ log: 'silent', default_plugins: { cluster: false } })

    var fn = function () {
      seneca.use(senecaCluster)
    }

    expect(fn).to.not.throw()
    done()
  })
Example #19
0
    internals.availablePort(function (port) {
      var seneca = Seneca({ log: 'all', default_plugins: { repl: false } })
      seneca
      .use(SenecaRepl, { port: port })
      .ready(function () {
        seneca.repl()

        setTimeout(function () {
          var sock = Net.connect(port)
          var state = 0

          sock.on('readable', function () {
            var buffer = sock.read()
            if (!buffer) {
              return
            }

            var result = buffer.toString('ascii')

            if (state === 0) {
              state++
              expect(result).to.contain('seneca')
              sock.write('console.log(this)\n')
            }
            else if (state === 1) {
              state++
              expect(result).to.contain('{')
              sock.write('set foo.bar 1\n')
              sock.write('this.options().foo\n')
            }
            else if (state === 2) {
              state++
              expect(result).to.contain('bar')
              sock.write('list\n')
            }
            else if (state === 3) {
              state++
              expect(result).to.contain("{ role: 'seneca', stats: 'true' }")
              sock.write('role:seneca,stats:true\n')
            }
            else if (state === 4) {
              state++
              expect(result).to.contain('OUT 000000')
              sock.write('seneca.quit\n')
            }
            else if (state === 5) {
              state++
              expect(result).to.contain('seneca')
              done()
            }
          }, 2000)
        })
      })
    })
    it('should have the name middleware.io', function (done) {

        seneca({ log: 'silent', errhandler: done })
            .use('../lib/middleware.io')
            .act('role:middleware.io, cmd:info', function (err, infoText) {

            infoText.should.equal('middleware version: 0.0.3');

            done();
        });
    });
Example #21
0
  Consul.getService('sensor', (err, sensorService) => {
    if (err || !sensorService || !sensorService.address) {
      return retry(loadSensor);
    }

    sensor = Seneca();
    sensor.client({
      host: sensorService.address,
      port: sensorService.port
    });
    loadingSensor = false;
  });
Example #22
0
  it('happy', function( fin){

    seneca({log:'silent',errhandler:fin})
      .use('..')
      .act('role:simple,cmd:foo,text:red', 
           function( err, out ) {
             if( err ) return fin(err);

             assert.equal( out.text, 'foo-red-zed' )
             fin()
           })
  })
Example #23
0
module.exports = function (options) {
  var si = Seneca()

  if (si.version >= '2.0.0') {
    si
      .use(require('seneca-entity'))
  }
  si
    .use(require('seneca-user'), options)

  return si
}
 }, { type: 'activemq' }, function () {
   var seneca = Seneca()
     .use(require('../'))
     .client({ type: 'activemq' })
     .ready(function () {
       seneca.act('role:calc, cmd:add', { a:1, b:3 }, function (err, res) {
         if (err) throw err;
         assert.equal(4, res.result);
         done();
       });
     });
 });
Example #25
0
  it('verify default generate', function (done) {
    var si = seneca()
      .use('..')
    si.ready(function () {
      var mail = si.pin({role: 'mail', cmd: '*'})

      mail.generate({code: 'foo', content: {foo: 'bar'}}, function (err, out) {
        assert.isNotNull(err)

        done()
      })
    })
  })
Example #26
0
  it('query', {timeout: 8888}, function (done) {
    var seen = {}

    Seneca()

    // Place Seneca into test mode. Errors will be passed to done callback,
    // so no need to handle them in callbacks.
      .test(done)

    // Uncomment if you want to see detailed logs
    //.test(done, 'print')

      .use('entity')

    // Load the github plugin
      .use('..')

    // Subscribe to internal messages in order to count calls
      .sub('role:entity', function (msg) {
        seen[msg.cmd] = 1 + (seen[msg.cmd]||0)
      })

      .gate()

      .act('role:github,cmd:query,owner:senecajs,repo:seneca,name:seneca', function (ignore, out) {
        expect(out.owner).equal('senecajs')
        expect(out.repo).equal('seneca')
        expect(out.stars).above(0)
        expect(seen).to.equal({ load: 1, save: 1 })
      })

      .act('role:github,cmd:get,name:seneca', function (ignore, out) {
        expect(out.owner).equal('senecajs')
        expect(out.repo).equal('seneca')
        expect(out.stars).above(0)
        
        expect(seen).to.equal({ load: 2, save: 1 })
      })

      .act('role:github,cmd:get,name:seneca', function (ignore, out) {
        expect(out.owner).equal('senecajs')
        expect(out.repo).equal('seneca')
        expect(out.stars).above(0)
        
        expect(seen).to.equal({ load: 3, save: 1 })
      })

      .ready(done)
  })
Example #27
0
  it('cluster errors when node version is less than 0.12.0', function (done) {
    var version = process.versions.node
    var seneca = Seneca({ log: 'silent', default_plugins: { cluster: false } })
    seneca.use(senecaCluster)

    seneca.die = function (err) {
      process.versions.node = version
      expect(err.code).to.equal('bad_cluster_version')
      done()
    }

    delete process.versions.node
    process.versions.node = '0.11.99'
    seneca.cluster()
  })
Example #28
0
  it('verify template generate', function (done) {
    var si = seneca()
      .use('..', {folder: './email-templates'})
    si.ready(function () {

      var mail = si.pin({role: 'mail', cmd: '*'})
      mail.generate({code: 'foo', content: {foo: 'bar'}}, function (err, out) {
        console.log(err + ':' + JSON.stringify(out))
        assert.isNull(err)
        assert.equal('<h1>Foo: bar</h1>\n', out.html)
        assert.equal('Foo: bar\n', out.text)
        done()
      })
    })
  })
Example #29
0
  it('plugin', function(fin) {
    var si = seneca({log:'silent'})
    si.use('../web.js')

    si.use(function qaz(){
      this.add('role:foo,cmd:zig',function(args,done){
        done(null,{bar:args.zoo+'g'})
      })
      this.add('role:foo,cmd:bar',function(args,done){
        done(null,{bar:args.zoo+'b'})
      })
      this.add('role:foo,cmd:qaz',function(args,done){
        done(null,{qaz:args.zoo+'z'})
      })

      this.act('role:web',{use:function(req,res,next){next();}}, function(err){
        assert.isNull(err)
      })

      this.act('role:web',{use:{
        prefix:'/foo',
        pin:{role:'foo',cmd:'*'},
        map:{
          zig: true,
          bar: {GET:true},
          qaz: {GET:true,HEAD:true}
        }
      }}, function(err){
        assert.isNull(err)
      })
    })

    si.act('role:web,cmd:list',success(fin,function(out){
      //console.log(out)
      assert.equal(out.length,4)

      si.act('role:web,cmd:routes',success(fin,function(out){
        //console.log(util.inspect(out,{depth:null}))
        assert.equal(out.length,3)

        si.act({role:'web',stats:true},success(fin,function(out){
          //console.dir(out)
          assert.equal(3,_.keys(out).length)
          fin()
        }))
      }))
    }))
  })
Example #30
0
  it('edge', function (done) {
    Seneca({log: 'silent', legacy: {error_codes: false, validate: false}})
      .use('../joi')
      .add({
        a: 1,
        joi$: 1
      }, function (msg, done) {
        done(null, {c: 3})
      })
      .act('a:1,b:2', function (err, out) {
        if (err) return done(err)

        Assert.equal(3, out.c)
        done()
      })
  })