@@ -149,8 +149,8 @@ transportTests = (type) ->
149149
150150 clients .receiver .subscribeToQueue sharedQueue, onReceive, (err ) ->
151151 chai .expect (err).to .be .a ' null'
152- clients .sender .sendTo ' outqueue' , sharedQueue, payload, (err ) ->
153- chai .expect (err).to .be .a ' null'
152+ clients .sender .sendTo ' outqueue' , sharedQueue, payload, (err ) ->
153+ chai .expect (err).to .be .a ' null'
154154
155155
156156 describe ' inqueue==outqueue with binding' , ->
@@ -173,8 +173,8 @@ transportTests = (type) ->
173173
174174 clients .receiver .subscribeToQueue sharedQueue, onReceive, (err ) ->
175175 chai .expect (err).to .be .a ' null'
176- clients .sender .sendTo ' outqueue' , sharedQueue, payload, (err ) ->
177- chai .expect (err).to .be .a ' null'
176+ clients .sender .sendTo ' outqueue' , sharedQueue, payload, (err ) ->
177+ chai .expect (err).to .be .a ' null'
178178
179179
180180 describe ' outqueue bound to inqueue' , ->
@@ -200,6 +200,48 @@ transportTests = (type) ->
200200
201201 clients .receiver .subscribeToQueue inQueue, onReceive, (err ) ->
202202 chai .expect (err).to .be .a ' null'
203+ clients .sender .sendTo ' outqueue' , outQueue, payload, (err ) ->
204+ chai .expect (err).to .be .a ' null'
205+
206+ describe ' outqueue bound to inqueue then removed' , ->
207+ it ' sending to inqueue, show up on outqueue' , (done ) ->
208+ payload = { foo : ' bar922' }
209+ inQueue = ' inqueue922'
210+ outQueue = ' outqueue922'
211+ createConnectClients address, [' sender' , ' receiver' ], (err , clients ) ->
212+ createQueues [
213+ [ clients .receiver , ' inqueue' , inQueue ]
214+ [ clients .sender , ' outqueue' , outQueue ]
215+ ], (err ) ->
216+ chai .expect (err).to .not .exist
217+
218+ binding = { type : ' pubsub' , src : outQueue, tgt : inQueue }
219+ bindingRemoved = false
220+
221+ onReceive = (msg ) ->
222+ if bindingRemoved
223+ done new Error " Received data on removed binding"
224+ done = null
225+ return
226+
227+ clients .receiver .ackMessage msg
228+ chai .expect (msg).to .include .keys ' data'
229+ chai .expect (msg .data ).to .eql payload
230+ bindingRemoved = true
231+ broker .removeBinding binding, (err ) ->
232+ chai .expect (err).to .be .a ' null'
233+ clients .sender .sendTo ' outqueue' , outQueue, payload, (err ) ->
234+ chai .expect (err).to .be .a ' null'
235+ setTimeout () ->
236+ done null if done
237+ done = null
238+ return
239+ , 300
240+
241+ clients .receiver .subscribeToQueue inQueue, onReceive, (err ) ->
242+ chai .expect (err).to .be .a ' null'
243+ broker .addBinding binding, (err ) ->
244+ chai .expect (err).to .be .a ' null'
203245 clients .sender .sendTo ' outqueue' , outQueue, payload, (err ) ->
204246 chai .expect (err).to .be .a ' null'
205247
@@ -363,6 +405,100 @@ transportTests = (type) ->
363405 it ' only NACKed message is sent to deadletter' , ->
364406 chai .expect (received .deadletter ).to .eql [ { foo : ' nack' } ]
365407
408+ describe ' subscribing to bound topics' , ->
409+ sendQueue = ' sub-send-36'
410+ receiveQueue = ' sub-receive-36'
411+ binding = { type : ' pubsub' , src : sendQueue, tgt : receiveQueue }
412+ connectionData = []
413+ clients = null
414+
415+ # Should be a before, but the 'beforeEach' of higher scope are ran afterwards...
416+ setup = (done ) ->
417+ createConnectClients address, [' sender' , ' receiver' ], (err , c ) ->
418+ clients = c
419+ createQueues [
420+ [ clients .receiver , ' inqueue' , receiveQueue ]
421+ [ clients .sender , ' outqueue' , sendQueue ]
422+ ], (err ) ->
423+ chai .expect (err).to .not .exist
424+ broker .addBinding binding, (err ) ->
425+ chai .expect (err).to .be .a ' null'
426+ return done null
427+
428+ it ' should provide data sent on connection' , (done ) ->
429+ payloads =
430+ one : { foo : ' sub-96' }
431+ two : { bar : ' sub-97' }
432+
433+ onData = (bind , data ) ->
434+ chai .expect (bind .src ).to .equal binding .src
435+ chai .expect (bind .tgt ).to .equal binding .tgt
436+ connectionData .push data
437+ # wait until we've gotten two packets
438+ if connectionData .length == 2
439+ [one , two ] = connectionData
440+ chai .expect (one).to .eql payloads .one
441+ chai .expect (two).to .eql payloads .two
442+ return done null
443+ else if connectionData .length > 2
444+ return done new Error " Got more data than expected"
445+
446+ setup (err ) ->
447+ return done err if err
448+ broker .subscribeData binding, onData, (err ) ->
449+ return done err if err
450+ clients .sender .sendTo ' outqueue' , sendQueue, payloads .one , (err ) ->
451+ return done err if err
452+ clients .sender .sendTo ' outqueue' , sendQueue, payloads .two , (err ) ->
453+ return done err if err
454+
455+ describe ' subscribing to binding with srcQueue==tgtQueue' , ->
456+ sendQueue = ' sub-shared-37'
457+ receiveQueue = sendQueue
458+ binding = { type : ' pubsub' , src : sendQueue, tgt : receiveQueue }
459+ connectionData = []
460+ clients = null
461+
462+ # Should be a before, but the 'beforeEach' of higher scope are ran afterwards...
463+ setup = (done ) ->
464+ createConnectClients address, [' sender' , ' receiver' ], (err , c ) ->
465+ clients = c
466+ createQueues [
467+ [ clients .receiver , ' inqueue' , receiveQueue ]
468+ [ clients .sender , ' outqueue' , sendQueue ]
469+ ], (err ) ->
470+ chai .expect (err).to .not .exist
471+ broker .addBinding binding, (err ) ->
472+ chai .expect (err).to .be .a ' null'
473+ return done null
474+
475+ it ' should provide data sent on connection' , (done ) ->
476+ payloads =
477+ one : { foo : ' sub-106' }
478+ two : { bar : ' sub-107' }
479+
480+ onData = (bind , data ) ->
481+ chai .expect (bind .src ).to .equal binding .src
482+ chai .expect (bind .tgt ).to .equal binding .tgt
483+ connectionData .push data
484+ # wait until we've gotten two packets
485+ if connectionData .length == 2
486+ [one , two ] = connectionData
487+ chai .expect (one).to .eql payloads .one
488+ chai .expect (two).to .eql payloads .two
489+ return done null
490+ else if connectionData .length > 2
491+ return done new Error " Got more data than expected"
492+
493+ setup (err ) ->
494+ return done err if err
495+ broker .subscribeData binding, onData, (err ) ->
496+ return done err if err
497+ clients .sender .sendTo ' outqueue' , sendQueue, payloads .one , (err ) ->
498+ return done err if err
499+ clients .sender .sendTo ' outqueue' , sendQueue, payloads .two , (err ) ->
500+ return done err if err
501+
366502describe ' Transport' , ->
367503 Object .keys (transports).forEach (type) =>
368504 describe " #{ type} " , () ->
0 commit comments