muweb-socket
Version:
WebSocket communication for mudb
129 lines • 4.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var http = require("http");
var test = require("tape");
var ip = require("ip");
var WebSocket = require("uws");
var socket_1 = require("mudb/socket");
var server_1 = require("../server");
function noop() { }
var server = http.createServer();
test.onFinish(function () { return process.exit(0); });
test('server initial state', function (t) {
var socketServer = new server_1.MuWebSocketServer({ server: server });
t.equals(socketServer.state, socket_1.MuSocketServerState.INIT, 'should be INIT');
t.end();
});
test('socketServer.start() - when INIT', function (t) {
t.plan(2);
var socketServer = new server_1.MuWebSocketServer({ server: server });
socketServer.start({
ready: function () {
t.pass('should invoke ready handler');
t.equals(socketServer.state, socket_1.MuSocketServerState.RUNNING, 'should change server state to RUNNING');
},
connection: noop,
close: noop,
});
});
test('socketServer.start() - when RUNNING', function (t) {
t.plan(1);
var socketServer = new server_1.MuWebSocketServer({ server: server });
socketServer.start({
ready: function () {
t.throws(function () { return socketServer.start({
ready: noop,
connection: noop,
close: noop,
}); });
},
connection: noop,
close: noop,
});
});
test('socketServer.start() - when SHUTDOWN', function (t) {
t.plan(1);
var socketServer = new server_1.MuWebSocketServer({ server: server });
socketServer.start({
ready: function () {
socketServer.close();
t.throws(function () { return socketServer.start({
ready: noop,
connection: noop,
close: noop,
}); });
},
connection: noop,
close: noop,
});
});
test('when a client connects', function (t) {
t.plan(3);
function id() {
return Math.random().toString(36).substr(2);
}
var url = '';
var socketServer = new server_1.MuWebSocketServer({ server: server });
socketServer.start({
ready: function () {
t.pass('should invoke ready handler');
var numSockets = 0;
var numSocketsToOpen = 5;
var sessionId = id();
function openSocket() {
var socket = new WebSocket(url);
socket.binaryType = 'arraybuffer';
socket.onopen = function () {
socket.onmessage = function (ev) {
if (typeof ev.data === 'string') {
var firstSocket = numSockets === 0;
if (firstSocket && JSON.parse(ev.data).reliable) {
++numSockets;
t.pass('server should indicate first socket as reliable one');
}
if (!firstSocket && !JSON.parse(ev.data).reliable) {
++numSockets;
}
if (numSockets === numSocketsToOpen) {
t.pass('server should indicate other sockets as unreliable ones');
}
if (numSockets > numSocketsToOpen) {
t.fail("should not open more than " + numSocketsToOpen + " sockets");
}
}
};
socket.send(JSON.stringify({ sessionId: sessionId }));
};
}
for (var i = 0; i < numSocketsToOpen; ++i) {
openSocket();
}
},
connection: noop,
close: noop,
});
server.listen(function () {
url = "ws://" + ip.address() + ":" + server.address().port;
});
});
test('socketServer.close() - when INIT', function (t) {
var socketServer = new server_1.MuWebSocketServer({ server: server });
socketServer.close();
t.equals(socketServer.state, socket_1.MuSocketServerState.SHUTDOWN, 'should change server state to SHUTDOWN');
t.end();
});
test('socketServer.close() - when RUNNING', function (t) {
var socketServer = new server_1.MuWebSocketServer({ server: server });
socketServer.start({
ready: function () {
socketServer.close();
t.equals(socketServer.state, socket_1.MuSocketServerState.SHUTDOWN, 'should change server state to SHUTDOWN');
},
connection: noop,
close: function (error) {
t.equals(error, undefined, 'should invoke close handler without error message');
t.end();
},
});
});
//# sourceMappingURL=server.js.map