Skip to content

Commit b47a0e6

Browse files
authored
Feature wspingpongtest (#1)
* Implement ParseWebSocketServer ping/pong test Signed-off-by: Layne Bernardo <[email protected]> Signed-off-by: Layne Bernardo <[email protected]>
1 parent dea4e49 commit b47a0e6

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

spec/ParseWebSocketServer.spec.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,37 @@ describe('ParseWebSocketServer', function () {
7676
expect(wssError).toBe('Invalid Packet');
7777
});
7878

79+
it('can handle ping/pong', async () => {
80+
const onConnectCallback = jasmine.createSpy('onConnectCallback');
81+
const http = require('http');
82+
const server = http.createServer();
83+
const parseWebSocketServer = new ParseWebSocketServer(server, onConnectCallback, {
84+
websocketTimeout: 10,
85+
}).server;
86+
87+
const ws = new EventEmitter();
88+
ws.readyState = 0;
89+
ws.OPEN = 0;
90+
ws.ping = jasmine.createSpy('ping');
91+
ws.terminate = jasmine.createSpy('terminate');
92+
93+
parseWebSocketServer.onConnection(ws);
94+
95+
// Make sure callback is called
96+
expect(onConnectCallback).toHaveBeenCalled();
97+
// Check that `waitingForPong` toggles
98+
expect(ws.waitingForPong).toBe(false);
99+
await new Promise(resolve => setTimeout(resolve, 10));
100+
expect(ws.ping).toHaveBeenCalled();
101+
expect(ws.waitingForPong).toBe(true);
102+
ws.emit('pong');
103+
expect(ws.waitingForPong).toBe(false);
104+
await new Promise(resolve => setTimeout(resolve, 10));
105+
expect(ws.waitingForPong).toBe(true);
106+
expect(ws.terminate).not.toHaveBeenCalled();
107+
server.close();
108+
});
109+
79110
it('closes interrupted connection', async () => {
80111
const onConnectCallback = jasmine.createSpy('onConnectCallback');
81112
const http = require('http');
@@ -93,8 +124,10 @@ describe('ParseWebSocketServer', function () {
93124

94125
// Make sure callback is called
95126
expect(onConnectCallback).toHaveBeenCalled();
127+
expect(ws.waitingForPong).toBe(false);
96128
await new Promise(resolve => setTimeout(resolve, 10));
97129
expect(ws.ping).toHaveBeenCalled();
130+
expect(ws.waitingForPong).toBe(true);
98131
await new Promise(resolve => setTimeout(resolve, 10));
99132
expect(ws.terminate).toHaveBeenCalled();
100133
server.close();

0 commit comments

Comments
 (0)