nx_wflow_identity_ownership_gate_t344.nx source
↩ module page · 66 lines · 3660 B
1import "nx_wflow_engine_identity_candidate_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}