msgflo
Version:
Polyglot FBP runtime based on message queues
101 lines (87 loc) • 3.59 kB
text/coffeescript
msgflo = require '../'
participants = require './fixtures/participants'
chai = require 'chai' unless chai
describe 'Participant', ->
address = 'direct://broker3'
describe 'Source participant', ->
source = null
beforeEach () ->
source = participants.FooSource address, 'foo'
it 'has inports without queues', ->
ports = source.definition.inports
chai.expect(ports).to.have.length 1
chai.expect(ports[0].id).to.equal 'interval'
chai.expect(ports[0].queue).to.be.a 'undefined'
it 'has outports with queues', ->
ports = source.definition.outports
chai.expect(ports).to.have.length 1
chai.expect(ports[0].id).to.equal 'out'
chai.expect(ports[0].queue).to.be.a 'string'
chai.expect(ports[0].queue).to.contain 'foo'
chai.expect(ports[0].queue).to.contain 'OUT'
describe 'running data', ->
messages = []
beforeEach (done) ->
broker = msgflo.transport.getBroker address
broker.connect (err) ->
chai.expect(err).to.be.a 'null'
source.start done
it 'does nothing when just started'
it 'produces data when sending interval=100', (done) ->
onOutput = (msg) ->
messages.push msg
done() if messages.length == 3
observer = msgflo.transport.getClient address
observer.connect (err) ->
chai.expect(err).to.be.a 'null'
port = source.definition.outports[0] # out
observer.subscribeToQueue port.queue, onOutput, (err) ->
chai.expect(err).to.be.a 'null'
source.send 'interval', 100
it 'stops producing when sending interval=0'
describe 'Transform participant', ->
source = null
beforeEach () ->
source = participants.Hello address, 'hello'
it 'has inports with queues', ->
ports = source.definition.inports
chai.expect(ports).to.have.length 1
chai.expect(ports[0].id).to.equal 'name'
chai.expect(ports[0].queue).to.be.a 'string'
chai.expect(ports[0].queue).to.contain 'NAME'
chai.expect(ports[0].queue).to.contain 'hello'
it 'has outports with queues', ->
ports = source.definition.outports
chai.expect(ports).to.have.length 1
chai.expect(ports[0].id).to.equal 'out'
chai.expect(ports[0].queue).to.be.a 'string'
chai.expect(ports[0].queue).to.contain 'OUT'
chai.expect(ports[0].queue).to.contain 'hello'
describe 'sending data on input queue', ->
it 'produces data on output queue'
describe 'Sink participant', ->
sink = null
beforeEach (done) ->
sink = participants.DevNullSink address, 'devnull'
sink.start done
afterEach (done) ->
sink.stop done
it 'has inports with queues', ->
ports = sink.definition.inports
chai.expect(ports).to.have.length 1
chai.expect(ports[0].id).to.equal 'drop'
chai.expect(ports[0].queue).to.be.a 'string'
chai.expect(ports[0].queue).to.contain 'DROP'
chai.expect(ports[0].queue).to.contain 'devnull'
it 'has outports without queues', ->
ports = sink.definition.outports
chai.expect(ports).to.have.length 1
chai.expect(ports[0].id).to.equal 'dropped'
chai.expect(ports[0].queue).to.be.a 'undefined'
describe 'sending data on input queue', ->
it 'produces data on output port', (done) ->
sink.on 'data', (outport, data) ->
chai.expect(outport).to.equal 'dropped'
chai.expect(data).to.equal 'myinput32'
done()
sink.send 'drop', "myinput32", () ->