UNPKG

iojs-nanomsg

Version:

nanomsg streams for iøjs

116 lines (77 loc) 3.31 kB
var nano = require('..') module.exports = function (t) { var pubs = { p1 : nano.socket('pub'), p2 : nano.socket('pub'), p3 : nano.socket('pub'), p4 : nano.socket('pub'), p5 : nano.socket('pub') } var sub = nano.socket('sub') var addr = 'tcp://127.0.0.1:4445', i = 0 t.test('bind five heterogeneous pub connections to a subscriber',function(t){ //bind/connect five pubs to one sub from tcp ports 44451 to 44455 while(++i <= 5) pubs['p'+i].bind( addr + i) while(--i > 0) sub.connect( addr + i) //verify connection addresses known by publishers while(++i <= 5) t.ok(has(pubs['p'+i],'how'),'pub p'+i+' \'how\' property check') while(i-- > 1) t.ok(has(pubs['p'+i].how, addr+i ),'pub p'+i+' addr: '+ addr+i) t.end() }) t.test('shutdown the sub\'s connections',function(t){ t.equal( Object.keys(sub.how).length, 5, 'subscriber connections: 5' ) sub.setEncoding('utf8') sub.on('data', function(msg){ //lets crash and burn if we keep getting messages after shutdown if (i > 10) throw 'it' switch (msg) { case 'hello from p1': if (++i == 10) { t.equal( sub.shutdown(addr+1), 'connect endpoint tcp://127.0.0.1:44451 shutdown', 'shutting down connection to endpoint: tcp://127.0.0.1:44451' ) t.equal( Object.keys(sub.how).length, 4, 'subscriber connections: 4' ) } break case 'hello from p2': if (i == 10) { t.equal( sub.shutdown(addr+2), 'connect endpoint tcp://127.0.0.1:44452 shutdown', 'shutting down connection to endpoint: tcp://127.0.0.1:44452' ) t.equal( Object.keys(sub.how).length, 3, 'subscriber connections: 3' ) } break case 'hello from p3': if (i == 10) { t.equal( sub.shutdown(addr+3), 'connect endpoint tcp://127.0.0.1:44453 shutdown', 'shutting down connection to endpoint: tcp://127.0.0.1:44453' ) t.equal( Object.keys(sub.how).length, 2, 'subscriber connections: 2' ) } break case 'hello from p4': if (i == 10) { t.equal( sub.shutdown(addr+4), 'connect endpoint tcp://127.0.0.1:44454 shutdown', 'shutting down connection to endpoint: tcp://127.0.0.1:44454' ) t.equal( Object.keys(sub.how).length, 1, 'subscriber connections: 1' ) } break case 'hello from p5': if (i == 10) { t.equal( sub.shutdown(addr+5), 'connect endpoint tcp://127.0.0.1:44455 shutdown', 'shutting down connection to endpoint: tcp://127.0.0.1:44455' ) t.equal( Object.keys(sub.how).length, 0, 'subscriber connections: 0' ) //clean up clearInterval(pubInterval) for(var p in pubs) pubs[p].close() sub.close(function(){ t.end() }) } break } }) //publish another five hellos after 5ms var pubInterval = setInterval( hellos, 5 ) function hellos(){ pubs.p1.write('hello from p1') pubs.p2.write('hello from p2') pubs.p3.write('hello from p3') pubs.p4.write('hello from p4') pubs.p5.write('hello from p5') } }) } function has (obj, prop) { return Object.hasOwnProperty.call(obj, prop) }