diff options
| author | Andy Hayden <andyhayden1@gmail.com> | 2019-01-17 10:08:59 -0800 |
|---|---|---|
| committer | Ryan Dahl <ry@tinyclouds.org> | 2019-01-17 13:08:59 -0500 |
| commit | b2e54bad61b37f3a186dd72237c694ada77ab94f (patch) | |
| tree | bc30bea78e49fe9c854be93e0509aabc76f77392 /http/file_server_test.ts | |
| parent | 811128864c4db40409c5c5538b56466e4f4e704c (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.ts | 65 |
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(); + } +}); |
