deno.land / x / opine@2.3.4 / test / units / req.upgrade.test.ts

req.upgrade.test.ts
نووسراو ببینە
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import { opine } from "../../mod.ts";import { deferred, expect } from "../deps.ts";import { describe, it } from "../utils.ts";
describe("req", function () { describe(".upgrade", function () { it("should upgrade websocket requests", async function (done) { let serverSocket: WebSocket;
const clientSocketClosedDeferred = deferred(); const clientSocketPingedDeferred = deferred(); const clientSocketPongedDeferred = deferred(); const serverSocketClosedDeferred = deferred(); const serverSocketPingedDeferred = deferred(); const serverSocketPongedDeferred = deferred();
const handleSocket = (socket: WebSocket) => { serverSocket = socket;
serverSocket.addEventListener("close", () => { serverSocketClosedDeferred.resolve(); });
serverSocket.addEventListener("open", () => { console.log("[server]: ping"); serverSocket.send("ping"); serverSocketPingedDeferred.resolve(); });
serverSocket.addEventListener("message", (e) => { if (e.data === "ping") { console.log("[server]: pong"); serverSocket.send("pong"); serverSocketPongedDeferred.resolve(); } else if (e.data === "pong") { serverSocket.close(); } }); };
const app = opine();
app.get("/ws", function (req, _res, _next) { if (req.headers.get("upgrade") === "websocket") { const socket = req.upgrade(); expect(socket).toBeInstanceOf(WebSocket); handleSocket(socket); } });
const server = app.listen(3000);
const clientSocket = new WebSocket("ws://localhost:3000/ws");
clientSocket.addEventListener("close", () => { clientSocketClosedDeferred.resolve(); });
clientSocket.addEventListener("open", () => { console.log("[client]: ping"); clientSocket.send("ping"); clientSocketPingedDeferred.resolve(); });
clientSocket.addEventListener("message", (e) => { if (e.data === "ping") { console.log("[client]: pong"); clientSocket.send("pong"); clientSocketPongedDeferred.resolve(); } else if (e.data === "pong") { clientSocket.close(); } else { done(new Error("unexpected message")); } });
clientSocket.addEventListener("error", (e) => { done(e); });
await Promise.all([ clientSocketPingedDeferred, clientSocketPongedDeferred, serverSocketPingedDeferred, serverSocketPongedDeferred, serverSocketClosedDeferred, clientSocketClosedDeferred, ]);
server.close(); done(); }); });});
opine

Version Info

Tagged at
2 years ago