summaryrefslogtreecommitdiff
path: root/std/http/racing_server_test.ts
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2019-10-09 17:10:09 -0400
committerRyan Dahl <ry@tinyclouds.org>2019-10-09 17:10:09 -0400
commit151ce0266eb4de2c8fc600c81c192a5f791b6169 (patch)
tree7cb04016a1c7ee88adde83814548d7a9409dcde3 /std/http/racing_server_test.ts
parenta355f7c807686918734416d91b79c26c21effba9 (diff)
Move everything into std subdir
Diffstat (limited to 'std/http/racing_server_test.ts')
-rw-r--r--std/http/racing_server_test.ts65
1 files changed, 65 insertions, 0 deletions
diff --git a/std/http/racing_server_test.ts b/std/http/racing_server_test.ts
new file mode 100644
index 000000000..b66986247
--- /dev/null
+++ b/std/http/racing_server_test.ts
@@ -0,0 +1,65 @@
+const { dial, run } = Deno;
+
+import { test, runIfMain } from "../testing/mod.ts";
+import { assert, assertEquals } from "../testing/asserts.ts";
+import { BufReader } from "../io/bufio.ts";
+import { TextProtoReader } from "../textproto/mod.ts";
+
+let server: Deno.Process;
+async function startServer(): Promise<void> {
+ server = run({
+ args: [Deno.execPath(), "run", "-A", "http/racing_server.ts"],
+ stdout: "piped"
+ });
+ // Once racing server is ready it will write to its stdout.
+ const r = new TextProtoReader(new BufReader(server.stdout!));
+ const s = await r.readLine();
+ assert(s !== Deno.EOF && s.includes("Racing server listening..."));
+}
+function killServer(): void {
+ server.close();
+ server.stdout!.close();
+}
+
+const input = `GET / HTTP/1.1
+
+GET / HTTP/1.1
+
+GET / HTTP/1.1
+
+GET / HTTP/1.1
+
+`;
+const HUGE_BODY_SIZE = 1024 * 1024;
+const output = `HTTP/1.1 200 OK
+content-length: 8
+
+Hello 1
+HTTP/1.1 200 OK
+content-length: ${HUGE_BODY_SIZE}
+
+${"a".repeat(HUGE_BODY_SIZE)}HTTP/1.1 200 OK
+content-length: ${HUGE_BODY_SIZE}
+
+${"b".repeat(HUGE_BODY_SIZE)}HTTP/1.1 200 OK
+content-length: 8
+
+World 4
+`;
+
+test(async function serverPipelineRace(): Promise<void> {
+ await startServer();
+
+ const conn = await dial({ port: 4501 });
+ const r = new TextProtoReader(new BufReader(conn));
+ await conn.write(new TextEncoder().encode(input));
+ const outLines = output.split("\n");
+ // length - 1 to disregard last empty line
+ for (let i = 0; i < outLines.length - 1; i++) {
+ const s = await r.readLine();
+ assertEquals(s, outLines[i]);
+ }
+ killServer();
+});
+
+runIfMain(import.meta);