summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorBert Belder <bertbelder@gmail.com>2021-10-04 18:50:40 -0700
committerBert Belder <bertbelder@gmail.com>2021-11-08 12:49:11 -0800
commit5b1e537446454f6332de44adbeb6a15ff072c2fa (patch)
tree6d5af90855d7f60cbb817fd7b15ff2591a96d18d /cli
parentf1b1a3f389827af8983a78680c066fdad337ae32 (diff)
refactor(ext/http): rewrite hyper integration and fix bug (#12332)
Fixes: #12193
Diffstat (limited to 'cli')
-rw-r--r--cli/tests/unit/http_test.ts40
1 files changed, 39 insertions, 1 deletions
diff --git a/cli/tests/unit/http_test.ts b/cli/tests/unit/http_test.ts
index d947282db..dd2c6fc73 100644
--- a/cli/tests/unit/http_test.ts
+++ b/cli/tests/unit/http_test.ts
@@ -7,6 +7,7 @@ import {
assert,
assertEquals,
assertRejects,
+ assertStrictEquals,
assertThrows,
deferred,
delay,
@@ -386,7 +387,7 @@ unitTest(
Deno.errors.Http,
"connection closed",
);
- // The error from `op_http_request_next` reroutes to `respondWith()`.
+ // The error from `op_http_accept` reroutes to `respondWith()`.
assertEquals(await nextRequestPromise, null);
listener.close();
})();
@@ -865,6 +866,7 @@ unitTest(
const writer = writable.getWriter();
async function writeResponse() {
+ await delay(50);
await writer.write(
new TextEncoder().encode(
"written to the writable side of a TransformStream",
@@ -999,3 +1001,39 @@ unitTest(
await Promise.all([server(), client()]);
},
);
+
+// https://github.com/denoland/deno/pull/12332
+unitTest(
+ { permissions: { net: true } },
+ async function httpConnConcurrentNextRequestCalls() {
+ const hostname = "localhost";
+ const port = 4501;
+
+ async function server() {
+ const listener = Deno.listen({ hostname, port });
+ const tcpConn = await listener.accept();
+ const httpConn = Deno.serveHttp(tcpConn);
+ const promises = new Array(10).fill(null).map(async (_, i) => {
+ const event = await httpConn.nextRequest();
+ assert(event);
+ const { pathname } = new URL(event.request.url);
+ assertStrictEquals(pathname, `/${i}`);
+ const response = new Response(`Response #${i}`);
+ await event.respondWith(response);
+ });
+ await Promise.all(promises);
+ httpConn.close();
+ listener.close();
+ }
+
+ async function client() {
+ for (let i = 0; i < 10; i++) {
+ const response = await fetch(`http://${hostname}:${port}/${i}`);
+ const body = await response.text();
+ assertStrictEquals(body, `Response #${i}`);
+ }
+ }
+
+ await Promise.all([server(), delay(100).then(client)]);
+ },
+);