upnode
Version:
transactional connection queue for dnode
110 lines (93 loc) • 2.67 kB
JavaScript
var upnode = require('../');
var test = require('tap').test;
test('simple', function (t) {
t.plan(8);
var port = Math.floor(Math.random() * 5e4 + 1e4);
var up = upnode.connect(port);
var counts = { up : 0, down : 0, reconnect : 0 };
up.on('up', function () { counts.up ++ });
up.on('down', function () { counts.down ++ });
up.on('reconnect', function () { counts.reconnect ++ });
var messages = [];
var iv = setInterval(function () {
up(function (remote) {
remote.time(function (t) {
messages.push(t);
});
});
}, 250);
up.once('reconnect', function () {
up.once('up', function () {
up.once('down', function () {
up.once('up', finish);
setTimeout(on, 50);
});
setTimeout(off, 50);
});
setTimeout(on, 50);
});
function finish () {
var r0 = messages.slice(0,3).reduce(function (acc, x) {
if (x > acc.max) acc.max = x;
if (x < acc.min) acc.min = x;
return acc;
}, { min : Infinity, max : -Infinity });
t.ok(r0.max < Date.now());
t.ok(r0.max > Date.now() - 5000);
t.ok(r0.max - r0.min < 10);
t.ok(messages[0] <= messages[messages.length-1]);
t.ok(messages.length > 5);
t.equal(counts.up, 2);
t.equal(counts.down, 1);
t.ok(counts.reconnect >= 2);
off();
up.close();
clearInterval(iv);
t.end();
}
var server;
function on () {
server = upnode(function (client, conn) {
this.time = function (cb) { cb(Date.now()) };
}).listen(port);
}
function off () {
server.end();
server.close();
}
});
test('does not leak on.close listeners', function(t) {
t.plan(1);
var port = Math.floor(Math.random() * 5e4 + 1e4);
var up = upnode.connect(port);
var count = 0;
var iterations = 3;
on();
up.once('close', function() {
t.equal(up.listeners('close').length, 0);
t.end();
})
up.on('up', function() {
iterations--;
off();
})
up.on('down', function() {
if (iterations === 0) return done();
on();
})
function done () {
up.close();
}
var server;
function on () {
setTimeout(function() {
server = upnode.listen(port);
}, 100)
}
function off () {
setTimeout(function() {
server.end();
server.close();
}, 100)
}
});