@@ -99,6 +99,7 @@ transportTests = (type) ->
9999 broker = null
100100
101101 describeIfRoundRobinSupport = if type == ' AMQP' then describe else describe .skip
102+ describeIfSubscribeSupport = if type != ' AMQP' then describe else describe .skip
102103
103104 beforeEach (done ) ->
104105 broker = transport .getBroker address
@@ -363,6 +364,53 @@ transportTests = (type) ->
363364 it ' only NACKed message is sent to deadletter' , ->
364365 chai .expect (received .deadletter ).to .eql [ { foo : ' nack' } ]
365366
367+ describeIfSubscribeSupport ' subscribing to bound topics' , ->
368+ sendQueue = ' sub-send-36'
369+ receiveQueue = ' sub-receive-36'
370+ binding = { type : ' pubsub' , src : sendQueue, tgt : receiveQueue }
371+ connectionData = []
372+ clients = null
373+
374+ # Should be a before, but the 'beforeEach' of higher scope are ran afterwards...
375+ setup = (done ) ->
376+ createConnectClients address, [' sender' , ' receiver' ], (err , c ) ->
377+ clients = c
378+ createQueues [
379+ [ clients .receiver , ' inqueue' , receiveQueue ]
380+ [ clients .sender , ' outqueue' , sendQueue ]
381+ ], (err ) ->
382+ chai .expect (err).to .not .exist
383+ broker .addBinding binding, (err ) ->
384+ chai .expect (err).to .be .a ' null'
385+ return done null
386+
387+ it ' should provide data sent on connection' , (done ) ->
388+ payloads =
389+ one : { foo : ' sub-96' }
390+ two : { bar : ' sub-97' }
391+
392+ onData = (bind , data ) ->
393+ chai .expect (bind .src ).to .equal binding .src
394+ chai .expect (bind .tgt ).to .equal binding .tgt
395+ connectionData .push data
396+ # wait until we've gotten two packets
397+ if connectionData .length == 2
398+ [one , two ] = connectionData
399+ chai .expect (one).to .eql payloads .one
400+ chai .expect (two).to .eql payloads .two
401+ return done null
402+ else if connectionData .length > 2
403+ return done new Error " Got more data than expected"
404+
405+ setup (err ) ->
406+ return done err if err
407+ broker .subscribeData binding, onData, (err ) ->
408+ return done err if err
409+ clients .sender .sendTo ' outqueue' , sendQueue, payloads .one , (err ) ->
410+ return done err if err
411+ clients .sender .sendTo ' outqueue' , sendQueue, payloads .two , (err ) ->
412+ return done err if err
413+
366414describe ' Transport' , ->
367415 Object .keys (transports).forEach (type) =>
368416 describe " #{ type} " , () ->
0 commit comments