UNPKG

muweb-socket

Version:

WebSocket communication for mudb

129 lines 4.88 kB
"use strict"; 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