handleTransmission tests
This commit is contained in:
parent
80dc77140d
commit
84acb8a217
@ -385,7 +385,7 @@ PeerServer.prototype._handleTransmission = function(key, message) {
|
|||||||
} else {
|
} else {
|
||||||
// Wait for this client to connect/reconnect (XHR) for important
|
// Wait for this client to connect/reconnect (XHR) for important
|
||||||
// messages.
|
// messages.
|
||||||
if (type !== 'LEAVE' && type !== 'EXPIRE' && !!dst) {
|
if (type !== 'LEAVE' && type !== 'EXPIRE' && dst) {
|
||||||
var self = this;
|
var self = this;
|
||||||
if (!this._outstanding[key][dst]) {
|
if (!this._outstanding[key][dst]) {
|
||||||
this._outstanding[key][dst] = [];
|
this._outstanding[key][dst] = [];
|
||||||
|
101
test/server.js
101
test/server.js
@ -92,11 +92,110 @@ describe('PeerServer', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('#_removePeer', function() {
|
describe('#_removePeer', function() {
|
||||||
|
var p;
|
||||||
|
before(function() {
|
||||||
|
PeerServer.prototype._initializeHTTP = sinon.stub();
|
||||||
|
p = new PeerServer({ port: 8000 });
|
||||||
|
|
||||||
|
var fake = {ip: '0.0.0.0'};
|
||||||
|
p._ips[fake.ip] = 1;
|
||||||
|
p._clients['peerjs'] = {};
|
||||||
|
p._clients['peerjs']['test'] = fake;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should decrement the number of ips being used and remove the connection', function() {
|
||||||
|
expect(p._ips['0.0.0.0']).to.be(1);
|
||||||
|
p._removePeer('peerjs', 'test');
|
||||||
|
expect(p._ips['0.0.0.0']).to.be(0);
|
||||||
|
expect(p._clients['peerjs']['test']).to.be(undefined);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('#_handleTransmission', function() {
|
describe('#_handleTransmission', function() {
|
||||||
// TODO: this is probably the most important method to test.
|
var p;
|
||||||
|
var KEY = 'peerjs';
|
||||||
|
var ID = 'test';
|
||||||
|
before(function() {
|
||||||
|
PeerServer.prototype._initializeHTTP = sinon.stub();
|
||||||
|
p = new PeerServer({ port: 8000 });
|
||||||
|
p._clients[KEY] = {};
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should send to the socket when appropriate', function() {
|
||||||
|
var send = sinon.spy();
|
||||||
|
var write = sinon.spy();
|
||||||
|
var message = {dst: ID};
|
||||||
|
p._clients[KEY][ID] = {
|
||||||
|
socket: {
|
||||||
|
send: send
|
||||||
|
},
|
||||||
|
res: {
|
||||||
|
write: write
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p._handleTransmission(KEY, message);
|
||||||
|
expect(send.calledWith(JSON.stringify(message))).to.be(true);
|
||||||
|
expect(write.calledWith(JSON.stringify(message))).to.be(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should write to the response with a newline when appropriate', function() {
|
||||||
|
var write = sinon.spy();
|
||||||
|
var message = {dst: ID};
|
||||||
|
p._clients[KEY][ID] = {
|
||||||
|
res: {
|
||||||
|
write: write
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p._handleTransmission(KEY, message);
|
||||||
|
expect(write.calledWith(JSON.stringify(message) + '\n')).to.be(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
// no destination.
|
||||||
|
it('should push to outstanding messages if the destination is not found', function() {
|
||||||
|
var message = {dst: ID};
|
||||||
|
p._outstanding[KEY] = {};
|
||||||
|
p._clients[KEY] = {};
|
||||||
|
p._handleTransmission(KEY, message);
|
||||||
|
expect(p._outstanding[KEY][ID][0]).to.be(message);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not push to outstanding messages if the message is a LEAVE or EXPIRE', function() {
|
||||||
|
var message = {dst: ID, type: 'LEAVE'};
|
||||||
|
p._outstanding[KEY] = {};
|
||||||
|
p._clients[KEY] = {};
|
||||||
|
p._handleTransmission(KEY, message);
|
||||||
|
expect(p._outstanding[KEY][ID]).to.be(undefined);
|
||||||
|
|
||||||
|
message = {dst: ID, type: 'EXPIRE'};
|
||||||
|
p._handleTransmission(KEY, message);
|
||||||
|
expect(p._outstanding[KEY][ID]).to.be(undefined);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should remove the peer if there is no dst in the message', function() {
|
||||||
|
var message = {type: 'LEAVE'};
|
||||||
|
p._removePeer = sinon.spy();
|
||||||
|
p._outstanding[KEY] = {};
|
||||||
|
p._handleTransmission(KEY, message);
|
||||||
|
expect(p._removePeer.calledWith(KEY, undefined)).to.be(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should remove the peer and send a LEAVE message if the socket appears to be closed', function() {
|
||||||
|
var send = sinon.stub().throws();
|
||||||
|
var message = {dst: ID};
|
||||||
|
var leaveMessage = {type: 'LEAVE', dst: undefined, src: ID};
|
||||||
|
var oldHandleTransmission = p._handleTransmission;
|
||||||
|
p._removePeer = function() {
|
||||||
|
// Hacks!
|
||||||
|
p._handleTransmission = sinon.spy();
|
||||||
|
};
|
||||||
|
p._clients[KEY][ID] = {
|
||||||
|
socket: {
|
||||||
|
send: send
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p._handleTransmission(KEY, message);
|
||||||
|
expect(p._handleTransmission.calledWith(KEY, leaveMessage)).to.be(true);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('#_generateClientId', function() {
|
describe('#_generateClientId', function() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user