diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-17 23:55:08 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-17 23:59:56 +0300 |
| commit | e0758c32118f2aa006db3d8fa4b41833fe6e7ead (patch) | |
| tree | 2b29dd61ebf870db8d0ac95cc0b4515178c834c4 /tests/live_handoff.rs | |
| parent | 040956531f673c8fb7720037494ed4e61b123c6c (diff) | |
feat: harden named agent cli workflows
refs #1525
Diffstat (limited to 'tests/live_handoff.rs')
| -rw-r--r-- | tests/live_handoff.rs | 53 |
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( |
