summaryrefslogtreecommitdiff
path: root/std/http/file_server_test.ts
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2019-10-10 05:31:23 -0400
committerGitHub <noreply@github.com>2019-10-10 05:31:23 -0400
commite7562eed8c816cd0d97aab6b818d7c8453dbaa2b (patch)
treec5a9f536e79d2c8d2d02897511a9138acaf35394 /std/http/file_server_test.ts
parent3882c9d19a641e0c919f1350d87c6d7ee280cf78 (diff)
parent93f7f00c956c14620ef031626f124b57397ca867 (diff)
Merge deno_std in main repo (#3091)
The history of deno_std is persevered but rewritten to update links to issues and PRs Fixes denoland/deno_std#603
Diffstat (limited to 'std/http/file_server_test.ts')
m---------std0
-rw-r--r--std/http/file_server_test.ts88
2 files changed, 88 insertions, 0 deletions
diff --git a/std b/std
deleted file mode 160000
-Subproject 43aafbf33285753e7b42230f0eb7969b300f71c
diff --git a/std/http/file_server_test.ts b/std/http/file_server_test.ts
new file mode 100644
index 000000000..958c66529
--- /dev/null
+++ b/std/http/file_server_test.ts
@@ -0,0 +1,88 @@
+// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
+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 = Deno.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();
+}
+
+/* TODO(ry) re-enable tests
+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 Deno.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();
+ }
+});