aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-07-04 15:46:31 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-07-04 16:51:10 +0300
commit5d9212a55acf4db05b8c5cdf3fee3c56ac404cf7 (patch)
tree956276a6b85a52e3a5e0703eb0e5ddf7bc5f9f3c /tests
parent15cab964f3494b77159caaea289e17e1596e0720 (diff)
feat: expose session snapshot through cli
Diffstat (limited to 'tests')
-rw-r--r--tests/cli_wrapper.rs51
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/cli_wrapper.rs b/tests/cli_wrapper.rs
index 41e924ee..c1bf27c0 100644
--- a/tests/cli_wrapper.rs
+++ b/tests/cli_wrapper.rs
@@ -1173,6 +1173,57 @@ fn api_schema_json_prints_bundled_schema() {
}
#[test]
+fn api_snapshot_prints_live_session_snapshot() {
+ let base = unique_test_dir();
+ fs::create_dir_all(&base).unwrap();
+ let socket_path = base.join("herdr.sock");
+ let listener = UnixListener::bind(&socket_path).unwrap();
+
+ let server = thread::spawn({
+ let socket_path = socket_path.clone();
+ move || {
+ listener.set_nonblocking(true).unwrap();
+ let deadline = Instant::now() + Duration::from_millis(700);
+ while Instant::now() < deadline {
+ match listener.accept() {
+ Ok((mut stream, _)) => {
+ let mut line = String::new();
+ let mut reader = BufReader::new(stream.try_clone().unwrap());
+ reader.read_line(&mut line).unwrap();
+ let request: serde_json::Value = serde_json::from_str(&line).unwrap();
+ assert_eq!(request["method"], "session.snapshot");
+ assert_eq!(request["id"], "cli:api:snapshot");
+
+ let response = serde_json::json!({
+ "id": "cli:api:snapshot",
+ "result": {
+ "type": "ok",
+ "marker": "snapshot-passthrough"
+ }
+ });
+ writeln!(stream, "{response}").unwrap();
+ stream.flush().unwrap();
+ let _ = fs::remove_file(socket_path);
+ return;
+ }
+ Err(err) if err.kind() == std::io::ErrorKind::WouldBlock => {
+ thread::sleep(Duration::from_millis(10));
+ }
+ Err(err) => panic!("accept failed: {err}"),
+ }
+ }
+ panic!("CLI did not connect to fake API socket");
+ }
+ });
+
+ let value = run_cli_json(&socket_path, &["api", "snapshot"]);
+
+ assert_eq!(value["result"]["marker"], "snapshot-passthrough");
+ server.join().unwrap();
+ cleanup_test_base(&base);
+}
+
+#[test]
fn api_schema_output_writes_bundled_schema_to_file() {
let base = unique_test_dir();
fs::create_dir_all(&base).unwrap();