From a5a031cde0b8dcbc6ad71eacb08b4eaeabee2646 Mon Sep 17 00:00:00 2001 From: Ruslan Nigmatullin Date: Mon, 11 May 2026 21:33:10 +0000 Subject: [PATCH] [exec-server] add readiness endpoint --- codex-rs/exec-server/src/server/transport.rs | 7 +++++++ codex-rs/exec-server/tests/health.rs | 21 ++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 codex-rs/exec-server/tests/health.rs diff --git a/codex-rs/exec-server/src/server/transport.rs b/codex-rs/exec-server/src/server/transport.rs index 142fd6266d..92b2c77aaa 100644 --- a/codex-rs/exec-server/src/server/transport.rs +++ b/codex-rs/exec-server/src/server/transport.rs @@ -2,8 +2,10 @@ use axum::Router; use axum::extract::ConnectInfo; use axum::extract::State; use axum::extract::ws::WebSocketUpgrade; +use axum::http::StatusCode; use axum::response::IntoResponse; use axum::routing::any; +use axum::routing::get; use std::io::Write as _; use std::net::SocketAddr; use tokio::io; @@ -120,6 +122,7 @@ async fn run_websocket_listener( let router = Router::new() .route("/", any(websocket_upgrade_handler)) + .route("/readyz", get(readiness_handler)) .with_state(ExecServerWebSocketState { processor }); axum::serve( listener, @@ -134,6 +137,10 @@ struct ExecServerWebSocketState { processor: ConnectionProcessor, } +async fn readiness_handler() -> StatusCode { + StatusCode::OK +} + async fn websocket_upgrade_handler( websocket: WebSocketUpgrade, ConnectInfo(peer_addr): ConnectInfo, diff --git a/codex-rs/exec-server/tests/health.rs b/codex-rs/exec-server/tests/health.rs new file mode 100644 index 0000000000..91b3806a22 --- /dev/null +++ b/codex-rs/exec-server/tests/health.rs @@ -0,0 +1,21 @@ +#![cfg(unix)] + +mod common; + +use common::exec_server::exec_server; +use pretty_assertions::assert_eq; + +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +async fn exec_server_serves_readyz_alongside_websocket_endpoint() -> anyhow::Result<()> { + let mut server = exec_server().await?; + let http_base_url = server + .websocket_url() + .strip_prefix("ws://") + .expect("websocket URL should use ws://"); + + let response = reqwest::get(format!("http://{http_base_url}/readyz")).await?; + assert_eq!(response.status(), reqwest::StatusCode::OK); + + server.shutdown().await?; + Ok(()) +}