From dea4e49a202d3dbcd10d2aa288bd08786095bd11 Mon Sep 17 00:00:00 2001 From: Layne Bernardo Date: Thu, 16 Jun 2022 03:38:51 -0500 Subject: [PATCH 1/3] Fix WSS ping/pong Signed-off-by: Layne Bernardo --- src/LiveQuery/ParseWebSocketServer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LiveQuery/ParseWebSocketServer.js b/src/LiveQuery/ParseWebSocketServer.js index b8c66673ab..927ee4b275 100644 --- a/src/LiveQuery/ParseWebSocketServer.js +++ b/src/LiveQuery/ParseWebSocketServer.js @@ -16,7 +16,7 @@ export class ParseWebSocketServer { wss.onConnection = ws => { ws.waitingForPong = false; ws.on('pong', () => { - this.waitingForPong = false; + ws.waitingForPong = false; }); ws.on('error', error => { logger.error(error.message); From b47a0e6f76f852cd18bd506cdbb2a4398c0a1a8f Mon Sep 17 00:00:00 2001 From: Layne Bernardo <44737349+LMBernardo@users.noreply.github.com> Date: Thu, 16 Jun 2022 19:36:27 -0500 Subject: [PATCH 2/3] Feature wspingpongtest (#1) * Implement ParseWebSocketServer ping/pong test Signed-off-by: Layne Bernardo Signed-off-by: Layne Bernardo --- spec/ParseWebSocketServer.spec.js | 33 +++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/spec/ParseWebSocketServer.spec.js b/spec/ParseWebSocketServer.spec.js index 4eb73695d1..2c0a8437b4 100644 --- a/spec/ParseWebSocketServer.spec.js +++ b/spec/ParseWebSocketServer.spec.js @@ -76,6 +76,37 @@ describe('ParseWebSocketServer', function () { expect(wssError).toBe('Invalid Packet'); }); + it('can handle ping/pong', async () => { + const onConnectCallback = jasmine.createSpy('onConnectCallback'); + const http = require('http'); + const server = http.createServer(); + const parseWebSocketServer = new ParseWebSocketServer(server, onConnectCallback, { + websocketTimeout: 10, + }).server; + + const ws = new EventEmitter(); + ws.readyState = 0; + ws.OPEN = 0; + ws.ping = jasmine.createSpy('ping'); + ws.terminate = jasmine.createSpy('terminate'); + + parseWebSocketServer.onConnection(ws); + + // Make sure callback is called + expect(onConnectCallback).toHaveBeenCalled(); + // Check that `waitingForPong` toggles + expect(ws.waitingForPong).toBe(false); + await new Promise(resolve => setTimeout(resolve, 10)); + expect(ws.ping).toHaveBeenCalled(); + expect(ws.waitingForPong).toBe(true); + ws.emit('pong'); + expect(ws.waitingForPong).toBe(false); + await new Promise(resolve => setTimeout(resolve, 10)); + expect(ws.waitingForPong).toBe(true); + expect(ws.terminate).not.toHaveBeenCalled(); + server.close(); + }); + it('closes interrupted connection', async () => { const onConnectCallback = jasmine.createSpy('onConnectCallback'); const http = require('http'); @@ -93,8 +124,10 @@ describe('ParseWebSocketServer', function () { // Make sure callback is called expect(onConnectCallback).toHaveBeenCalled(); + expect(ws.waitingForPong).toBe(false); await new Promise(resolve => setTimeout(resolve, 10)); expect(ws.ping).toHaveBeenCalled(); + expect(ws.waitingForPong).toBe(true); await new Promise(resolve => setTimeout(resolve, 10)); expect(ws.terminate).toHaveBeenCalled(); server.close(); From 4d8e09cb6440d84791f58a3059e653c5017b403a Mon Sep 17 00:00:00 2001 From: Manuel <5673677+mtrezza@users.noreply.github.com> Date: Fri, 17 Jun 2022 13:19:07 +0200 Subject: [PATCH 3/3] Update spec/ParseWebSocketServer.spec.js --- spec/ParseWebSocketServer.spec.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/spec/ParseWebSocketServer.spec.js b/spec/ParseWebSocketServer.spec.js index 2c0a8437b4..5955ee3241 100644 --- a/spec/ParseWebSocketServer.spec.js +++ b/spec/ParseWebSocketServer.spec.js @@ -92,9 +92,7 @@ describe('ParseWebSocketServer', function () { parseWebSocketServer.onConnection(ws); - // Make sure callback is called expect(onConnectCallback).toHaveBeenCalled(); - // Check that `waitingForPong` toggles expect(ws.waitingForPong).toBe(false); await new Promise(resolve => setTimeout(resolve, 10)); expect(ws.ping).toHaveBeenCalled();