events : journal d'evenements JSONL (issue #2) - append-only, rotation mensuelle, lecture tolerante aux lignes corrompues, env_keys sans valeurs secretes, 8 tests
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
//! Integration test for the event journal: parses the replayable
|
||||
//! fixture shipped with the repository and exercises the append path.
|
||||
|
||||
use agent_manager::events::{self, Event, EventKind};
|
||||
use std::path::PathBuf;
|
||||
|
||||
fn fixture() -> PathBuf {
|
||||
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/events-sample.jsonl")
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn fixture_parses_valid_lines_and_skips_corrupt_ones() {
|
||||
let events = events::parse_file(&fixture());
|
||||
assert_eq!(events.len(), 2, "the corrupt line must be skipped");
|
||||
assert_eq!(events[0].kind, EventKind::Start);
|
||||
assert_eq!(events[0].agent.as_deref(), Some("claude-code"));
|
||||
assert_eq!(events[0].pid, Some(1234));
|
||||
assert_eq!(events[0].env_keys, vec!["OPENAI_KEY".to_string()]);
|
||||
assert_eq!(events[1].kind, EventKind::Stop);
|
||||
assert_eq!(events[1].duration_s, Some(1364));
|
||||
assert_eq!(events[1].exit_code, Some(0));
|
||||
assert_eq!(events[1].reason.as_deref(), Some("signal"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn append_then_read_back_through_read_events() {
|
||||
let dir = tempfile::tempdir().unwrap();
|
||||
let mut log = events::EventLog::new(dir.path());
|
||||
log.append(
|
||||
&Event::now(EventKind::Run)
|
||||
.with_agent("jcode")
|
||||
.with_cwd("/tmp/demo")
|
||||
.with_exit_code(0),
|
||||
)
|
||||
.unwrap();
|
||||
let all: Vec<Event> = events::read_events(dir.path(), 10);
|
||||
assert_eq!(all.len(), 1);
|
||||
assert_eq!(all[0].agent.as_deref(), Some("jcode"));
|
||||
assert_eq!(all[0].cwd.as_deref(), Some("/tmp/demo"));
|
||||
assert_eq!(all[0].exit_code, Some(0));
|
||||
}
|
||||
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
{"ts":"2026-08-15T14:39:26Z","kind":"start","agent":"claude-code","pid":1234,"cwd":"/home/bruno/proj/api","session":"20260815_143926_a1b2c3","env_keys":["OPENAI_KEY"]}
|
||||
cette ligne est corrompue et doit etre ignoree par parse_file
|
||||
{"ts":"2026-08-15T15:02:10Z","kind":"stop","agent":"claude-code","pid":1234,"reason":"signal","duration_s":1364,"exit_code":0}
|
||||
Reference in New Issue
Block a user