Skip to content

Commit 7f0c4fd

Browse files
RoyLinRoyLin
authored andcommitted
test: raise lib coverage 72->78% (cgroup parser + writer thread)
parse_cgroup (the k8s identity heart) was untested: add containerd pod+container, docker container-only, and bare-host cases (covers the '_'->'-' pod-UID rewrite + short-id). Also a JsonExporter test exercising the v0.9.2 non-blocking writer-thread path (export/new/output_drops). traits.rs 63->74%, lib total 72->78%; lib tests 6->10.
1 parent 98f027b commit 7f0c4fd

1 file changed

Lines changed: 52 additions & 0 deletions

File tree

src/traits.rs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,58 @@ mod tests {
279279
assert_eq!(c.classify(Some("example.com"), ip), None);
280280
}
281281

282+
#[test]
283+
fn parse_cgroup_extracts_containerd_pod_and_container() {
284+
// containerd / cri-o systemd layout — pod UID uses '_' which must become '-'.
285+
let cg = "0::/kubepods.slice/kubepods-besteffort.slice/\
286+
kubepods-besteffort-poda1b2c3d4_e5f6_7890_abcd_ef1234567890.slice/\
287+
cri-containerd-1111111111111111111111111111111111111111111111111111111111111111.scope\n";
288+
let k = parse_cgroup(cg);
289+
assert_eq!(
290+
k.pod_uid.as_deref(),
291+
Some("a1b2c3d4-e5f6-7890-abcd-ef1234567890")
292+
);
293+
assert_eq!(k.container_id.as_deref(), Some("111111111111")); // short id (12)
294+
}
295+
296+
#[test]
297+
fn parse_cgroup_extracts_docker_container_only() {
298+
let cg = "0::/system.slice/\
299+
docker-2222222222222222222222222222222222222222222222222222222222222222.scope\n";
300+
let k = parse_cgroup(cg);
301+
assert_eq!(k.container_id.as_deref(), Some("222222222222"));
302+
assert_eq!(k.pod_uid, None);
303+
}
304+
305+
#[test]
306+
fn parse_cgroup_none_for_bare_host() {
307+
let k = parse_cgroup("0::/user.slice/user-1000.slice/session-2.scope\n");
308+
assert!(k.pod_uid.is_none());
309+
assert!(k.container_id.is_none());
310+
}
311+
312+
#[test]
313+
fn json_exporter_export_is_nonblocking() {
314+
use crate::model::AgentEvent;
315+
let ex = JsonExporter::new();
316+
let ev = EnrichedEvent {
317+
identity: Identity {
318+
agent: Some("agent-x".into()),
319+
task: Some("1".into()),
320+
session: None,
321+
},
322+
provider: None,
323+
event: AgentEvent::ProcessExit {
324+
pid: 1,
325+
exit_code: 0,
326+
},
327+
};
328+
for _ in 0..50 {
329+
ex.export(&ev);
330+
}
331+
assert_eq!(ex.output_drops(), 0); // 50 << queue cap → nothing dropped, never blocks
332+
}
333+
282334
#[test]
283335
fn cgroup_parse_containerd_docker_bare() {
284336
let cd = "0::/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod1a2b3c4d_5e6f_7890_abcd_ef1234567890.slice/cri-containerd-abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789.scope";

0 commit comments

Comments
 (0)