summaryrefslogtreecommitdiff
path: root/http/file_server_test.ts
diff options
context:
space:
mode:
authorAndy Hayden <andyhayden1@gmail.com>2019-01-17 10:08:59 -0800
committerRyan Dahl <ry@tinyclouds.org>2019-01-17 13:08:59 -0500
commitb2e54bad61b37f3a186dd72237c694ada77ab94f (patch)
treebc30bea78e49fe9c854be93e0509aabc76f77392 /http/file_server_test.ts
parent811128864c4db40409c5c5538b56466e4f4e704c (diff)
Remove race-condition in file_server tests (denoland/deno_std#125)
Original: https://github.com/denoland/deno_std/commit/e28c9a407951f10d952993ff6a7b248ca11243e1
Diffstat (limited to 'http/file_server_test.ts')
-rw-r--r--http/file_server_test.ts65
1 files changed, 39 insertions, 26 deletions
diff --git a/http/file_server_test.ts b/http/file_server_test.ts
index bd00d749b..f8b2429b0 100644
--- a/http/file_server_test.ts
+++ b/http/file_server_test.ts
@@ -1,23 +1,29 @@
-import { readFile } from "deno";
+import { readFile, run } from "deno";
import { test, assert, assertEqual } from "../testing/mod.ts";
+import { BufReader } from "../io/bufio.ts";
+import { TextProtoReader } from "../textproto/mod.ts";
-// Promise to completeResolve when all tests completes
-let completeResolve;
-export const completePromise = new Promise(res => (completeResolve = res));
-let completedTestCount = 0;
-
-function maybeCompleteTests() {
- completedTestCount++;
- // Change this when adding more tests
- if (completedTestCount === 3) {
- completeResolve();
- }
+let fileServer;
+async function startFileServer() {
+ fileServer = run({
+ args: ["deno", "--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, err] = await r.readLine();
+ assert(err == null);
+ assert(s.includes("server listening"));
+}
+function killFileServer() {
+ fileServer.close();
+ fileServer.stdout.close();
}
-export function runTests(serverReadyPromise: Promise<any>) {
- test(async function serveFile() {
- await serverReadyPromise;
+test(async function serveFile() {
+ 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"));
@@ -27,25 +33,32 @@ export function runTests(serverReadyPromise: Promise<any>) {
await readFile("./azure-pipelines.yml")
);
assertEqual(downloadedFile, localFile);
- maybeCompleteTests();
- });
+ } finally {
+ killFileServer();
+ }
+});
- test(async function serveDirectory() {
- await serverReadyPromise;
+test(async function serveDirectory() {
+ 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"));
- maybeCompleteTests();
- });
+ } finally {
+ killFileServer();
+ }
+});
- test(async function serveFallback() {
- await serverReadyPromise;
+test(async function serveFallback() {
+ 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"));
assertEqual(res.status, 404);
- maybeCompleteTests();
- });
-}
+ } finally {
+ killFileServer();
+ }
+});