noflo-runtime-msgflo
Version:
NoFlo runtime for Node.js over AMQP/MQTT etc
73 lines (58 loc) • 2 kB
text/coffeescript
chai = require 'chai' unless chai
path = require 'path'
msgflo = require 'msgflo'
randomstring = require 'randomstring'
mount = require('..').mount
# Note: most require running an external broker service
transports =
# 'direct': 'direct://broker1'
# 'MQTT': 'mqtt://localhost'
'AMQP': 'amqp://localhost'
transportTest = (address) ->
coordinator = null
beforeEach (done) ->
broker = msgflo.transport.getBroker address
coordinator = new msgflo.coordinator.Coordinator broker
coordinator.start (err) ->
chai.expect(err).to.be.a 'null'
done()
afterEach (done) ->
coordinator.stop () ->
coordinator = null
done()
describe 'mounted graph', ->
m = null
options = null
beforeEach (done) ->
@timeout 4000
options =
broker: address
graph: 'core/RepeatAsync'
name: '1someone'+randomstring.generate 4
m = new mount.Mounter options
m.start done
afterEach (done) ->
m.stop done
it 'should connect to broker', (done) ->
coordinator.once 'participant-added', (participant) ->
chai.expect(participant.id).to.contain options.name
done()
describe 'sending to input queue', ->
it 'should come out on output queue', (done) ->
coordinator.once 'participant-added', (participant) ->
chai.expect(participant.id).to.contain options.name
part = participant.id
coordinator.subscribeTo part, 'out', (msg) ->
chai.expect(msg.data).to.eql { foo: 'bar' }
done()
coordinator.sendTo part, 'in', { foo: 'bar' }
describe 'Mount', ->
Object.keys(transports).forEach (type) =>
address = transports[type]
describe ", transport=#{type}: ", () ->
transportTest address
# FIXME: implement test for these cases
describe 'specifying queue name in options', ->
it 'should be used instead of default'
describe 'specifying port as hidden', ->
it 'should not create queue'