mudb
Version:
Real-time database for multiplayer games
149 lines • 5.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const test = require("tape");
const __1 = require("../");
const __2 = require("../");
const socket_1 = require("../../socket");
function noop() { }
function id() {
return Math.random().toString(36).substr(2);
}
test('server initial state', (t) => {
const server = __1.createLocalSocketServer();
t.equal(server.state(), socket_1.MuSocketServerState.INIT, 'should be INIT');
t.end();
});
test('server.start() - when INIT', (t) => {
t.plan(4);
const server = __1.createLocalSocketServer();
server.start({
ready: () => {
t.equal(server.state(), socket_1.MuSocketServerState.RUNNING, 'should change server state to RUNNING');
setTimeout(() => {
t.equal(server.clients.length, 1, 'should handle pending connections');
server.close();
}, 0);
},
connection: (socket) => t.true(socket instanceof __2.MuLocalSocket, 'should set message handler'),
close: (error) => t.equal(error, undefined, 'should set close handler'),
});
__1.createLocalSocket({
sessionId: id(),
server,
}).open({
ready: noop,
message: noop,
close: noop,
});
});
test('server.start() - when RUNNING', (t) => {
t.plan(1);
const server = __1.createLocalSocketServer();
server.start({
ready: () => {
server.start({
ready: noop,
connection: noop,
close: () => t.fail('should not call spec.close()'),
});
},
connection: noop,
close: (error) => t.equal(typeof error, 'string', 'should invoke close handler with error message'),
});
});
test('server.start() - when SHUTDOWN', (t) => {
t.plan(2);
const server = __1.createLocalSocketServer();
server.start({
ready: () => {
server.close();
server.start({
ready: noop,
connection: noop,
close: () => t.fail('should not call spec.close()'),
});
},
connection: noop,
close: (error) => {
if (error) {
t.equal(typeof error, 'string', 'should invoke close handler with error message');
t.equal(server.state(), socket_1.MuSocketServerState.SHUTDOWN, 'should not change server state');
}
},
});
});
test('server.close() - when RUNNING', (t) => {
t.plan(5);
const server = __1.createLocalSocketServer();
const clientSocket = __1.createLocalSocket({
sessionId: id(),
server,
});
server.start({
ready: noop,
connection: (socket) => socket.open({
ready: () => server.close(),
message: noop,
close: noop,
}),
close: (error) => {
t.equal(error, undefined, 'should invoke close handler without error message');
t.equal(server.state(), socket_1.MuSocketServerState.SHUTDOWN, 'should change server state to SHUTDOWN');
t.equal(server.clients.length, 0, 'should remove connection from server');
t.equal(clientSocket.state(), socket_1.MuSocketState.CLOSED, 'should close client socket');
t.equal(clientSocket._duplex.state(), socket_1.MuSocketState.CLOSED, 'should close server socket');
},
});
clientSocket.open({
ready: noop,
message: noop,
close: noop,
});
});
test('server.close() - when RUNNING, sockets not OPEN', (t) => {
t.plan(5);
const server = __1.createLocalSocketServer();
const clientSocket = __1.createLocalSocket({
sessionId: id(),
server,
});
server.start({
ready: () => server.close(),
connection: noop,
close: (error) => {
t.equal(error, undefined, 'should invoke close handler without error message');
t.equal(server.state(), socket_1.MuSocketServerState.SHUTDOWN, 'should change server state to SHUTDOWN');
t.equal(server.clients.length, 0, 'should remove connection from server');
setTimeout(() => {
t.equal(clientSocket.state(), socket_1.MuSocketState.CLOSED, 'should close client socket');
t.equal(clientSocket._duplex.state(), socket_1.MuSocketState.CLOSED, 'should close server socket');
}, 0);
},
});
clientSocket.open({
ready: noop,
message: noop,
close: noop,
});
});
test('server.close() - when INIT', (t) => {
const server = __1.createLocalSocketServer();
server.close();
t.equal(server.state(), socket_1.MuSocketServerState.SHUTDOWN, 'should change server state to SHUTDOWN');
t.end();
});
test('server.close() - when SHUTDOWN', (t) => {
t.plan(1);
let callsToOnClose = 0;
const server = __1.createLocalSocketServer();
server.start({
ready: () => {
server.close();
server.close();
t.equal(callsToOnClose, 1, 'should not invoke close handler');
},
connection: noop,
close: () => ++callsToOnClose,
});
});
//# sourceMappingURL=server.js.map