Skip to content

Commit 0a73a2a

Browse files
committed
fix: Unset ws of WebSocketConnectorImpl after close event
1 parent 23999e8 commit 0a73a2a

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

src/adapters/ws/web-socket-connector.spec.ts

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import getPort from "get-port";
2-
import { WebSocketServer } from "isomorphic-ws";
2+
import { WebSocket, WebSocketServer } from "isomorphic-ws";
33

4+
import { sleep } from "../../utils";
45
import { MastoWebSocketError } from "../errors";
56
import { WebSocketConnectorImpl } from "./web-socket-connector";
67

@@ -40,4 +41,35 @@ describe("WebSocketConnector", () => {
4041
const promise = connector.acquire();
4142
await expect(promise).rejects.toBeInstanceOf(MastoWebSocketError);
4243
});
44+
45+
it("creates reconnection after connection closed", async () => {
46+
const port = await getPort();
47+
let server = new WebSocketServer({ port });
48+
49+
const connector = new WebSocketConnectorImpl({
50+
constructorParameters: [`ws://localhost:${port}`],
51+
});
52+
const connections = connector[Symbol.asyncIterator]();
53+
54+
// First connection
55+
const { value: ws } = await connections.next();
56+
await sleep(100);
57+
expect(ws.readyState).toBe(WebSocket.OPEN);
58+
59+
// Close first connection
60+
for (const client of server.clients) client.close();
61+
server.close();
62+
await sleep(100);
63+
expect(ws.readyState).toBe(WebSocket.CLOSED);
64+
65+
server = new WebSocketServer({ port });
66+
67+
// Second connection
68+
const { value: ws2 } = await connections.next();
69+
await sleep(100);
70+
expect(ws2.readyState).toBe(WebSocket.OPEN);
71+
72+
server.close();
73+
connector.kill();
74+
});
4375
});

src/adapters/ws/web-socket-connector.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,6 @@ export class WebSocketConnectorImpl implements WebSocketConnector {
6666

6767
private async spawn() {
6868
while (!this.killed) {
69-
this.ws?.close();
70-
7169
try {
7270
await this.backoff.sleep();
7371
} catch {
@@ -96,6 +94,8 @@ export class WebSocketConnectorImpl implements WebSocketConnector {
9694
} catch (error) {
9795
this.logger?.log("error", "WebSocket error:", error);
9896
}
97+
98+
this.ws = undefined;
9999
}
100100

101101
for (const { reject } of this.queue) {

0 commit comments

Comments
 (0)