diff options
Diffstat (limited to 'cli/tests/unit/http_test.ts')
-rw-r--r-- | cli/tests/unit/http_test.ts | 200 |
1 files changed, 27 insertions, 173 deletions
diff --git a/cli/tests/unit/http_test.ts b/cli/tests/unit/http_test.ts index 5fabd40fe..37c827b9b 100644 --- a/cli/tests/unit/http_test.ts +++ b/cli/tests/unit/http_test.ts @@ -854,45 +854,6 @@ Deno.test({ permissions: { net: true } }, async function httpServerPanic() { listener.close(); }); -Deno.test( - { permissions: { net: true, write: true, read: true } }, - async function httpServerClosedStream() { - const listener = Deno.listen({ port: 4502 }); - - const client = await Deno.connect({ port: 4502 }); - await client.write(new TextEncoder().encode( - `GET / HTTP/1.0\r\n\r\n`, - )); - - const conn = await listener.accept(); - const httpConn = Deno.serveHttp(conn); - const ev = await httpConn.nextRequest(); - const { respondWith } = ev!; - - const tmpFile = await Deno.makeTempFile(); - const file = await Deno.open(tmpFile, { write: true, read: true }); - await file.write(new TextEncoder().encode("hello")); - - const reader = await file.readable.getReader(); - while (true) { - const { done, value } = await reader.read(); - if (done) break; - assert(value); - } - - try { - await respondWith(new Response(file.readable)); - fail("The stream should've been locked"); - } catch { - // pass - } - - httpConn.close(); - listener.close(); - client.close(); - }, -); - // https://github.com/denoland/deno/issues/11595 Deno.test( { permissions: { net: true } }, @@ -1224,25 +1185,26 @@ Deno.test( const decoder = new TextDecoder(); Deno.test({ - name: "http server compresses body - check headers", + name: "http server compresses body", permissions: { net: true, run: true }, async fn() { const hostname = "localhost"; const port = 4501; - const listener = Deno.listen({ hostname, port }); - - const data = { hello: "deno", now: "with", compressed: "body" }; async function server() { + const listener = Deno.listen({ hostname, port }); const tcpConn = await listener.accept(); const httpConn = Deno.serveHttp(tcpConn); const e = await httpConn.nextRequest(); assert(e); const { request, respondWith } = e; assertEquals(request.headers.get("Accept-Encoding"), "gzip, deflate, br"); - const response = new Response(JSON.stringify(data), { - headers: { "content-type": "application/json" }, - }); + const response = new Response( + JSON.stringify({ hello: "deno", now: "with", compressed: "body" }), + { + headers: { "content-type": "application/json" }, + }, + ); await respondWith(response); httpConn.close(); listener.close(); @@ -1274,60 +1236,6 @@ Deno.test({ }); Deno.test({ - name: "http server compresses body - check body", - permissions: { net: true, run: true }, - async fn() { - const hostname = "localhost"; - const port = 4501; - const listener = Deno.listen({ hostname, port }); - - const data = { hello: "deno", now: "with", compressed: "body" }; - - async function server() { - const tcpConn = await listener.accept(); - const httpConn = Deno.serveHttp(tcpConn); - const e = await httpConn.nextRequest(); - assert(e); - const { request, respondWith } = e; - assertEquals(request.headers.get("Accept-Encoding"), "gzip, deflate, br"); - const response = new Response(JSON.stringify(data), { - headers: { "content-type": "application/json" }, - }); - await respondWith(response); - httpConn.close(); - listener.close(); - } - - async function client() { - const url = `http://${hostname}:${port}/`; - const cmd = [ - "curl", - "--request", - "GET", - "--url", - url, - "--header", - "Accept-Encoding: gzip, deflate, br", - ]; - const proc = Deno.run({ cmd, stdout: "piped", stderr: "null" }); - const status = await proc.status(); - assert(status.success); - const stdout = proc.stdout!.readable - .pipeThrough(new DecompressionStream("gzip")) - .pipeThrough(new TextDecoderStream()); - let body = ""; - for await (const chunk of stdout) { - body += chunk; - } - assertEquals(JSON.parse(body), data); - proc.close(); - } - - await Promise.all([server(), client()]); - }, -}); - -Deno.test({ name: "http server doesn't compress small body", permissions: { net: true, run: true }, async fn() { @@ -1706,18 +1614,15 @@ Deno.test({ }); Deno.test({ - name: "http server compresses streamed bodies - check headers", + name: "http server doesn't compress streamed bodies", permissions: { net: true, run: true }, async fn() { const hostname = "localhost"; const port = 4501; - const encoder = new TextEncoder(); - const listener = Deno.listen({ hostname, port }); - - const data = { hello: "deno", now: "with", compressed: "body" }; - async function server() { + const encoder = new TextEncoder(); + const listener = Deno.listen({ hostname, port }); const tcpConn = await listener.accept(); const httpConn = Deno.serveHttp(tcpConn); const e = await httpConn.nextRequest(); @@ -1726,13 +1631,23 @@ Deno.test({ assertEquals(request.headers.get("Accept-Encoding"), "gzip, deflate, br"); const bodyInit = new ReadableStream({ start(controller) { - controller.enqueue(encoder.encode(JSON.stringify(data))); + controller.enqueue( + encoder.encode( + JSON.stringify({ + hello: "deno", + now: "with", + compressed: "body", + }), + ), + ); controller.close(); }, }); const response = new Response( bodyInit, - { headers: { "content-type": "application/json" } }, + { + headers: { "content-type": "application/json", vary: "Accept" }, + }, ); await respondWith(response); httpConn.close(); @@ -1755,71 +1670,8 @@ Deno.test({ const status = await proc.status(); assert(status.success); const output = decoder.decode(await proc.output()); - assert(output.includes("vary: Accept-Encoding\r\n")); - assert(output.includes("content-encoding: gzip\r\n")); - proc.close(); - } - - await Promise.all([server(), client()]); - }, -}); - -Deno.test({ - name: "http server compresses streamed bodies - check body", - permissions: { net: true, run: true }, - async fn() { - const hostname = "localhost"; - const port = 4501; - - const encoder = new TextEncoder(); - const listener = Deno.listen({ hostname, port }); - - const data = { hello: "deno", now: "with", compressed: "body" }; - - async function server() { - const tcpConn = await listener.accept(); - const httpConn = Deno.serveHttp(tcpConn); - const e = await httpConn.nextRequest(); - assert(e); - const { request, respondWith } = e; - assertEquals(request.headers.get("Accept-Encoding"), "gzip, deflate, br"); - const bodyInit = new ReadableStream({ - start(controller) { - controller.enqueue(encoder.encode(JSON.stringify(data))); - controller.close(); - }, - }); - const response = new Response( - bodyInit, - { headers: { "content-type": "application/json" } }, - ); - await respondWith(response); - httpConn.close(); - listener.close(); - } - - async function client() { - const url = `http://${hostname}:${port}/`; - const cmd = [ - "curl", - "--request", - "GET", - "--url", - url, - "--header", - "Accept-Encoding: gzip, deflate, br", - ]; - const proc = Deno.run({ cmd, stdout: "piped", stderr: "null" }); - const status = await proc.status(); - assert(status.success); - const stdout = proc.stdout.readable - .pipeThrough(new DecompressionStream("gzip")) - .pipeThrough(new TextDecoderStream()); - let body = ""; - for await (const chunk of stdout) { - body += chunk; - } - assertEquals(JSON.parse(body), data); + assert(output.includes("vary: Accept\r\n")); + assert(!output.includes("content-encoding: ")); proc.close(); } @@ -1884,6 +1736,8 @@ Deno.test({ // Ensure the content-length header is updated. assert(!output.includes(`content-length: ${contentLength}\r\n`)); assert(output.includes("content-length: 72\r\n")); + console.log(output); + proc.close(); } |