summaryrefslogtreecommitdiff
path: root/tests/integration/serve_tests.rs
diff options
context:
space:
mode:
authorSatya Rohith <me@satyarohith.com>2024-05-17 11:08:50 +0530
committerGitHub <noreply@github.com>2024-05-17 05:38:50 +0000
commit20cb0e8863beb0d709adc2f41905ce3f1f465447 (patch)
tree4a07e3bf67905e14513d8372db84169d493dfc8f /tests/integration/serve_tests.rs
parent2b560be83f621af5cab1ff09fa0e76c826e6870a (diff)
feat(serve): support `--port 0` to use an open port (#23846)
Closes https://github.com/denoland/deno/issues/23845
Diffstat (limited to 'tests/integration/serve_tests.rs')
-rw-r--r--tests/integration/serve_tests.rs51
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/integration/serve_tests.rs b/tests/integration/serve_tests.rs
new file mode 100644
index 000000000..92b0576ed
--- /dev/null
+++ b/tests/integration/serve_tests.rs
@@ -0,0 +1,51 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+
+use std::io::Read;
+
+use deno_fetch::reqwest;
+use pretty_assertions::assert_eq;
+use regex::Regex;
+use test_util as util;
+
+#[tokio::test]
+async fn deno_serve_port_0() {
+ let mut child = util::deno_cmd()
+ .current_dir(util::testdata_path())
+ .arg("serve")
+ .arg("--port")
+ .arg("0")
+ .arg("./serve.ts")
+ .stdout_piped()
+ .spawn()
+ .unwrap();
+ let stdout = child.stdout.as_mut().unwrap();
+ let mut buffer = [0; 50];
+ let _read = stdout.read(&mut buffer).unwrap();
+ let msg = std::str::from_utf8(&buffer).unwrap();
+ let port_regex = Regex::new(r"(\d+)").unwrap();
+ let port = port_regex.find(msg).unwrap().as_str();
+
+ let cert = reqwest::Certificate::from_pem(include_bytes!(
+ "../testdata/tls/RootCA.crt"
+ ))
+ .unwrap();
+
+ let client = reqwest::Client::builder()
+ .add_root_certificate(cert)
+ .http2_prior_knowledge()
+ .build()
+ .unwrap();
+
+ let res = client
+ .get(&format!("http://127.0.0.1:{port}"))
+ .send()
+ .await
+ .unwrap();
+ assert_eq!(200, res.status());
+
+ let body = res.text().await.unwrap();
+ assert_eq!(body, "deno serve --port 0 works!");
+
+ child.kill().unwrap();
+ child.wait().unwrap();
+}