aboutsummaryrefslogtreecommitdiff
path: root/tests/live_handoff.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-07-17 23:55:08 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-07-17 23:59:56 +0300
commite0758c32118f2aa006db3d8fa4b41833fe6e7ead (patch)
tree2b29dd61ebf870db8d0ac95cc0b4515178c834c4 /tests/live_handoff.rs
parent040956531f673c8fb7720037494ed4e61b123c6c (diff)
feat: harden named agent cli workflows
refs #1525
Diffstat (limited to 'tests/live_handoff.rs')
-rw-r--r--tests/live_handoff.rs53
1 files changed, 39 insertions, 14 deletions
diff --git a/tests/live_handoff.rs b/tests/live_handoff.rs
index b2fb9ef6..9f607195 100644
--- a/tests/live_handoff.rs
+++ b/tests/live_handoff.rs
@@ -1213,6 +1213,8 @@ fn live_handoff_accepts_canonical_pane_id_from_child_env() {
#[test]
fn live_handoff_keeps_agent_started_pane_after_agent_exits() {
+ use std::os::unix::fs::PermissionsExt;
+
let _lock = test_lock();
let base = unique_test_dir();
let config_home = base.join("config");
@@ -1221,16 +1223,43 @@ fn live_handoff_keeps_agent_started_pane_after_agent_exits() {
let started_marker = base.join("agent-started");
let exited_marker = base.join("agent-exited");
let shell_marker = base.join("shell-after-agent");
+ let bin = base.join("bin");
+ fs::create_dir_all(&bin).unwrap();
+ let fake_pi = bin.join("pi");
+ fs::write(
+ &fake_pi,
+ format!(
+ "#!/bin/sh\nexport HERDR_AGENT=pi\necho started > {}\n/bin/sleep 1\necho exited > {}\n",
+ started_marker.display(),
+ exited_marker.display()
+ ),
+ )
+ .unwrap();
+ fs::set_permissions(&fake_pi, fs::Permissions::from_mode(0o755)).unwrap();
+ let path = format!("{}:/bin:/usr/bin", bin.display());
- let spawned = spawn_server(&config_home, &runtime_dir, &api_socket);
+ let spawned = spawn_server_with_env(
+ &config_home,
+ &runtime_dir,
+ &api_socket,
+ &[("PATH", path.as_str())],
+ );
wait_for_socket(&api_socket, Duration::from_secs(10));
register_runtime_dir(&runtime_dir);
-
- let command = format!(
- "echo started > {}; sleep 1; echo exited > {}",
- started_marker.display(),
- exited_marker.display()
+ let workspace = request(
+ &api_socket,
+ serde_json::json!({
+ "id": "test:workspace-create",
+ "method": "workspace.create",
+ "params": { "cwd": "/tmp", "focus": false }
+ }),
);
+ assert_ok(workspace.clone());
+ let pane_id = workspace["result"]["root_pane"]["pane_id"]
+ .as_str()
+ .unwrap()
+ .to_string();
+
let started = request(
&api_socket,
serde_json::json!({
@@ -1238,17 +1267,13 @@ fn live_handoff_keeps_agent_started_pane_after_agent_exits() {
"method": "agent.start",
"params": {
"name": "handoff-agent",
- "cwd": "/tmp",
- "focus": true,
- "argv": ["/bin/sh", "-c", command]
+ "kind": "pi",
+ "pane_id": pane_id,
+ "timeout_ms": 5000
}
}),
);
- assert_ok(started.clone());
- let pane_id = started["result"]["agent"]["pane_id"]
- .as_str()
- .unwrap()
- .to_string();
+ assert_ok(started);
support::wait_for_file(&started_marker, Duration::from_secs(5));
assert_ok(request(