nx_runsv_all_gate.nx source
↩ module page · 33 lines · 2117 B
1// nx_runsv_all_gate.nx -- proves nx_runsv_all resolves the supervision plan FROM THE REGISTRY (elf+port are data, not
2// hardcoded). The live multi-service loop reuses the already-gated rs_decide per service. license_tier: ORIGINAL
3import "nx_runsv_all.nx"
4import "nx_gate.nx"
5import "nx_gate_verdict.nx"
6
7func rag_streq(a: *u8, b: *u8) -> i64 { var i: i64=0; while a[i]!=(0 as u8) { if a[i]!=b[i] { return 0 } i=i+1 } if b[i]!=(0 as u8) { return 0 } return 1 }
8
9func main() -> i64 {
10 gw("=== nx_runsv_all_gate: multi-service resolution from the registry (s6-svscan plan) ===\n" as *u8)
11 var pass: i64=0; var tot: i64=0
12 let names: *i64=sys_mmap(32*8) as *i64; let elfs: *i64=sys_mmap(32*8) as *i64; let ports: *i64=sys_mmap(32*8) as *i64
13 let nsvc: i64 = rsa_plan(names, elfs, ports)
14
15 tot=tot+1; if nsvc>=1 { pass=pass+1; gw(" [PASS] " as *u8) } else { gw(" [FAIL] " as *u8) }
16 gw("T1 resolved >=1 service from the registry (nsvc=" as *u8); gn(nsvc); gw(")\n" as *u8)
17
18 var found: i64=0; var s: i64=0
19 while s<nsvc { if rag_streq(names[s] as *u8, "archive-server" as *u8)==1 { if rag_streq(elfs[s] as *u8, "_offc/nx_archive_server.elf" as *u8)==1 { if ports[s]==8080 { found=1 } } } s=s+1 }
20 tot=tot+1; if found==1 { pass=pass+1; gw(" [PASS] " as *u8) } else { gw(" [FAIL] " as *u8) }
21 gw("T2 archive-server resolved -> _offc/nx_archive_server.elf :8080 (elf+port pulled from DATA)\n" as *u8)
22
23 gw("\n=== nx_runsv_all_gate " as *u8); gn(pass); gw("/" as *u8); gn(tot); gw(" ===\n" as *u8)
24 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check
25 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled
26 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify.
27 let ctr__dry: *i64 = gv_ctr()
28 ctr__dry[0] = pass
29 ctr__dry[1] = tot
30 let rc__dry: i64 = gv_verdict("RUNSV-ALL-GATE" as *u8, ctr__dry, "registry-driven multi-service supervision plan (add a svcreg row -> it gets supervised, no code change)" as *u8)
31 sys_exit(rc__dry)
32 return rc__dry
33}