code wiki / (root) / nx_wflow_ownership_negative_gate_t344.nx

nx_wflow_ownership_negative_gate_t344.nx source

↩ module page · 66 lines · 3663 B

1import "nx_wflow_ownership_old_engine_fixture_t344.nx" 2import "nx_gate_verdict.nx" 3func wt_pages(byte:*u8)->i64{ 4 let fd:i64=sys_openat_rd("/proc/self/statm") 5 if fd<0{return 0-1} 6 var value:i64=0;var digits:i64=0;var rc:i64=0-1 7 while 1{ 8 let n:i64=sys_read(fd,byte,1) 9 if n!=1{break} 10 if byte[0]==(32 as u8){if digits>0{rc=value};break} 11 if byte[0]<(48 as u8){break};if byte[0]>(57 as u8){break} 12 let digit:i64=(byte[0] as i64)-48 13 if value>(WF_TEXT_I64_MAX-digit)/10{break} 14 value=value*10+digit;digits=digits+1 15 } 16 if sys_close(fd)!=0{return 0-1};return rc 17} 18func wo_cycle(cx:*i64,rid:*u8,index:i64,out:*u8)->i64{ 19 let path:*u8=cx[2] as *u8 20 if wf_writeall(path,"",0)!=0{return 1} 21 if wf_emit(path,rid,"f",0,"START",0)!=0{return 2} 22 if wf_decide(cx,rid,1,"APPROVED","fixture")!=0{return 3} 23 if wf_emit_ver(path,rid,1)!=0{return 4} 24 if wf_emit_drift(path,rid,1,2)!=0{return 5} 25 if wf_emit_start2(path,rid,"f")!=0{return 6} 26 if wf_decision(cx,rid,1)!=1{return 7} 27 if wf_decision(cx,rid,2)!=0{return 8} 28 if wf_decide(cx,rid,1,"DENIED","fixture")!=0{return 9} 29 if wf_decision(cx,rid,1)!=(0-1){return 10} 30 let short:*u8="WFRUN rid=short.f flow=f step=0 status=START att=0\nWFRUN rid=short.f flow=f step=0 status=DONE att=0\n" 31 if wf_writeall(path,short,slen(short))!=0{return 11} 32 if wf_obs_board(path)!=1{return 12} 33 if wf_obs_html(path,out)!=1{return 13} 34 if wf_obs_html(path,"/dev/null/not-a-directory")!=(0-1){return 14} 35 let malformed:*u8="WFRUN rid=short.f flow=f step=0 status=START att=0\ntruncated" 36 if wf_writeall(path,malformed,slen(malformed))!=0{return 15} 37 if wf_obs_board(path)!=(0-1)||wf_obs_html(path,out)!=(0-1){return 16} 38 cx[2]="/dev/null/not-a-directory" as *u8 as i64 39 let failed:i64=wf_resume(cx) 40 let decision:i64=wf_decision(cx,rid,1) 41 let board:i64=wf_obs_board(cx[2] as *u8) 42 let html:i64=wf_obs_html(cx[2] as *u8,out) 43 cx[2]=path as i64 44 if failed!=WF_EVIDENCE_ERROR||decision!=0||board!=(0-1)||html!=(0-1){return 17} 45 return 0 46} 47func main(argc:i64,argv:*i64)->i64{ 48 if argc!=4{return 2};let cycles:i64=wf_atoi(argv[1] as *u8);if cycles<=0{return 2} 49 let path:*u8=argv[2] as *u8;let out:*u8=argv[3] as *u8 50 let fd:i64=sys_openat_exclusive(path,MODE_0600);if fd<0{return 3};if sys_close(fd)!=0{return 3} 51 let byte:*u8=sys_mmap_try(1);let cx:*i64=sys_mmap_try(5*__size_of(i64)) as *i64;let rid:*u8=sys_mmap_try(4301) 52 if (byte as i64)<=0||(cx as i64)<=0||(rid as i64)<=0{return 4};cx[2]=path as i64 53 let ctr:*i64=gv_ctr();var fill:i64=0;while fill<4300{rid[fill]=97;fill=fill+1};rid[4300]=0 54 gv_check_eq("warm record decision observer lifecycle",wo_cycle(cx,rid,0,out),0,ctr) 55 let arena_before:i64=nxa_st[3];let before:i64=wt_pages(byte);var i:i64=0;var error:i64=0 56 while i<cycles{let length:i64=3900+(i*7)%401;rid[length]=0;let rc:i64=wo_cycle(cx,rid,i,out);rid[length]=97;if rc!=0{error=rc;break};i=i+1} 57 let after:i64=wt_pages(byte);let arena_after:i64=nxa_st[3] 58 p("MAPPING before_pages=");pn(before);p(" after_pages=");pn(after);p(" cycles=");pn(i);p("\n") 59 gv_check_eq("all repeated in-process ownership cycles",i,cycles,ctr) 60 gv_check_eq("all success and failure branches return expected outcome",error,0,ctr) 61 gv_check("proc statm measurement available",before>0,ctr) 62 gv_check_eq("existing arena chunk count unchanged",arena_after,arena_before,ctr) 63 gv_check_eq("virtual mapping pages unchanged",after,before,ctr) 64 sys_munmap_direct(byte,1);sys_munmap_direct(cx as *u8,5*__size_of(i64));sys_munmap_direct(rid,4301) 65 return gv_verdict("WFLOW-IDENTITY-OWNERSHIP-T344",ctr,"Real in-process statm; record extents sweep 3900..4300 byte IDs; decision deny/approve/absent, board/html success and failure, resume failed read") 66}