summaryrefslogtreecommitdiff
path: root/cli/tests/unit/http_test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tests/unit/http_test.ts')
-rw-r--r--cli/tests/unit/http_test.ts200
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();
}