summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/tests/integration/inspector_tests.rs26
-rw-r--r--runtime/inspector_server.rs8
2 files changed, 33 insertions, 1 deletions
diff --git a/cli/tests/integration/inspector_tests.rs b/cli/tests/integration/inspector_tests.rs
index ebbfe94d2..edc18b8d7 100644
--- a/cli/tests/integration/inspector_tests.rs
+++ b/cli/tests/integration/inspector_tests.rs
@@ -493,3 +493,29 @@ async fn inspector_json_list() {
assert!(matching_endpoint.is_some());
child.kill().unwrap();
}
+
+#[tokio::test]
+async fn inspector_connect_non_ws() {
+ // https://github.com/denoland/deno/issues/11449
+ // Verify we don't panic if non-WS connection is being established
+ let script = util::tests_path().join("inspector1.js");
+ let mut child = util::deno_cmd()
+ .arg("run")
+ .arg(inspect_flag_with_unique_port("--inspect"))
+ .arg(script)
+ .stderr(std::process::Stdio::piped())
+ .spawn()
+ .unwrap();
+
+ let stderr = child.stderr.as_mut().unwrap();
+ let mut stderr_lines =
+ std::io::BufReader::new(stderr).lines().map(|r| r.unwrap());
+ let mut ws_url = extract_ws_url_from_stderr(&mut stderr_lines);
+ // Change scheme to URL and try send a request. We're not interested
+ // in the request result, just that the process doesn't panic.
+ ws_url.set_scheme("http").unwrap();
+ let resp = reqwest::get(ws_url).await.unwrap();
+ assert_eq!("400 Bad Request", resp.status().to_string());
+ child.kill().unwrap();
+ child.wait().unwrap();
+}
diff --git a/runtime/inspector_server.rs b/runtime/inspector_server.rs
index 793cd2866..9f631ed2f 100644
--- a/runtime/inspector_server.rs
+++ b/runtime/inspector_server.rs
@@ -133,7 +133,13 @@ fn handle_ws_request(
if resp.is_ok() {
tokio::task::spawn_local(async move {
- let upgraded = hyper::upgrade::on(req).await.unwrap();
+ let upgrade_result = hyper::upgrade::on(req).await;
+ let upgraded = if let Ok(u) = upgrade_result {
+ u
+ } else {
+ eprintln!("Inspector server failed to upgrade to WS connection");
+ return;
+ };
let websocket =
deno_websocket::tokio_tungstenite::WebSocketStream::from_raw_socket(
upgraded,