diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cb3a9e440ffcdd..f5fc1aa81ed4ef 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -224,6 +224,16 @@ jobs: echo $(git rev-parse HEAD) > canary-latest.txt gsutil cp canary-latest.txt gs://dl.deno.land/canary-latest.txt + - name: Configure hosts file for WPT (unix) + if: runner.os != 'Windows' + run: ./wpt make-hosts-file | sudo tee -a /etc/hosts + working-directory: test_util/wpt/ + + - name: Configure hosts file for WPT (windows) + if: runner.os == 'Windows' + working-directory: test_util/wpt/ + run: python wpt make-hosts-file | Out-File $env:SystemRoot\System32\drivers\etc\hosts -Encoding ascii -Append + - name: Test release if: matrix.kind == 'test_release' run: cargo test --release --locked --all-targets diff --git a/cli/tests/integration_tests.rs b/cli/tests/integration_tests.rs index 80a7222e53e815..403458a14db388 100644 --- a/cli/tests/integration_tests.rs +++ b/cli/tests/integration_tests.rs @@ -5,6 +5,7 @@ use deno_core::serde_json; use deno_core::url; use deno_runtime::deno_fetch::reqwest; use deno_runtime::deno_websocket::tokio_tungstenite; +use std::io::BufReader; use std::io::{BufRead, Write}; use std::path::Path; use std::path::PathBuf; @@ -5236,6 +5237,32 @@ fn jsonc_to_serde(j: jsonc_parser::JsonValue) -> serde_json::Value { } } +struct WPTServer(std::process::Child); + +impl Drop for WPTServer { + fn drop(&mut self) { + match self.0.try_wait() { + Ok(None) => { + #[cfg(target_os = "linux")] + { + println!("libc kill"); + unsafe { + libc::kill(self.0.id() as i32, libc::SIGTERM); + } + } + #[cfg(not(target_os = "linux"))] + { + println!("std kill"); + self.0.kill().expect("killing 'wpt serve' failed"); + } + let _ = self.0.wait(); + } + Ok(Some(status)) => panic!("'wpt serve' exited unexpectedly {}", status), + Err(e) => panic!("'wpt serve' error: {}", e), + } + } +} + #[test] fn web_platform_tests() { use deno_core::serde::Deserialize; @@ -5257,6 +5284,61 @@ fn web_platform_tests() { let config: std::collections::HashMap> = deno_core::serde_json::from_value(jsonc_to_serde(jsonc)).unwrap(); + // Observation: `python3 wpt serve` hangs with the python3 from homebrew + // but works okay with /usr/bin/python, which is python 2.7.10. Observed + // with homebrew python 3.8.5, 3.8.7 and 3.9.1. + let python = match true { + _ if cfg!(target_os = "windows") => "python.exe", + _ if cfg!(target_os = "macos") => "python", + _ => "python3", + }; + + eprintln!("If the wpt server fails or gets stuck, please set up your /etc/hosts file like specified in //docs/contributing/building_from_source.md."); + + let mut proc = Command::new(python) + .current_dir(util::wpt_path()) + .arg("wpt.py") + .arg("serve") + .stderr(std::process::Stdio::piped()) + .spawn() + .unwrap(); + + let stderr = proc.stderr.as_mut().unwrap(); + let mut stderr = BufReader::new(stderr).lines(); + let mut ready_8000 = false; + let mut ready_8443 = false; + let mut ready_8444 = false; + let mut ready_9000 = false; + while let Ok(line) = stderr.next().unwrap() { + if !line.starts_with("DEBUG:") { + eprintln!("{}", line); + } + if cfg!(target_os = "windows") && line.contains("Using ports") { + break; + } + if line.contains("web-platform.test:8000") { + ready_8000 = true; + } + if line.contains("web-platform.test:8443") { + ready_8443 = true; + } + if line.contains("web-platform.test:8444") { + ready_8444 = true; + } + if line.contains("web-platform.test:9000") { + ready_9000 = true; + } + // WPT + python2 doesn't support HTTP/2.0. + if line.contains("Cannot start HTTP/2.0 server") { + ready_9000 = true; + } + if ready_8000 && ready_8443 && ready_8444 && ready_9000 { + break; + } + } + + let _wpt_server = WPTServer(proc); + for (suite_name, includes) in config.into_iter() { let suite_path = util::wpt_path().join(suite_name); let dir = WalkDir::new(&suite_path) @@ -5337,14 +5419,15 @@ fn web_platform_tests() { }) .collect(); - let mut variants: Vec<&str> = test_file_text + let mut variants: Vec = test_file_text .split('\n') .into_iter() .filter_map(|t| t.strip_prefix("// META: variant=")) + .map(|t| format!("?{}", t)) .collect(); if variants.is_empty() { - variants.push(""); + variants.push("".to_string()); } for variant in variants { @@ -5367,11 +5450,19 @@ fn web_platform_tests() { let bundle = concat_bundle(files, file.path(), "".to_string()); file.write_all(bundle.as_bytes()).unwrap(); + let self_path = test_file_path.strip_prefix(util::wpt_path()).unwrap(); + let child = util::deno_cmd() .current_dir(test_file_path.parent().unwrap()) .arg("run") .arg("--location") - .arg(&format!("http://web-platform-tests/?{}", variant)) + .arg(&format!( + "http://web-platform.test:8000/{}{}", + self_path.to_str().unwrap(), + variant + )) + .arg("--cert") + .arg(util::wpt_path().join("tools/certs/cacert.pem")) .arg("-A") .arg(file.path()) .arg(deno_core::serde_json::to_string(&expect_fail).unwrap()) diff --git a/cli/tests/unit/net_test.ts b/cli/tests/unit/net_test.ts index 99af959cc3cefd..f69745ea5d6705 100644 --- a/cli/tests/unit/net_test.ts +++ b/cli/tests/unit/net_test.ts @@ -424,7 +424,7 @@ unitTest( unitTest( { perms: { net: true } }, async function netTcpListenCloseWhileIterating(): Promise { - const listener = Deno.listen({ port: 8000 }); + const listener = Deno.listen({ port: 8001 }); const nextWhileClosing = listener[Symbol.asyncIterator]().next(); listener.close(); assertEquals(await nextWhileClosing, { value: undefined, done: true }); @@ -437,7 +437,7 @@ unitTest( unitTest( { perms: { net: true } }, async function netUdpListenCloseWhileIterating(): Promise { - const socket = Deno.listenDatagram({ port: 8000, transport: "udp" }); + const socket = Deno.listenDatagram({ port: 8001, transport: "udp" }); const nextWhileClosing = socket[Symbol.asyncIterator]().next(); socket.close(); assertEquals(await nextWhileClosing, { value: undefined, done: true }); diff --git a/cli/tests/wpt.jsonc b/cli/tests/wpt.jsonc index 8774ca793be584..f19f23d115e640 100644 --- a/cli/tests/wpt.jsonc +++ b/cli/tests/wpt.jsonc @@ -245,7 +245,7 @@ "console-namespace-object-class-string", "console-tests-historical" ], - "WebCryptoApi": ["getRandomValues"] + "WebCryptoApi": ["getRandomValues"], "WebIDL": [ "ecmascript-binding/es-exceptions/DOMException-constants", "ecmascript-binding/es-exceptions/DOMException-constructor-and-prototype", @@ -261,5 +261,411 @@ "does not inherit from Error: class-side" ] } + ], + "url": [ + "historical", + { + "name": "url-constructor", + "expectFail": [ + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <:#> against ", + "Parsing: <#> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: < File:c|////foo\\bar.html> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <\u0000\u001b\u0004\u0012 http://example.com/\u001f \r > against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <#> against ", + "Parsing: <#> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <../i> against ", + "Parsing: <../i> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <\\/localhost//pig> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <\\\\\\.\\Y:> against ", + "Parsing: <\\\\\\.\\y:> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <#x> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: <..//path> against ", + "Parsing: against ", + "Parsing: <> against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against ", + "Parsing: against " + ] + }, + { + "name": "url-origin", + "expectFail": [ + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: <\u0000\u001b\u0004\u0012 http://example.com/\u001f \r > against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: <../i> against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: <#i> against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: <#x> against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against ", + "Origin parsing: against " + ] + }, + { + "name": "url-searchparams", + "expectFail": [ + "URL.searchParams updating, clearing", + "URL.searchParams and URL.search setters, update propagation" + ] + }, + { + "name": "url-setters-stripping", + "expectFail": [ + "Setting protocol with leading U+0000 (https:)", + "Setting protocol with U+0000 before inserted colon (https:)", + "Setting host with leading U+0000 (https:)", + "Setting host with middle U+0000 (https:)", + "Setting host with trailing U+0000 (https:)", + "Setting port with middle U+0000 (https:)", + "Setting port with trailing U+0000 (https:)", + "Setting protocol with leading U+0009 (https:)", + "Setting protocol with U+0009 before inserted colon (https:)", + "Setting host with leading U+0009 (https:)", + "Setting hostname with leading U+0009 (https:)", + "Setting host with middle U+0009 (https:)", + "Setting hostname with middle U+0009 (https:)", + "Setting host with trailing U+0009 (https:)", + "Setting hostname with trailing U+0009 (https:)", + "Setting port with leading U+0009 (https:)", + "Setting port with middle U+0009 (https:)", + "Setting port with trailing U+0009 (https:)", + "Setting pathname with leading U+0009 (https:)", + "Setting pathname with middle U+0009 (https:)", + "Setting pathname with trailing U+0009 (https:)", + "Setting search with leading U+0009 (https:)", + "Setting search with middle U+0009 (https:)", + "Setting search with trailing U+0009 (https:)", + "Setting hash with leading U+0009 (https:)", + "Setting hash with middle U+0009 (https:)", + "Setting hash with trailing U+0009 (https:)", + "Setting protocol with leading U+000A (https:)", + "Setting protocol with U+000A before inserted colon (https:)", + "Setting host with leading U+000A (https:)", + "Setting hostname with leading U+000A (https:)", + "Setting host with middle U+000A (https:)", + "Setting hostname with middle U+000A (https:)", + "Setting host with trailing U+000A (https:)", + "Setting hostname with trailing U+000A (https:)", + "Setting port with leading U+000A (https:)", + "Setting port with middle U+000A (https:)", + "Setting port with trailing U+000A (https:)", + "Setting pathname with leading U+000A (https:)", + "Setting pathname with middle U+000A (https:)", + "Setting pathname with trailing U+000A (https:)", + "Setting search with leading U+000A (https:)", + "Setting search with middle U+000A (https:)", + "Setting search with trailing U+000A (https:)", + "Setting hash with leading U+000A (https:)", + "Setting hash with middle U+000A (https:)", + "Setting hash with trailing U+000A (https:)", + "Setting protocol with leading U+000D (https:)", + "Setting protocol with U+000D before inserted colon (https:)", + "Setting host with leading U+000D (https:)", + "Setting hostname with leading U+000D (https:)", + "Setting host with middle U+000D (https:)", + "Setting hostname with middle U+000D (https:)", + "Setting host with trailing U+000D (https:)", + "Setting hostname with trailing U+000D (https:)", + "Setting port with leading U+000D (https:)", + "Setting port with middle U+000D (https:)", + "Setting port with trailing U+000D (https:)", + "Setting pathname with leading U+000D (https:)", + "Setting pathname with middle U+000D (https:)", + "Setting pathname with trailing U+000D (https:)", + "Setting search with leading U+000D (https:)", + "Setting search with middle U+000D (https:)", + "Setting search with trailing U+000D (https:)", + "Setting hash with leading U+000D (https:)", + "Setting hash with middle U+000D (https:)", + "Setting hash with trailing U+000D (https:)", + "Setting protocol with leading U+001F (https:)", + "Setting protocol with U+001F before inserted colon (https:)", + "Setting host with leading U+001F (https:)", + "Setting host with middle U+001F (https:)", + "Setting host with trailing U+001F (https:)", + "Setting port with middle U+001F (https:)", + "Setting port with trailing U+001F (https:)", + "Setting protocol with leading U+0000 (wpt++:)", + "Setting protocol with U+0000 before inserted colon (wpt++:)", + "Setting host with leading U+0000 (wpt++:)", + "Setting host with middle U+0000 (wpt++:)", + "Setting host with trailing U+0000 (wpt++:)", + "Setting port with middle U+0000 (wpt++:)", + "Setting port with trailing U+0000 (wpt++:)", + "Setting pathname with leading U+0000 (wpt++:)", + "Setting pathname with middle U+0000 (wpt++:)", + "Setting pathname with trailing U+0000 (wpt++:)", + "Setting protocol with leading U+0009 (wpt++:)", + "Setting protocol with U+0009 before inserted colon (wpt++:)", + "Setting host with leading U+0009 (wpt++:)", + "Setting hostname with leading U+0009 (wpt++:)", + "Setting host with middle U+0009 (wpt++:)", + "Setting hostname with middle U+0009 (wpt++:)", + "Setting host with trailing U+0009 (wpt++:)", + "Setting hostname with trailing U+0009 (wpt++:)", + "Setting port with leading U+0009 (wpt++:)", + "Setting port with middle U+0009 (wpt++:)", + "Setting port with trailing U+0009 (wpt++:)", + "Setting pathname with leading U+0009 (wpt++:)", + "Setting pathname with middle U+0009 (wpt++:)", + "Setting pathname with trailing U+0009 (wpt++:)", + "Setting search with leading U+0009 (wpt++:)", + "Setting search with middle U+0009 (wpt++:)", + "Setting search with trailing U+0009 (wpt++:)", + "Setting hash with leading U+0009 (wpt++:)", + "Setting hash with middle U+0009 (wpt++:)", + "Setting hash with trailing U+0009 (wpt++:)", + "Setting protocol with leading U+000A (wpt++:)", + "Setting protocol with U+000A before inserted colon (wpt++:)", + "Setting host with leading U+000A (wpt++:)", + "Setting hostname with leading U+000A (wpt++:)", + "Setting host with middle U+000A (wpt++:)", + "Setting hostname with middle U+000A (wpt++:)", + "Setting host with trailing U+000A (wpt++:)", + "Setting hostname with trailing U+000A (wpt++:)", + "Setting port with leading U+000A (wpt++:)", + "Setting port with middle U+000A (wpt++:)", + "Setting port with trailing U+000A (wpt++:)", + "Setting pathname with leading U+000A (wpt++:)", + "Setting pathname with middle U+000A (wpt++:)", + "Setting pathname with trailing U+000A (wpt++:)", + "Setting search with leading U+000A (wpt++:)", + "Setting search with middle U+000A (wpt++:)", + "Setting search with trailing U+000A (wpt++:)", + "Setting hash with leading U+000A (wpt++:)", + "Setting hash with middle U+000A (wpt++:)", + "Setting hash with trailing U+000A (wpt++:)", + "Setting protocol with leading U+000D (wpt++:)", + "Setting protocol with U+000D before inserted colon (wpt++:)", + "Setting host with leading U+000D (wpt++:)", + "Setting hostname with leading U+000D (wpt++:)", + "Setting host with middle U+000D (wpt++:)", + "Setting hostname with middle U+000D (wpt++:)", + "Setting host with trailing U+000D (wpt++:)", + "Setting hostname with trailing U+000D (wpt++:)", + "Setting port with leading U+000D (wpt++:)", + "Setting port with middle U+000D (wpt++:)", + "Setting port with trailing U+000D (wpt++:)", + "Setting pathname with leading U+000D (wpt++:)", + "Setting pathname with middle U+000D (wpt++:)", + "Setting pathname with trailing U+000D (wpt++:)", + "Setting search with leading U+000D (wpt++:)", + "Setting search with middle U+000D (wpt++:)", + "Setting search with trailing U+000D (wpt++:)", + "Setting hash with leading U+000D (wpt++:)", + "Setting hash with middle U+000D (wpt++:)", + "Setting hash with trailing U+000D (wpt++:)", + "Setting protocol with leading U+001F (wpt++:)", + "Setting protocol with U+001F before inserted colon (wpt++:)", + "Setting host with leading U+001F (wpt++:)", + "Setting host with middle U+001F (wpt++:)", + "Setting host with trailing U+001F (wpt++:)", + "Setting port with middle U+001F (wpt++:)", + "Setting port with trailing U+001F (wpt++:)", + "Setting pathname with leading U+001F (wpt++:)", + "Setting pathname with middle U+001F (wpt++:)", + "Setting pathname with trailing U+001F (wpt++:)" + ] + }, + "url-tojson", + { + "name": "urlencoded-parser", + "expectFail": [ + "URLSearchParams constructed with: %EF%BB%BFtest=%EF%BB%BF", + "request.formData() with input: test=", + "response.formData() with input: test=", + "request.formData() with input: %FE%FF", + "response.formData() with input: %FE%FF", + "request.formData() with input: %FF%FE", + "response.formData() with input: %FF%FE", + "request.formData() with input: %C2", + "response.formData() with input: %C2", + "request.formData() with input: %C2x", + "response.formData() with input: %C2x", + "request.formData() with input: _charset_=windows-1252&test=%C2x", + "response.formData() with input: _charset_=windows-1252&test=%C2x", + "request.formData() with input: %=a", + "response.formData() with input: %=a", + "request.formData() with input: %a=a", + "response.formData() with input: %a=a", + "request.formData() with input: %a_=a", + "response.formData() with input: %a_=a", + "request.formData() with input: id=0&value=%", + "response.formData() with input: id=0&value=%", + "request.formData() with input: b=%2sf%2a", + "response.formData() with input: b=%2sf%2a", + "request.formData() with input: b=%2%2af%2a", + "response.formData() with input: b=%2%2af%2a", + "request.formData() with input: b=%%2a", + "response.formData() with input: b=%%2a" + ] + }, + "urlsearchparams-append", + { + "name": "urlsearchparams-constructor", + "expectFail": [ + "URLSearchParams constructor, empty string as argument", + "Construct with 2 unpaired surrogates (no trailing)", + "Construct with 3 unpaired surrogates (no leading)", + "Construct with object with NULL, non-ASCII, and surrogate keys" + ] + }, + "urlsearchparams-delete", + { + "name": "urlsearchparams-foreach", + "expectFail": [ + "For-of Check", + "delete next param during iteration", + "delete current param during iteration", + "delete every param seen during iteration" + ] + }, + "urlsearchparams-get", + "urlsearchparams-getall", + "urlsearchparams-has", + "urlsearchparams-set", + "urlsearchparams-sort", + "urlsearchparams-stringifier" ] } diff --git a/cli/tests/wpt_testharnessconsolereporter.js b/cli/tests/wpt_testharnessconsolereporter.js index 2e0e06c020225e..24979ce52bef24 100644 --- a/cli/tests/wpt_testharnessconsolereporter.js +++ b/cli/tests/wpt_testharnessconsolereporter.js @@ -111,13 +111,13 @@ window.add_completion_callback((tests, harnessStatus) => { console.log(`\nfailures:\n`); } for (const result of failed) { - console.log(` ${result.name}`); + console.log(` ${JSON.stringify(result.name)}`); } if (expectedFailedButPassedCount > 0) { console.log(`\nexpected failures that passed:\n`); } for (const result of expectedFailedButPassed) { - console.log(` ${result.name}`); + console.log(` ${JSON.stringify(result.name)}`); } console.log( `\ntest result: ${ diff --git a/docs/contributing/building_from_source.md b/docs/contributing/building_from_source.md index 227b424188650e..7801d1b1504e10 100644 --- a/docs/contributing/building_from_source.md +++ b/docs/contributing/building_from_source.md @@ -109,3 +109,38 @@ cargo clean && cargo build -vv # Run: ./target/debug/deno run cli/tests/002_hello.ts ``` + +### Testing + +> :warning: **IMPORTANT**: Our test suite relies on certain entries to be +> configured in your /etc/hosts file. If these entries are not present in your +> /etc/hosts file, the `web_platform_tests` test **will** fail. To configure +> these entries, run the following command: + +> ```shell +> # macOS / Linux +> cd test_utils/wpt/ +> ./wpt make-hosts-file | sudo tee -a /etc/hosts +> ``` + +> ```powershell +> # Windows (use powershell!) +> cd test_utils/wpt/ +> python wpt make-hosts-file | Out-File $env:SystemRoot\System32\drivers\etc\hosts -Encoding ascii -Append +> ``` + +> If you use WSL, be aware that WSL may attempt to override /etc/hosts each time +> it is launched, which would then require you to re-run hosts this setup. This +> behavior +> [can be configured](https://docs.microsoft.com/en-us/windows/wsl/wsl-config#network). + +```shell +# Run the full test suite: +cargo test + +# Run a specific test: +cargo test web_platform_tests + +# Run a specific test, and don't swallow test output: +cargo test web_platform_tests -- --nocapture +``` diff --git a/std/http/file_server_test.ts b/std/http/file_server_test.ts index 638121b45ae9d2..94d97cc374480e 100644 --- a/std/http/file_server_test.ts +++ b/std/http/file_server_test.ts @@ -335,7 +335,7 @@ Deno.test("contentType", async () => { Deno.test("file_server running as library", async function (): Promise { await startFileServerAsLibrary(); try { - const res = await fetch("http://localhost:8000"); + const res = await fetch("http://localhost:4504"); assertEquals(res.status, 200); const _ = await res.text(); } finally { diff --git a/std/http/testdata/file_server_as_library.ts b/std/http/testdata/file_server_as_library.ts index cd4bf68dbf0264..87ff31584eddbc 100644 --- a/std/http/testdata/file_server_as_library.ts +++ b/std/http/testdata/file_server_as_library.ts @@ -1,7 +1,7 @@ import { serve } from "../server.ts"; import { serveFile } from "../file_server.ts"; -const server = serve({ port: 8000 }); +const server = serve({ port: 4504 }); console.log("Server running...");