diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2019-10-09 17:18:08 -0400 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2019-10-09 17:18:08 -0400 |
commit | 28293acd9c12a94f5d769706291032e844c7b92b (patch) | |
tree | 1fec6a3cd8d7c9e8bc9b1486f5c8438eb906a595 /std/http/file_server_test.ts | |
parent | 5c6835efd82c298df99ce71c4a36ca23515333a3 (diff) | |
parent | 151ce0266eb4de2c8fc600c81c192a5f791b6169 (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.ts | 88 |
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(); + } +}); |