diff options
-rw-r--r-- | cli/inspector.rs | 7 | ||||
-rw-r--r-- | cli/tests/integration_tests.rs | 38 |
2 files changed, 44 insertions, 1 deletions
diff --git a/cli/inspector.rs b/cli/inspector.rs index a30e5c0d7..203551f6f 100644 --- a/cli/inspector.rs +++ b/cli/inspector.rs @@ -283,7 +283,12 @@ async fn server(address: SocketAddrV4, mut server_msg_rx: ServerMsgRx) { }); let routes = websocket.or(version).or(json_list); - let web_handler = warp::serve(routes).bind(address); + let (_, web_handler) = warp::serve(routes) + .try_bind_ephemeral(address) + .unwrap_or_else(|e| { + eprintln!("Cannot start inspector server: {}", e); + std::process::exit(1); + }); future::join(msg_handler, web_handler).await; } diff --git a/cli/tests/integration_tests.rs b/cli/tests/integration_tests.rs index 02cccf9cf..112b86038 100644 --- a/cli/tests/integration_tests.rs +++ b/cli/tests/integration_tests.rs @@ -2072,6 +2072,44 @@ async fn inspector_pause() { child.kill().unwrap(); } +#[cfg(not(target_os = "linux"))] // TODO(ry) broken on github actions. +#[tokio::test] +async fn inspector_port_collision() { + let script = deno::test_util::root_path() + .join("cli") + .join("tests") + .join("inspector1.js"); + let mut child1 = util::deno_cmd() + .arg("run") + .arg("--inspect=127.0.0.1:9231") + .arg(script.clone()) + .stderr(std::process::Stdio::piped()) + .spawn() + .unwrap(); + let ws_url_1 = extract_ws_url_from_stderr(child1.stderr.as_mut().unwrap()); + println!("ws_url {}", ws_url_1); + + let mut child2 = util::deno_cmd() + .arg("run") + .arg("--inspect=127.0.0.1:9231") + .arg(script) + .stderr(std::process::Stdio::piped()) + .spawn() + .unwrap(); + + use std::io::Read; + let mut stderr_str_2 = String::new(); + child2 + .stderr + .as_mut() + .unwrap() + .read_to_string(&mut stderr_str_2) + .unwrap(); + assert!(stderr_str_2.contains("Cannot start inspector server")); + child1.kill().unwrap(); + let _ = child2.kill(); +} + mod util { use deno::colors::strip_ansi_codes; pub use deno::test_util::*; |