diff options
author | Kevin (Kun) "Kassimo" Qian <kevinkassimo@gmail.com> | 2020-03-28 14:42:29 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-28 17:42:29 -0400 |
commit | 2f7842246ecce1d69e13144931fd3b6417f4fdb0 (patch) | |
tree | 6a6b10dc0e1acbfe03c1bc1cdecb62178cfa192c | |
parent | ad198b1cf175a1b88a6f698510bb0122e569f3ac (diff) |
fix(inspector): proper error message on port collision (#4514)
-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::*; |