summaryrefslogtreecommitdiff
path: root/std/http/file_server_test.ts
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2019-10-09 17:18:08 -0400
committerRyan Dahl <ry@tinyclouds.org>2019-10-09 17:18:08 -0400
commit28293acd9c12a94f5d769706291032e844c7b92b (patch)
tree1fec6a3cd8d7c9e8bc9b1486f5c8438eb906a595 /std/http/file_server_test.ts
parent5c6835efd82c298df99ce71c4a36ca23515333a3 (diff)
parent151ce0266eb4de2c8fc600c81c192a5f791b6169 (diff)
Merge branch 'std_modified' into merge_std3
Diffstat (limited to 'std/http/file_server_test.ts')
-rw-r--r--std/http/file_server_test.ts88
1 files changed, 88 insertions, 0 deletions
diff --git a/std/http/file_server_test.ts b/std/http/file_server_test.ts
new file mode 100644
index 000000000..b7148905b
--- /dev/null
+++ b/std/http/file_server_test.ts
@@ -0,0 +1,88 @@
+// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
+const { readFile, run } = Deno;
+
+import { test } from "../testing/mod.ts";
+import { assert, assertEquals } from "../testing/asserts.ts";
+import { BufReader } from "../io/bufio.ts";
+import { TextProtoReader } from "../textproto/mod.ts";
+
+let fileServer: Deno.Process;
+
+async function startFileServer(): Promise<void> {
+ fileServer = run({
+ args: [
+ Deno.execPath(),
+ "run",
+ "--allow-read",
+ "--allow-net",
+ "http/file_server.ts",
+ ".",
+ "--cors"
+ ],
+ stdout: "piped"
+ });
+ // Once fileServer is ready it will write to its stdout.
+ const r = new TextProtoReader(new BufReader(fileServer.stdout!));
+ const s = await r.readLine();
+ assert(s !== Deno.EOF && s.includes("server listening"));
+}
+
+function killFileServer(): void {
+ fileServer.close();
+ fileServer.stdout!.close();
+}
+
+test(async function serveFile(): Promise<void> {
+ await startFileServer();
+ try {
+ const res = await fetch("http://localhost:4500/azure-pipelines.yml");
+ assert(res.headers.has("access-control-allow-origin"));
+ assert(res.headers.has("access-control-allow-headers"));
+ assertEquals(res.headers.get("content-type"), "text/yaml; charset=utf-8");
+ const downloadedFile = await res.text();
+ const localFile = new TextDecoder().decode(
+ await readFile("./azure-pipelines.yml")
+ );
+ assertEquals(downloadedFile, localFile);
+ } finally {
+ killFileServer();
+ }
+});
+
+test(async function serveDirectory(): Promise<void> {
+ await startFileServer();
+ try {
+ const res = await fetch("http://localhost:4500/");
+ assert(res.headers.has("access-control-allow-origin"));
+ assert(res.headers.has("access-control-allow-headers"));
+ const page = await res.text();
+ assert(page.includes("azure-pipelines.yml"));
+
+ // `Deno.FileInfo` is not completely compatible with Windows yet
+ // TODO: `mode` should work correctly in the future.
+ // Correct this test case accordingly.
+ Deno.build.os !== "win" &&
+ assert(/<td class="mode">\([a-zA-Z-]{10}\)<\/td>/.test(page));
+ Deno.build.os === "win" &&
+ assert(/<td class="mode">\(unknown mode\)<\/td>/.test(page));
+ assert(
+ page.includes(
+ `<td><a href="/azure-pipelines.yml">azure-pipelines.yml</a></td>`
+ )
+ );
+ } finally {
+ killFileServer();
+ }
+});
+
+test(async function serveFallback(): Promise<void> {
+ await startFileServer();
+ try {
+ const res = await fetch("http://localhost:4500/badfile.txt");
+ assert(res.headers.has("access-control-allow-origin"));
+ assert(res.headers.has("access-control-allow-headers"));
+ assertEquals(res.status, 404);
+ } finally {
+ killFileServer();
+ }
+});