diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-04 15:46:31 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-04 16:51:10 +0300 |
| commit | 5d9212a55acf4db05b8c5cdf3fee3c56ac404cf7 (patch) | |
| tree | 956276a6b85a52e3a5e0703eb0e5ddf7bc5f9f3c /tests | |
| parent | 15cab964f3494b77159caaea289e17e1596e0720 (diff) | |
feat: expose session snapshot through cli
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/cli_wrapper.rs | 51 |
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(); |
