aboutsummaryrefslogtreecommitdiff
path: root/tests/api_ping.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-17 01:41:16 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-17 01:41:16 +0300
commite4de58b37f58d59d146158239ed218a8accd5c3c (patch)
tree6bb35b8c9aaec969110ff51a58814dd8099617c0 /tests/api_ping.rs
parent86adf88351e17c6a11cac253714b169eac0db233 (diff)
feat: add agent start for server-owned terminals
Diffstat (limited to 'tests/api_ping.rs')
-rw-r--r--tests/api_ping.rs55
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/api_ping.rs b/tests/api_ping.rs
index a2e6ef76..4300b54e 100644
--- a/tests/api_ping.rs
+++ b/tests/api_ping.rs
@@ -551,6 +551,61 @@ fn tab_methods_round_trip_over_socket() {
#[cfg(not(target_os = "macos"))]
#[test]
+fn agent_start_creates_named_terminal_over_socket() {
+ let _lock = test_lock();
+ 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 child = spawn_herdr(&config_home, &runtime_dir, &socket_path);
+ wait_for_socket(&socket_path, Duration::from_secs(5));
+
+ let started = send_request(
+ &socket_path,
+ &format!(
+ r#"{{"id":"agent_start","method":"agent.start","params":{{"name":"main","cwd":"{}","argv":["/bin/sh","-c","printf agent-start-ok; sleep 2"]}}}}"#,
+ base.display()
+ ),
+ );
+ assert_eq!(started["result"]["type"], "agent_started");
+ assert_eq!(started["result"]["agent"]["name"], "main");
+ assert_eq!(
+ started["result"]["agent"]["cwd"],
+ base.display().to_string()
+ );
+ assert_eq!(started["result"]["argv"][0], "/bin/sh");
+ let terminal_id = started["result"]["agent"]["terminal_id"]
+ .as_str()
+ .unwrap()
+ .to_string();
+
+ let listed = send_request(
+ &socket_path,
+ r#"{"id":"agent_start_list","method":"agent.list","params":{}}"#,
+ );
+ let agents = listed["result"]["agents"].as_array().unwrap();
+ assert_eq!(agents.len(), 1);
+ assert_eq!(agents[0]["terminal_id"], terminal_id);
+ assert_eq!(agents[0]["name"], "main");
+
+ let duplicate = send_request(
+ &socket_path,
+ &format!(
+ r#"{{"id":"agent_start_duplicate","method":"agent.start","params":{{"name":"main","cwd":"{}","argv":["/bin/sh","-c","true"]}}}}"#,
+ base.display()
+ ),
+ );
+ assert_eq!(duplicate["error"]["code"], "agent_name_taken");
+ assert!(duplicate["error"]["message"]
+ .as_str()
+ .unwrap()
+ .contains(&terminal_id));
+
+ cleanup_spawned_herdr(child, base);
+}
+
+#[test]
fn agent_methods_round_trip_over_socket() {
let _lock = test_lock();
let base = unique_test_dir();