code wiki / (root) / nx_behavior_review_capture_gate_t371.nx

nx_behavior_review_capture_gate_t371.nx source

↩ module page · 85 lines · 6777 B

1// nx_behavior_evidence_gate_t297.nx -- Tests behavior evidence gate with various execution and capture scenarios. 2import "nx_behaveprobe_review_candidate_t371.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 68 q.live=a;q.other=b;q.cwd=BP_HOST;q.args=args;q.arg_count=1;q.timeout_ms=1000;q.max_capture_bytes=0;args[0]="large" as *u8 as i64 69 var keptA:NxBufOwned;var keptB:NxBufOwned 70 keptA.buf=0 as *u8;keptA.len=0;keptA.cap=0;keptB.buf=0 as *u8;keptB.len=0;keptB.cap=0 71 var repeat:i64=0;var repeated:i64=1 72 while repeat<8{ 73 let kr:i64=bp_run_owned_result(&q,&r,&keptA,&keptB) 74 if kr!=1||r.first_diff!=262144||keptA.len!=262145||keptB.len!=262145{repeated=0} 75 if keptA.len==262145&&keptB.len==262145{if keptA.buf[262144]==keptB.buf[262144]{repeated=0}} 76 if nx_bo_release(&keptA)!=0{repeated=0};if nx_bo_release(&keptB)!=0{repeated=0} 77 if keptA.cap!=0||keptB.cap!=0{repeated=0};repeat=repeat+1 78 } 79 gv_check("retained full different tails survive result and repeated caller release",repeated==1,ctr) 80 q.max_capture_bytes=262144;let krLimited:i64=bp_run_owned_result(&q,&r,&keptA,&keptB) 81 gv_check("unqualified partial captures remain caller owned with refusal evidence",krLimited==2&&r.state<0&&r.live_reaped==1&&r.other_reaped==1,ctr) 82 gv_check("partial retained buffers release exactly",nx_bo_release(&keptA)==0&&nx_bo_release(&keptB)==0,ctr) 83 sys_munmap_direct(args as *u8,40*__size_of(i64)) 84 return gv_verdict("BEHAVIOR-OWNED-EVIDENCE",ctr,"Candidate only; real safe subprocess fixtures, exact completion evidence, workload coverage unmeasured") 85}