added test for handling addr times and v6 addresses

This commit is contained in:
Braydon Fuller 2015-03-13 23:23:52 -04:00
parent 1545abbea0
commit e62ddd93f6
2 changed files with 79 additions and 3 deletions

View File

@ -69,9 +69,11 @@ function Pool(options) {
var length = addrs.length;
for (var i = 0; i < length; i++) {
var addr = addrs[i];
// In case of an invalid time, assume "5 days ago"
if (addr.time <= 100000000 || addr.time > (now() + 10 * 60)) {
addr.time = now() - 5 * 24 * 60 * 60;
var future = new Date().getTime() + (10 * 60 * 1000);
if (addr.time.getTime() <= 100000000000 || addr.time.getTime() > future) {
// In case of an invalid time, assume "5 days ago"
var past = new Date(new Date().getTime() - 5 * 24 * 60 * 60 * 1000);
addr.time = past;
}
this._addAddr(addr);
}

View File

@ -336,6 +336,80 @@ describe('Pool', function() {
pool.connect();
});
it('not call _fillConnections if keepalive is false', function(done) {
done();
});
it('keep original time for handling peeraddr messages', function(done) {
var pool = new Pool({network: Networks.livenet, maxSize: 1});
var now = new Date();
pool._addAddr = function(addr) {
addr.time.should.equal(now);
done();
};
pool.emit('peeraddr', {}, {
addresses: [
{
time: now
}
]
});
});
it('replace time if time is invalid on peeraddr messages', function(done) {
var pool = new Pool({network: Networks.livenet, maxSize: 1});
var future = new Date(new Date().getTime() + 10 * 70 * 1000);
var past = new Date(new Date().getTime() - 4 * 24 * 60 * 60 * 1000); // 4 days ago
pool._addAddr = function(addr) {
addr.time.should.not.equal(future);
addr.time.getTime().should.be.below(past.getTime());
done();
};
pool.emit('peeraddr', {}, {
addresses: [
{
time: future
}
]
});
});
describe('#_removeConnectedPeer', function() {
it('disconnect peer if peer status is not disconnected', function(done) {
var pool = new Pool({network: Networks.livenet, maxSize: 1});
/* jshint sub: true */
pool._connectedPeers['hash'] = {
status: Peer.STATUS.CONNECTED,
disconnect: function() {
done();
}
};
pool._removeConnectedPeer({
hash: 'hash'
});
});
});
describe('#_connectPeer', function() {
it('connect ipv6 peer', function() {
var connectStub = sinon.stub(Peer.prototype, 'connect');
var pool = new Pool({network: Networks.livenet, maxSize: 1});
var ipv6 = '2001:0db8:85a3:0042:1000:8a2e:0370:7334';
pool._addPeerEventHandlers = sinon.stub();
pool._connectPeer({
ip: {
v6: ipv6
},
hash: 'hash'
});
/* jshint sub: true */
should.exist(pool._connectedPeers['hash']);
pool._addPeerEventHandlers.calledOnce.should.equal(true);
Peer.prototype.connect.calledOnce.should.equal(true);
connectStub.restore();
});
});
describe('#_addConnectedPeer', function() {
it('should add a peer', function() {