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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
import { file, gc, serve } from "bun";
import { afterEach, describe, it, expect } from "bun:test";
import { readFileSync } from "fs";
import { resolve } from "path";
var port = 4321;
function getPort() {
if (port > 4444) {
port = 4321;
}
return port++;
}
describe("websocket server", () => {
it("can do hello world", async () => {
var server = serve({
port: getPort(),
websocket: {
open(ws) {
ws.send("hello world");
},
message(ws, msg) {},
},
fetch(req) {
return new Response("noooooo hello world");
},
});
await new Promise((resolve, reject) => {
const websocket = new WebSocket(`ws://localhost:${server.port}`);
websocket.onmessage = (e) => {
try {
expect(e.data).toBe("hello world");
resolve();
} catch (r) {
reject(r);
return;
} finally {
server?.stop();
websocket.close();
}
};
websocket.onerror = (e) => {
reject(e);
};
});
});
it("can do some back and forth", async () => {
var dataCount = 0;
var server = serve({
port: getPort(),
websocket: {
accept(ws) {
return { count: 0 };
},
open(ws) {
ws.send("first");
},
message(ws, msg) {
ws.send(`counter: ${dataCount++}`);
},
},
fetch(req) {
return new Response("noooooo hello world");
},
});
await new Promise((resolve, reject) => {
const websocket = new WebSocket(`ws://localhost:${server.port}`);
var counter = 0;
websocket.onmessage = (e) => {
try {
switch (counter++) {
case 0: {
expect(e.data).toBe("first");
websocket.send("where are the loops");
break;
}
case 1: {
expect(e.data).toBe("counter: 0");
websocket.send("br0ther may i have some loops");
break;
}
case 2: {
expect(e.data).toBe("counter: 1");
websocket.send("br0ther may i have some loops");
break;
}
case 3: {
expect(e.data).toBe("counter: 2");
resolve();
break;
}
}
} catch (r) {
reject(r);
console.error(r);
server?.stop();
console.log("i am closing!");
websocket.close();
return;
} finally {
}
};
websocket.onerror = (e) => {
reject(e);
};
});
});
});
|