mirror of
https://github.com/openai/codex.git
synced 2026-09-13 11:47:17 +00:00
## What changed - Accept only `http://` and `https://` gRPC endpoints for app server `--code-mode-host` connections. - Limit the standalone code-mode host to stdio and gRPC listeners. - Remove the WebSocket session provider, dual-WebSocket negotiation, transport lanes, and related dependencies and tests. - Keep coverage for shared and prewarmed gRPC hosts and reject WebSocket host URLs in CLI parsing tests. GitOrigin-RevId: 8792604e79ffd54ce776074a4dc3f7d55e63752a
86 lines
2.4 KiB
Rust
86 lines
2.4 KiB
Rust
use super::AppServerArgs;
|
|
use clap::Parser;
|
|
use codex_app_server::AppServerTransport;
|
|
use pretty_assertions::assert_eq;
|
|
use toml::Value as TomlValue;
|
|
use url::Url;
|
|
|
|
#[test]
|
|
fn app_server_accepts_cli_config_overrides() {
|
|
let args = AppServerArgs::try_parse_from([
|
|
"codex-app-server",
|
|
"-c",
|
|
"model=\"gpt-5-codex\"",
|
|
"--config",
|
|
"sandbox_mode=\"read-only\"",
|
|
"--listen",
|
|
"off",
|
|
])
|
|
.expect("parse app-server args");
|
|
|
|
let parsed_overrides = args
|
|
.config_overrides
|
|
.parse_overrides()
|
|
.expect("parse config overrides");
|
|
|
|
assert_eq!(
|
|
parsed_overrides,
|
|
vec![
|
|
(
|
|
"model".to_string(),
|
|
TomlValue::String("gpt-5-codex".to_string()),
|
|
),
|
|
(
|
|
"sandbox_mode".to_string(),
|
|
TomlValue::String("read-only".to_string()),
|
|
),
|
|
]
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn app_server_accepts_process_scoped_grpc_code_mode_host() {
|
|
let args = AppServerArgs::try_parse_from([
|
|
"codex-app-server",
|
|
"--code-mode-host",
|
|
"https://example.test",
|
|
"--listen",
|
|
"off",
|
|
])
|
|
.expect("parse gRPC app-server args");
|
|
|
|
assert_eq!(
|
|
args.code_mode_host.code_mode_host,
|
|
Some(Url::parse("https://example.test").expect("test endpoint should parse"))
|
|
);
|
|
assert_eq!(args.listen, AppServerTransport::Off);
|
|
}
|
|
|
|
#[test]
|
|
fn app_server_rejects_invalid_code_mode_host() {
|
|
for endpoint in [
|
|
"ftp://127.0.0.1:8765",
|
|
"ws://",
|
|
"ws://127.0.0.1:8765",
|
|
"wss://example.test/code-mode",
|
|
"ws://alice:secret@example.test/code-mode",
|
|
"wss://alice:secret@example.test/code-mode",
|
|
"wss://example.test/code-mode#fragment",
|
|
"http://",
|
|
"https://example.test/#fragment",
|
|
"https://example.test/code-mode",
|
|
"http://alice:secret@example.test",
|
|
"https://alice:secret@example.test",
|
|
"http://example.test/?token=secret",
|
|
] {
|
|
let error =
|
|
AppServerArgs::try_parse_from(["codex-app-server", "--code-mode-host", endpoint])
|
|
.expect_err("invalid code-mode host endpoint should fail startup argument parsing");
|
|
|
|
assert_eq!(error.kind(), clap::error::ErrorKind::ValueValidation);
|
|
let rendered_error = error.to_string();
|
|
assert!(!rendered_error.contains("alice"));
|
|
assert!(!rendered_error.contains("secret"));
|
|
}
|
|
}
|