summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2024-03-16 08:14:27 -0300
committerEuAndreh <eu@euandre.org>2024-03-16 08:14:27 -0300
commit2dfed1b7fbf19e5e874340340f764a90252b5537 (patch)
tree2695e700321093848f6824c00b6c6d1beeb8d691 /tests
parentsrc/hero.mjs: use empty object as default value for renderHeaders() (diff)
downloadpapod-2dfed1b7fbf19e5e874340340f764a90252b5537.tar.gz
papod-2dfed1b7fbf19e5e874340340f764a90252b5537.tar.xz
src/hero.mjs: Add makeUpgradeListener() (again, now rewritten)
Diffstat (limited to 'tests')
-rw-r--r--tests/js/hero.mjs79
1 files changed, 79 insertions, 0 deletions
diff --git a/tests/js/hero.mjs b/tests/js/hero.mjs
index ed876e7..a5166c5 100644
--- a/tests/js/hero.mjs
+++ b/tests/js/hero.mjs
@@ -40,6 +40,7 @@ import {
handle404,
make404Handler,
handleRequest,
+ makeUpgradeListener,
makeRequestListener,
actionsFn,
lineHandlerFn,
@@ -1556,6 +1557,83 @@ const test_handleRequest = async t => {
});
};
+const test_makeUpgradeListener = async t => {
+ t.start("makeUpgradeListener()");
+
+ await t.test("straightforward connection stablishing", async () => {
+ const calls = [];
+ const fn = x => calls.push([x.upgrade, x.socket]);
+ const routes = [[ "WEBSOCKET", "/socket", fn ]];
+ const table = buildRoutes(routes, [
+ interceptors.contentType,
+ interceptors.websocketHandshake,
+ ]);
+ const upgradeListener = makeUpgradeListener(table);
+
+ const req = {
+ method: "GET",
+ url: "/socket",
+ upgrade: true,
+ headers: {
+ "upgrade": "websocket",
+ "sec-websocket-key": "aaaaabbbbbcccccdddddee==",
+ "sec-websocket-version": "13",
+ },
+ };
+
+ const contents = [];
+ const socket = {
+ end: () => assert.ok(false),
+ write: x => contents.push(x),
+ };
+ await upgradeListener(req, socket);
+
+ assert.deepEqual(calls, [[true, socket]]);
+ assert.deepEqual(contents, [
+ "HTTP/1.1 101 Switching Protocols\r\n" +
+ "Connection: Upgrade\r\n" +
+ "Content-Length: 20\r\n" +
+ "Content-Type: text/plain\r\n" +
+ "Sec-WebSocket-Accept: eHnDP9gUz224y002aFCe7swigxg=\r\n" +
+ "Upgrade: websocket\r\n" +
+ "\r\n",
+ "Switching Protocols\n",
+ ]);
+ });
+
+ await t.test("early termination cases", async () => {
+ const routes = [[ "WEBSOCKET", "/a-socket", null ]];
+ const table = buildRoutes(routes, [
+ interceptors.websocketHandshake,
+ ]);
+ const upgradeListener = makeUpgradeListener(table);
+
+ const req = {
+ method: "GET",
+ url: "/a-socket",
+ upgrade: true,
+ headers: {
+ "upgrade": "websocket",
+ },
+ };
+
+ let ended = false;
+ const contents = [];
+ const socket = {
+ end: () => ended = true,
+ write: x => contents.push(x),
+ };
+
+ await upgradeListener(req, socket);
+
+ assert.ok(ended);
+ assert.deepEqual(contents, [
+ "HTTP/1.1 400 Bad Request\r\n\r\n",
+ 'Missing "Sec-WebSocket-Key" header\n',
+ ]);
+ });
+};
+
const test_makeRequestListener = async t => {
t.start("makeRequestListener()");
@@ -2258,6 +2336,7 @@ await runner.runTests([
test_writeHead,
test_make404Handler,
test_handleRequest,
+ test_makeUpgradeListener,
test_makeRequestListener,
test_actionsFn,
test_lineHandlerFn,