code wiki / _hdl_build / nx_deploy_stage_gate_t188.nx

nx_deploy_stage_gate_t188.nx source

↩ module page · 77 lines · 5553 B

1// nx_deploy_stage_gate_t188.nx -- Validates deployment stages by checking file modes, execution, and ownership across various test cases. 2import "nx_deploy_stage_candidate_t188.nx" 3import "nx_tool_run.nx" 4import "nx_signal.nx" 5import "nx_gate_verdict.nx" 6func main()->i64{ 7 let c:*i64=gv_ctr();let r:*NxDeployStageResult=sys_mmap(__size_of(NxDeployStageResult)) as *NxDeployStageResult 8 let src:*u8="_build/nx_mgmt_api.sov.elf" 9 let dst:*u8="knowledge/gates/manager-stage-t188.elf.new" 10 gv_check("actual manager stages",ds_stage_core(src,dst,r)==0,c) 11 gv_check("stage visible and directory synchronized",r.visible==1&&r.durable==1,c) 12 gv_check("source0755 preserved",r.mode==MODE_0755,c) 13 gv_check("legacy size probe shares exact source admission",ds_src_size(src)==r.bytes,c) 14 let sparse:*u8="knowledge/gates/size-probe-t188.sparse" 15 let sf:i64=sys_openat_wr(sparse,MODE_0600) 16 let extent:i64=67108865 17 let hdr:*u8=sys_mmap(4);hdr[0]=127 as u8;hdr[1]=69 as u8;hdr[2]=76 as u8;hdr[3]=70 as u8 18 var sparseok:i64=0 19 if sf>=0{if sys_write(sf,hdr,4)==4&&sys_lseek(sf,extent-1,0)==extent-1&&sys_write(sf,hdr,1)==1{sparseok=1};sys_close(sf)} 20 gv_check("size probe crosses former64MiB ceiling without reading entire sparse file",sparseok==1&&ds_src_size(sparse)==extent,c) 21 gv_check("test sparse fixture cleaned by its owner",fio_unlink(sparse)==0,c) 22 let out:*u8=sys_mmap(4096);let n:*i64=sys_mmap(8) as *i64;let av:*i64=sys_mmap(16) as *i64;av[0]=dst as i64;av[1]=0;*n=0 23 let rc:i64=tr_run_capture_cwd(dst,av,out,4096,n,30000,"/volume1/homes/elderwesto/nishihost/buildroot") 24 sys_write(1,out,*n) 25 gv_check("staged manager actually executes usage1",rc==1&&*n==77,c) 26 gv_check("repeat stage succeeds",ds_stage_core(src,dst,r)==0,c) 27 let non:*u8="knowledge/gates/nonexec-source-t188.elf.new" 28 gv_check("nonexecuting ELF fixture copied",ds_stage_core(src,non,r)==0,c) 29 gv_check("nonexecuting fixture mode set",nx_chmod(non,MODE_0644)==0,c) 30 gv_check("nonexecuting ELF stays nonexecuting",ds_stage_core(non,"knowledge/gates/nonexec-dest-t188.elf.new",r)==0&&r.mode==MODE_0644,c) 31 let stat:*u8=sys_mmap(144) 32 let nd:i64=sys_openat_rd("knowledge/gates/nonexec-dest-t188.elf.new") 33 gv_check("actual destination0644",sys_fstat_fd(nd,stat)==0&&sys_stat_permissions(stat)==MODE_0644,c);sys_close(nd) 34 gv_check("live destination refused",ds_stage_core(src,"knowledge/gates/not-a-stage-t188.elf",r)==(0-2),c) 35 let plain:*u8="knowledge/gates/plain-t188.bin";let b:*u8=sys_mmap(2048);var i:i64=0;while i<2048{b[i]=65 as u8;i=i+1} 36 let fd:i64=sys_openat_wr(plain,MODE_0644);sys_write(fd,b,2048);sys_close(fd) 37 gv_check("non-ELF data refused",ds_stage_core(plain,"knowledge/gates/plain-t188.new",r)==(0-4),c) 38 gv_check("refused data creates no owned temporary",r.temp_owned==0&&r.visible==0,c) 39 gv_check("same destination recovers after malformed source",ds_stage_core(src,"knowledge/gates/plain-t188.new",r)==0,c) 40 let temp:*u8="knowledge/gates/collision-t188.new.stg" 41 let cf:i64=sys_openat_wr(temp,MODE_0600);sys_write(cf,"owned-fixture",13);sys_close(cf) 42 gv_check("preexisting temporary refused",ds_stage_core(src,"knowledge/gates/collision-t188.new",r)==(0-8),c) 43 let cr:i64=sys_openat_rd(temp);let got:i64=sys_read(cr,b,2048);sys_close(cr) 44 gv_check("other temporary preserved",got==13&&b[0]==(111 as u8)&&r.temp_owned==0,c) 45 gv_check("test owner removes only its collision fixture",fio_unlink(temp)==0,c) 46 let old:*i64=sys_mmap(16) as *i64;let lim:*i64=sys_mmap(16) as *i64;let st:*i64=sys_mmap(8) as *i64 47 let pid:i64=sys_fork() 48 if pid==0 { 49 let sigrc:i64=nx_signal_ignore(25);if sigrc!=0{gv_puts("signal-ignore errno=");gv_num(sigrc);gv_puts("\n");sys_exit(2)} 50 if nx_prlimit(0,1,0 as *u8,old as *u8)!=0{sys_exit(3)} 51 lim[0]=4096;lim[1]=old[1] 52 if nx_prlimit(0,1,lim as *u8,0 as *u8)!=0{sys_exit(4)} 53 let failed:i64=ds_stage_core(src,"knowledge/gates/write-failure-t188.new",r) 54 gv_puts("WRITE-LIMIT result=");gv_num(failed);gv_puts(" errno=");gv_num(r.system_code);gv_puts(" owned=");gv_num(r.temp_owned);gv_puts(" cleanup=");gv_num(r.cleanup_code);gv_puts("\n") 55 if failed==(0-9)&&r.temp_owned==0&&r.visible==0&&r.cleanup_code==0 {sys_exit(0)} 56 sys_exit(5) 57 } 58 var waited:i64=0-1;if pid>0{waited=sys_wait4(pid,st,0)} 59 gv_puts("WRITE-LIMIT child exit=");gv_num(wait_exit_code(st[0]));gv_puts(" signal=");gv_num(wait_term_signal(st[0]));gv_puts("\n") 60 gv_check("real child write limit refuses and cleans owned temporary",pid>0&&waited==pid&&wait_status_rc(st[0])==0,c) 61 gv_check("same destination retries after real write failure",ds_stage_core(src,"knowledge/gates/write-failure-t188.new",r)==0,c) 62 let pid2:i64=sys_fork() 63 if pid2==0{ 64 if nx_prlimit(0,RLIMIT_AS,0 as *u8,old as *u8)!=0{sys_exit(2)} 65 lim[0]=0;lim[1]=old[1] 66 if nx_prlimit(0,RLIMIT_AS,lim as *u8,0 as *u8)!=0{sys_exit(3)} 67 let failed:i64=ds_stage_core(src,"knowledge/gates/allocation-failure-t188.new",r) 68 if failed==(0-12)&&r.visible==0{sys_exit(0)};sys_exit(4) 69 } 70 var waited2:i64=0-1;if pid2>0{waited2=sys_wait4(pid2,st,0)} 71 gv_check("real child allocation refusal is recoverable",pid2>0&&waited2==pid2&&wait_status_rc(st[0])==0,c) 72 let killed:i64=sys_fork() 73 if killed==0{if nx_signal_default(15)!=0{sys_exit(77)};nx_signal_raise(15);sys_exit(78)} 74 var killedwait:i64=0-1;if killed>0{killedwait=sys_wait4(killed,st,0)} 75 gv_check("signal-killed owned child cannot pass exit0",killed>0&&killedwait==killed&&wait_term_signal(st[0])==15&&wait_status_rc(st[0])!=0,c) 76 return gv_verdict("stage-mode",c,"Private real-ELF staging and child resource limits; no live artifacts changed") 77}