code wiki / (root) / nx_wflow_event_result_gate_t344.nx

nx_wflow_event_result_gate_t344.nx source

↩ module page · 56 lines · 4713 B

1// Native integration qualification of additive workflow result commands. 2import "nx_wflow_result_candidate_t344.nx" 3import "nx_tool_run.nx" 4static wrt_pass:i64 5static wrt_fail:i64 6static wrt_timeout:i64 7static wrt_elf:*u8 8func wrt_check(ok:i64,label:*u8)->i64{p("RESULT-GATE ");p(label);if ok==1{p(" PASS\n");wrt_pass=wrt_pass+1}else{p(" FAIL\n");wrt_fail=wrt_fail+1};return ok} 9func wrt_path(base:*u8,leaf:*u8)->*u8{let b:*u8=sys_mmap(slen(base)+slen(leaf)+2);var at:i64=wf_cat(b,0,base);b[at]=47;wf_cat(b,at+1,leaf);return b} 10func wrt_file(path:*u8,body:*u8)->i64{let fd:i64=sys_openat_exclusive(path,MODE_0600);if fd<0{return 0};let rc:i64=wfr_write_all(fd,body,slen(body));let sync:i64=sys_fsync(fd);sys_close(fd);return rc==0 && sync==0} 11func wrt_capture(args:*i64,rcp:*i64)->*WfOwnedText{ 12 let owned:*NxBufOwned=sys_mmap(__size_of(NxBufOwned)) as *NxBufOwned 13 let ev:*NxRunEvidence=sys_mmap(__size_of(NxRunEvidence)) as *NxRunEvidence 14 rcp[0]=tr_run_capture_owned_result(wrt_elf,args,owned,wrt_timeout,0,0 as *u8,ev) 15 let out:*WfOwnedText=wf_text_slice(owned.buf,0,owned.len);nx_bo_release(owned) 16 if ev.reaped!=1 || ev.capture_error!=0 || ev.signal!=0{rcp[0]=0-999} 17 return out 18} 19func wrt_result(ledger:*u8,log:*u8,filter:*u8,expected:i64,needle:*u8,label:*u8)->i64{ 20 let args:*i64=sys_mmap(__size_of(i64)*6) as *i64 21 args[0]=wrt_elf as i64;args[1]="result" as *u8 as i64;args[2]=ledger as i64;args[3]=log as i64;args[4]=filter as i64 22 let rc:*i64=sys_mmap(__size_of(i64)) as *i64;let out:*WfOwnedText=wrt_capture(args,rc) 23 if out==(0 as *WfOwnedText){return wrt_check(0,label)} 24 p("RESPONSE bytes=");pn(out.len);p(" ");p(out.data) 25 return wrt_check(rc[0]==expected && wf_has(out.data,needle)==1,label) 26} 27func wrt_fire(flows:*u8,steps:*u8,ledger:*u8,cat:*u8,event:*u8,log:*u8,expected:i64,needle:*u8,label:*u8)->i64{ 28 let args:*i64=sys_mmap(__size_of(i64)*9) as *i64 29 args[0]=wrt_elf as i64;args[1]="fire-result" as *u8 as i64;args[2]=flows as i64;args[3]=steps as i64;args[4]=ledger as i64;args[5]=cat as i64;args[6]=event as i64;args[7]=log as i64 30 let rc:*i64=sys_mmap(__size_of(i64)) as *i64;let out:*WfOwnedText=wrt_capture(args,rc) 31 if out==(0 as *WfOwnedText){return wrt_check(0,label)} 32 p("RESPONSE bytes=");pn(out.len);p(" ");p(out.data) 33 return wrt_check(rc[0]==expected && wf_has(out.data,needle)==1,label) 34} 35 36func wrt_event(ledger:*u8,log:*u8,event:*u8,saved:*u8,needle:*u8,label:*u8)->i64{ 37 let args:*i64=sys_mmap(__size_of(i64)*6) as *i64;args[0]=wrt_elf as i64;args[1]="event-result" as *u8 as i64;args[2]=ledger as i64;args[3]=log as i64;args[4]=event as i64 38 let rc:*i64=sys_mmap(__size_of(i64)) as *i64;let out:*WfOwnedText=wrt_capture(args,rc);if out==(0 as *WfOwnedText){return wrt_check(0,label)} 39 if wrt_file(saved,out.data)!=1{return wrt_check(0,label)};let evidence:*WfrFile=wfr_read(saved) 40 p("EVENT-RESPONSE path=");p(saved);p(" bytes=");pn(out.len);p(" sha256=");p(evidence.hash);p(" exit=");pn(rc[0]);p("\n") 41 return wrt_check(rc[0]==0&&wf_has(out.data,needle)==1,label) 42} 43func main(argc:i64,argv:*i64)->i64{ 44 if argc!=4{return 2};let base:*u8=argv[1] as *u8;wrt_elf=argv[2] as *u8;wrt_timeout=wf_atoi(argv[3] as *u8);if sys_mkdir(base,MODE_0755)!=0{return 2} 45 let flows:*u8=wrt_path(base,"multi.flows");let steps:*u8=wrt_path(base,"multi.steps");let ledger:*u8=wrt_path(base,"multi.ledger");let log:*u8=wrt_path(base,"multi.log") 46 if wrt_file(flows,"one|multi|-\ntwo|multi|-\n")!=1||wrt_file(steps,"one|1|set-var|-|fixture=one|1\ntwo|1|set-var|-|fixture=two|1\n")!=1||wrt_file(log,"isolated event lookup fixture; no publisher\n")!=1{return 2} 47 if wf_fire_files(flows,steps,ledger,"-","multi~id=shared-event")!=2{return 2} 48 let before:*WfrFile=wfr_read(ledger) 49 wrt_event(ledger,log,"shared-event",wrt_path(base,"multiple.json"),"\"selected_runs\":2","exact-event-multiple-flows") 50 wrt_event(ledger,log,"absent-event",wrt_path(base,"absent.json"),"\"state\":\"no-matching-runs\"","exact-event-no-match") 51 let long:*u8=sys_mmap(4097);var i:i64=0;while i<4096{long[i]=97;i=i+1};long[4095]=88 52 wrt_event("/tmp/wflow-identity-native-t344-r3/long-flow.ledger","/tmp/wflow-identity-native-t344-r3/full.log",long,wrt_path(base,"long.json"),"\"identity_binding\":\"verified\"","exact-event-long-id") 53 wrt_event("/volume1/homes/elderwesto/nishihost/knowledge/status/wflow_runs.log","/volume1/homes/elderwesto/nishihost/_jobs/job_1789861436.out","body-alpha-t345-e7bdd353",wrt_path(base,"body-release.json"),"\"state\":\"DONE\"","actual-body-release-read-only") 54 let after:*WfrFile=wfr_read(ledger);wrt_check(seq(before.hash,after.hash)==1,"event-lookups-never-mutate-ledger") 55 p("EVENT-GATE TOTAL pass=");pn(wrt_pass);p(" fail=");pn(wrt_fail);p("\n");if wrt_fail>0{return 1};return 0 56}