use super::config::Harness;
fn harness(extra: &str) -> anyhow::Result<Harness> {
Ok(toml::from_str(&format!(
"id='codex'\nprogram='/bin/true'\nargs=[]\n{extra}"
))?)
}
#[test]
fn every_bound_is_positive_and_defaults_are_explicit() -> anyhow::Result<()> {
let configured = harness("")?;
configured.validate()?;
assert_eq!(configured.prompt_queue, 32);
assert_eq!(configured.content_bytes, 65536);
assert_eq!(configured.pending_permissions, 1024);
for field in [
"prompt_queue",
"content_bytes",
"acp_frame_bytes",
"pending_permissions",
"write_queue",
"read_queue",
"stream_queue",
"issuer_response_bytes",
] {
assert!(harness(&format!("{field}=0"))?.validate().is_err());
}
Ok(())
}
#[test]
fn no_configuration_can_add_an_approval_policy() {
for field in [
"auto_approve=true",
"permission_policy='approve'",
"permission='allow-once'",
"permission='deny'",
"id='cdx'",
] {
assert!(harness(field).is_err());
}
}
#[test]
fn relative_workspaces_and_empty_resume_ids_are_refused() -> anyhow::Result<()> {
assert!(harness("cwd='relative'")?.validate().is_err());
assert!(harness("session='' ")?.validate().is_err());
Ok(())
}
#[test]
fn a_listen_table_cannot_silently_widen_or_override_the_host() -> anyhow::Result<()> {
for text in [
"subjects=['other.inbox']",
"subjects=['agents.a.inbox','agents.a.inbox']",
"listen_bound=0",
"content_bytes=0",
] {
let table: toml::Value = toml::from_str(text)?;
assert!(super::config::validate_listen(Some(&table), "a", 65536).is_err());
}
let table: toml::Value = toml::from_str("subjects=['agents.a.inbox']")?;
super::config::validate_listen(Some(&table), "a", 65536)?;
Ok(())
}
#[test]
fn the_published_agent_seat_example_loads() -> anyhow::Result<()> {
let examples: serde_json::Value =
serde_json::from_str(include_str!("../../../../docs/site/_data/examples.json"))?;
let code = examples["agent-seat-config"]["code"]
.as_str()
.ok_or_else(|| anyhow::anyhow!("examples.json has no agent-seat-config"))?;
let dir = tempfile::tempdir()?;
let path = dir.path().join("agent-seat.toml");
std::fs::write(&path, code)?;
super::config::Seat::load(&path)?;
Ok(())
}
fn seat(server: &str, credential: &str) -> anyhow::Result<anyhow::Result<super::config::Seat>> {
let dir = tempfile::tempdir()?;
let path = dir.path().join("seat.toml");
std::fs::write(
&path,
format!(
"server = \"{server}\"\nchannel = \"console.topology\"\n{credential}\n\
[limits]\nframe_bytes = 65536\nrecord_bytes = 1048576\nreply_timeout_ms = 10000\n\
flow_steps = 8\nrequest_bytes = 65536\n\n\
[harness]\nid = \"claude-code\"\nprogram = \"/bin/true\"\nargs = []\ncwd = \"/tmp\"\n"
),
)?;
Ok(super::config::Seat::load(&path))
}
#[test]
fn an_open_seat_hosts_the_station_its_name_declares() -> anyhow::Result<()> {
let loaded = seat("127.0.0.1:7700", "[open]\nname = \"assistant\"\n")??;
assert_eq!(loaded.name, "assistant");
assert_eq!(loaded.ticket.agent.as_deref(), Some("assistant"));
assert!(matches!(
&loaded.ticket.credential,
crate::Credential::Open { name: Some(name) } if name == "assistant"
));
let networked = seat(
"wss://liminal.example/ws",
"[open]\nreach = \"network\"\nname = \"assistant\"\n",
)??;
assert_eq!(networked.name, "assistant");
Ok(())
}
#[test]
fn an_open_seat_without_a_name_reach_or_single_credential_is_refused() -> anyhow::Result<()> {
for (server, credential, words) in [
("127.0.0.1:7700", "[open]\n", "needs [open] name"),
(
"127.0.0.1:7700",
"[open]\nname = \"Not Valid\"\n",
"needs [open] name",
),
("127.0.0.1:7700", "[open]\nname = \"a.b\"\n", "one segment"),
(
"wss://liminal.example/ws",
"[open]\nname = \"assistant\"\n",
"reaches a loopback",
),
(
"127.0.0.1:7700",
"[open]\nname = \"assistant\"\n[lys]\nissuer = \"https://lys.example\"\nagent = \"assistant\"\nkey_file = \"/k\"\n",
"exactly one of [lys] and [open]",
),
("127.0.0.1:7700", "", "exactly one of [lys] and [open]"),
] {
let Err(error) = seat(server, credential)? else {
anyhow::bail!("{credential:?} on {server} loaded");
};
assert!(error.to_string().contains(words), "{error}");
}
Ok(())
}