aboutsummaryrefslogtreecommitdiff
path: root/tests/cli_wrapper.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-26 21:52:19 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-26 21:53:50 +0300
commit427c2606d8f62558e3949d2f44173175e96bed49 (patch)
tree0d351c30c3132037beb75ea20c378d75e6b34c80 /tests/cli_wrapper.rs
parent31e973502af205666cb4a48e3f9e10328f65cd4e (diff)
fix: deliver agent status subscriptions from event hub
Diffstat (limited to 'tests/cli_wrapper.rs')
-rw-r--r--tests/cli_wrapper.rs63
1 files changed, 63 insertions, 0 deletions
diff --git a/tests/cli_wrapper.rs b/tests/cli_wrapper.rs
index 0482fd1c..b56ad13d 100644
--- a/tests/cli_wrapper.rs
+++ b/tests/cli_wrapper.rs
@@ -2190,6 +2190,7 @@ fn pane_run_read_and_wait_commands_work() {
);
assert!(create.status.success());
+ let started = Instant::now();
let waited = run_cli(
&socket_path,
&[
@@ -2206,11 +2207,16 @@ fn pane_run_read_and_wait_commands_work() {
"5000",
],
);
+ let elapsed = started.elapsed();
assert!(
waited.status.success(),
"stderr: {}",
String::from_utf8_lossy(&waited.stderr)
);
+ assert!(
+ elapsed < Duration::from_millis(500),
+ "already-matching wait took {elapsed:?}"
+ );
let waited_json: serde_json::Value = serde_json::from_slice(&waited.stdout).unwrap();
assert_eq!(waited_json["result"]["type"], "output_matched");
@@ -2669,6 +2675,63 @@ fn wait_agent_status_exits_when_idle_status_matches() {
}
#[test]
+fn wait_agent_status_exits_immediately_when_status_already_matches() {
+ let base = unique_test_dir();
+ let config_home = base.join("config");
+ let runtime_dir = base.join("runtime");
+ let socket_path = runtime_dir.join("herdr.sock");
+
+ let herdr = spawn_herdr(&config_home, &runtime_dir, &socket_path);
+ wait_for_socket(&socket_path, Duration::from_secs(5));
+
+ let created = send_request(
+ &socket_path,
+ &format!(
+ r#"{{"id":"req_cli_immediate_1","method":"workspace.create","params":{{"cwd":"{}","focus":true}}}}"#,
+ base.display()
+ ),
+ );
+ let workspace_id = created["result"]["workspace"]["workspace_id"]
+ .as_str()
+ .unwrap()
+ .to_string();
+ let pane_id = format!("{workspace_id}-1");
+
+ let reported = send_request(
+ &socket_path,
+ &format!(
+ r#"{{"id":"req_cli_immediate_2","method":"pane.report_agent","params":{{"pane_id":"{}","source":"herdr:pi","agent":"pi","state":"idle"}}}}"#,
+ pane_id
+ ),
+ );
+ assert_eq!(reported["result"]["type"], "ok");
+
+ let waited = run_cli(
+ &socket_path,
+ &[
+ "wait",
+ "agent-status",
+ "1-1",
+ "--status",
+ "idle",
+ "--timeout",
+ "1000",
+ ],
+ );
+ assert!(
+ waited.status.success(),
+ "stderr: {}",
+ String::from_utf8_lossy(&waited.stderr)
+ );
+ let waited_json: serde_json::Value = serde_json::from_slice(&waited.stdout).unwrap();
+ assert_eq!(waited_json["event"], "pane.agent_status_changed");
+ assert_eq!(waited_json["data"]["agent_status"], "idle");
+ assert_eq!(waited_json["data"]["agent"], "pi");
+
+ cleanup_spawned_herdr(herdr, base);
+}
+
+#[test]
fn wait_agent_status_exits_when_done_status_matches() {
let base = unique_test_dir();
let config_home = base.join("config");