code wiki / _hdl_build / nx_stage_canonical_gate_t188.nx
nx_stage_canonical_gate_t188.nx source
↩ module page · 77 lines · 5538 B
1// nx_stage_canonical_gate_t188.nx -- Tests gate deployment, execution, and file system interactions in the Nishi sovereign ecosystem.
2import "nx_deploy_stage_lib.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}