From 2c65411f9a114ad4d73707a65e5c3218d18e2b2b Mon Sep 17 00:00:00 2001 From: Mario Sarcher Date: Mon, 2 Aug 2021 10:51:37 +0200 Subject: [PATCH] add configureable delay for the first message on presence endpoint (needed for tests) --- jest.config.js | 1 + jestEnvVars.js | 1 + src/__tests__/server.test.ts | 22 ++++++++++------------ src/request-handlers/client-socket.ts | 6 +++--- src/server.ts | 3 +-- 5 files changed, 16 insertions(+), 17 deletions(-) create mode 100644 jestEnvVars.js diff --git a/jest.config.js b/jest.config.js index a93551f..fb10ca8 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,4 +1,5 @@ module.exports = { preset: "ts-jest", testEnvironment: "node", + setupFiles: ["./jestEnvVars.js"] }; diff --git a/jestEnvVars.js b/jestEnvVars.js new file mode 100644 index 0000000..cf6a8ac --- /dev/null +++ b/jestEnvVars.js @@ -0,0 +1 @@ +process.env.WS_FIRST_MESSAGE_DELAY=50; diff --git a/src/__tests__/server.test.ts b/src/__tests__/server.test.ts index 6cc959c..62d59b0 100644 --- a/src/__tests__/server.test.ts +++ b/src/__tests__/server.test.ts @@ -415,10 +415,10 @@ describe("TunnelServer", () => { const presence = await incomingSocket("client", { "Authorization": `Bearer ${jwtToken}` }, undefined, false, "presence"); - + presence.ws.onmessage = (message) => { - expect(message.data).toBe(JSON.stringify({ - "presence" : { + expect(message.data).toBe(JSON.stringify({ + "presence" : { "userIds" : [] } }) @@ -445,10 +445,10 @@ describe("TunnelServer", () => { const presence = await incomingSocket("client", { "Authorization": `Bearer ${jwtToken}` }, undefined, false, "presence"); - + presence.ws.onmessage = (message) => { expect(message.data).toBe(JSON.stringify({ - "presence" : { + "presence" : { "userIds" : ["lens-user"] } }) @@ -468,12 +468,12 @@ describe("TunnelServer", () => { const presence = await incomingSocket("client", { "Authorization": `Bearer ${jwtToken}` }, undefined, false, "presence"); - + await sleep(200); //waits until first message was sent presence.ws.onmessage = (message) => { expect(message.data).toBe(JSON.stringify({ - "presence" : { + "presence" : { "userIds" : ["lens-user"] } }) @@ -501,7 +501,7 @@ describe("TunnelServer", () => { const presence = await incomingSocket("client", { "Authorization": `Bearer ${jwtToken}` }, undefined, false, "presence"); - + await sleep(200); //waits until first message was sent const agent = await incomingSocket("agent", { @@ -515,7 +515,7 @@ describe("TunnelServer", () => { presence.ws.onmessage = (message) => { console.log(message.data); expect(message.data).toBe(JSON.stringify({ - "presence" : { + "presence" : { "userIds" : [] } }) @@ -526,11 +526,9 @@ describe("TunnelServer", () => { client.ws.close(); await sleep(200); //waits until ClientDisconnected message was received - + presence.ws.close(); }); - - }); }); }); diff --git a/src/request-handlers/client-socket.ts b/src/request-handlers/client-socket.ts index 023f549..bf36648 100644 --- a/src/request-handlers/client-socket.ts +++ b/src/request-handlers/client-socket.ts @@ -50,7 +50,7 @@ export function handleClientSocket(req: IncomingMessage, socket: WebSocket, serv } -export function handleClientPresenceSocket(req: IncomingMessage, socket: WebSocket, server: TunnelServer) { +export function handleClientPresenceSocket(req: IncomingMessage, socket: WebSocket, server: TunnelServer, firstMessageDelay = 0) { if (!req.headers.authorization) { console.log("SERVER: client did not specify authorization header, closing connection."); @@ -84,8 +84,8 @@ export function handleClientPresenceSocket(req: IncomingMessage, socket: WebSock setTimeout(function() { sendPresenceData(socket, server, clusterId); - }, 50); - + }, firstMessageDelay); + server.on("ClientConnected", () => { sendPresenceData(socket, server, clusterId); }); diff --git a/src/server.ts b/src/server.ts index 5f0b4b0..39a05f1 100644 --- a/src/server.ts +++ b/src/server.ts @@ -43,7 +43,6 @@ export class TunnelServer { }); }); - this.server.listen(port); return listenPromise; @@ -123,7 +122,7 @@ export class TunnelServer { }); } else if (url.pathname === "/client/presence") { this.ws?.handleUpgrade(req, socket, head, (socket: WebSocket) => { - handleClientPresenceSocket(req, socket, this); + handleClientPresenceSocket(req, socket, this, parseInt(process.env.WS_FIRST_MESSAGE_DELAY || "")); }); } }