Skip to content

Commit a295bde

Browse files
fix debug wait server readiness status
1 parent 7954d02 commit a295bde

2 files changed

Lines changed: 64 additions & 4 deletions

File tree

src/cortex-cli/src/debug_cmd/handlers/wait.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,8 @@ pub async fn run_wait(args: WaitArgs) -> Result<()> {
5454

5555
while start.elapsed() < timeout {
5656
match client.get(&args.server_url).send().await {
57-
Ok(response)
58-
if response.status().is_success() || response.status().is_client_error() =>
59-
{
60-
// Server is responding (even 4xx means it's up)
57+
Ok(response) if is_server_ready_status(response.status()) => {
58+
// The readiness endpoint must respond successfully.
6159
success = true;
6260
break;
6361
}
@@ -150,3 +148,7 @@ pub async fn run_wait(args: WaitArgs) -> Result<()> {
150148

151149
Ok(())
152150
}
151+
152+
fn is_server_ready_status(status: reqwest::StatusCode) -> bool {
153+
status.is_success()
154+
}

src/cortex-cli/tests/debug_wait.rs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
use std::io::{Read, Write};
2+
use std::net::TcpListener;
3+
use std::process::Command;
4+
use std::thread;
5+
6+
fn serve_once(status_line: &'static str) -> String {
7+
let listener = TcpListener::bind("127.0.0.1:0").expect("bind test server");
8+
let addr = listener.local_addr().expect("read local addr");
9+
10+
thread::spawn(move || {
11+
if let Ok((mut stream, _)) = listener.accept() {
12+
let mut request = [0; 1024];
13+
let _ = stream.read(&mut request);
14+
let body = b"test";
15+
let response = format!(
16+
"{status_line}\r\nContent-Length: {}\r\nConnection: close\r\n\r\n",
17+
body.len()
18+
);
19+
let _ = stream.write_all(response.as_bytes());
20+
let _ = stream.write_all(body);
21+
}
22+
});
23+
24+
format!("http://{addr}")
25+
}
26+
27+
#[test]
28+
fn debug_wait_server_ready_rejects_404() {
29+
let server_url = serve_once("HTTP/1.1 404 Not Found");
30+
31+
let output = Command::new(env!("CARGO_BIN_EXE_Cortex"))
32+
.args([
33+
"debug",
34+
"wait",
35+
"--server-ready",
36+
"--server-url",
37+
&server_url,
38+
"--timeout",
39+
"1",
40+
"--interval",
41+
"100",
42+
"--json",
43+
])
44+
.output()
45+
.expect("run Cortex debug wait");
46+
47+
assert!(
48+
!output.status.success(),
49+
"404 readiness response should fail; stdout={}, stderr={}",
50+
String::from_utf8_lossy(&output.stdout),
51+
String::from_utf8_lossy(&output.stderr)
52+
);
53+
assert!(
54+
String::from_utf8_lossy(&output.stdout).contains("\"success\": false"),
55+
"stdout should report failure JSON: {}",
56+
String::from_utf8_lossy(&output.stdout)
57+
);
58+
}

0 commit comments

Comments
 (0)