nx_behavior_evidence_gate_t297.nx source
↩ module page · 69 lines · 5616 B
1// nx_behavior_evidence_gate_t297.nx -- Tests behavior evidence gate with various execution and capture scenarios.
2import "nx_behaveprobe.nx"
3import "nx_gate_verdict.nx"
4func main()->i64{
5 let ctr:*i64=gv_ctr()
6 gv_check("invalid redirect descriptor returns setup failure without changing stdout",tr_capture_redirect(-1)==TR_ERR_FD_SETUP,ctr)
7 let a:*u8="/volume1/homes/elderwesto/nishihost/buildroot/_build/nx_behavior_fixture_a_t297.sov.elf"
8 let b:*u8="/volume1/homes/elderwesto/nishihost/buildroot/_build/nx_behavior_fixture_b_t297.sov.elf"
9 let args:*i64=sys_mmap_try(40*__size_of(i64)) as *i64;if (args as i64)<=0{return 2}
10 var q:NxBehaviorRequest;q.live=a;q.other=a;q.cwd=BP_HOST;q.args=args;q.arg_count=1;q.timeout_ms=1000;q.max_capture_bytes=0
11 var r:NxBehaviorResult
12 args[0]="large" as *u8 as i64
13 let large:i64=bp_run_result(&q,&r)
14 gv_check("full owned output beyond old capture cap matches",large==0&&r.state==0&&r.live_bytes==262145&&r.other_bytes==262145&&r.coverage_verified==0,ctr)
15 q.other=b;let tail:i64=bp_run_result(&q,&r)
16 gv_check("different tail beyond old cap measured",tail==1&&r.state==0&&r.first_diff==262144&&r.same_output==0&&r.same_exit==1,ctr)
17 args[0]="exitvariant" as *u8 as i64;let exitdiff:i64=bp_run_result(&q,&r)
18 gv_check("same output with different normal exits differs",exitdiff==1&&r.same_output==1&&r.same_exit==0&&r.live_exit==65&&r.other_exit==66,ctr)
19 args[0]="large" as *u8 as i64
20 q.other=a;q.max_capture_bytes=262144;let limited:i64=bp_run_result(&q,&r)
21 gv_check("explicit capture policy refusal never matched prefixes",limited==2&&r.state<0&&r.grade==BP_G_HARNESS&&r.live_reaped==1&&r.other_reaped==1,ctr)
22 q.max_capture_bytes=0;args[0]="exit127" as *u8 as i64
23 let ex127:i64=bp_run_result(&q,&r)
24 gv_check("legitimate exit127 normal GRADED not exec failure",ex127==0&&r.live_exit==127&&r.live_exec==0&&r.live_signal==0&&r.grade==BP_G_GRADED,ctr)
25 args[0]="exit139" as *u8 as i64;let ex139:i64=bp_run_result(&q,&r)
26 gv_check("explicit exit139 is not signal death",ex139==0&&r.live_exit==139&&r.live_signal==0&&r.grade==BP_G_GRADED,ctr)
27 args[0]="signal" as *u8 as i64;let sig:i64=bp_run_result(&q,&r)
28 gv_check("actual SIGKILL distinct raw wait and signal",sig==2&&r.live_signal==9&&r.live_exit==-1&&r.live_wait==9&&r.grade==BP_G_SIGNALLED,ctr)
29 args[0]="exit1" as *u8 as i64;let nonzero:i64=bp_run_result(&q,&r)
30 gv_check("normal nonzero contract remains observable",nonzero==0&&r.live_exit==1&&r.other_exit==1&&r.grade==BP_G_GRADED&&r.coverage_verified==0,ctr)
31 q.arg_count=0;let usage:i64=bp_run_result(&q,&r)
32 gv_check("usage output weak without claiming workload tested",usage==0&&r.live_exit==2&&r.grade==BP_G_WEAK,ctr)
33 q.arg_count=40;var i:i64=0;while i<40{args[i]="argc" as *u8 as i64;i=i+1}
34 let many:i64=bp_run_result(&q,&r)
35 gv_check("forty args exceed old256B argv without truncation",many==0&&r.live_exit==0&&r.live_bytes==16,ctr)
36 q.arg_count=1;args[0]="sleep" as *u8 as i64;q.timeout_ms=5
37 let timed:i64=bp_run_result(&q,&r)
38 gv_check("timeout refusal retains reaped child evidence",timed==2&&r.live_rc==TR_ERR_TIMEOUT&&r.other_rc==TR_ERR_TIMEOUT&&r.live_reaped==1&&r.other_reaped==1,ctr)
39 q.timeout_ms=1000;args[0]="exit0" as *u8 as i64;q.other="/volume1/homes/elderwesto/nishihost/does-not-exist-behavior-t297.elf"
40 let missing:i64=bp_run_result(&q,&r)
41 gv_check("exec failure distinct from explicit127",missing==2&&r.other_exec<0&&r.other_rc==127&&r.grade==BP_G_HARNESS,ctr)
42 q.other=a;q.cwd="/not-existing-behavior-cwd-t297"
43 let cwd:i64=bp_run_result(&q,&r)
44 bp_emit_result("setup-failure","fixture",&r)
45 gv_check("setup failure typed independently",cwd==2&&r.live_setup==TR_ERR_CHDIR&&r.live_exec==0,ctr)
46 q.cwd=BP_HOST;q.max_capture_bytes=-1
47 gv_check("invalid capture policy refuses before launch",bp_run_result(&q,&r)==2&&r.live_reaped==0&&r.state==BP_INVALID,ctr)
48 q.max_capture_bytes=0;q.arg_count=NX_BO_I64_MAX
49 gv_check("argument byte extent overflow refuses before allocation",bp_run_result(&q,&r)==2&&r.live_reaped==0,ctr)
50 q.arg_count=1;q.args=0 as *i64
51 gv_check("missing argument vector refuses before execution",bp_run_result(&q,&r)==2&&r.live_reaped==0,ctr)
52 q.args=args;q.live="/volume1/homes/elderwesto/nishihost/buildroot/_build/nx_behaveprobe_evidence_candidate_t297.sov.elf";q.other=q.live;q.arg_count=0
53 let cli:i64=bp_run_result(&q,&r)
54 gv_check("actual CLI missing target produces usage exit3",cli==0&&r.live_exit==3&&r.grade==BP_G_WEAK,ctr)
55 var record:NxBufOwned;record.buf=0 as *u8;record.len=0;record.cap=0
56 let bounded:i64=bp_build_result("quoted-target","fixture",&r,&record,8)
57 gv_check("record capacity refusal is explicit before output",bounded==NX_BO_CAPACITY,ctr)
58 gv_check("failed record ownership released",nx_bo_release(&record)==0&&record.cap==0&&record.len==0,ctr)
59 r.live_rc=0-NX_BO_I64_MAX-1
60 let made:i64=bp_build_result("quote\"slash\\line\n","fixture",&r,&record,0)
61 gv_check("complete record preserves signed minimum",made==0&&bp_has(record.buf,record.len,"-9223372036854775808")==1,ctr)
62 gv_check("output descriptor failure reported",bp_write_record(-1,&record)==TR_ERR_DRAIN,ctr)
63 let sent:i64=bp_write_record(1,&record)
64 gv_check("complete constructed JSON written",sent==0,ctr)
65 gv_check("completed record ownership released",nx_bo_release(&record)==0&&record.cap==0&&record.len==0,ctr)
66 gv_check("emitter propagates output failure",bp_emit_result_fd(-1,"fixture","fixture",&r)==2,ctr)
67 sys_munmap_direct(args as *u8,40*__size_of(i64))
68 return gv_verdict("BEHAVIOR-OWNED-EVIDENCE",ctr,"Candidate only; real safe subprocess fixtures, exact completion evidence, workload coverage unmeasured")
69}