code wiki / _hdl_build / nx_shard_view_gate.nx
nx_shard_view_gate.nx source
↩ module page · 64 lines · 4155 B
1import "nx_gate_gn.nx"
2// nx_shard_view_gate.nx -- hermetic gate for CAP-SHARD-VIEW (the /api/shards fleet serializer). Writes a fixture
3// registry, builds the JSON, and asserts the fleet is enumerated (count + both shard ids + a port), and that the
4// document is well-formed. Proves the "dashboard of all shards" content without standing up the daemon.
5// Sovereign: nx_syscalls + nx_shard_view. license_tier: ORIGINAL expect_exit: 0
6import "nx_syscalls.nx"
7import "nx_shard_view.nx"
8
9func gp(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
10func g_app(buf: *u8, off: i64, s: *u8) -> i64 { var i: i64 = 0; while s[i] != (0 as u8) { buf[off + i] = s[i]; i = i + 1 } return off + i }
11func g_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
12func g_write_file(path: *u8, buf: *u8, n: i64) -> i64 {
13 let fd: i64 = sys_openat_wr(path, 0x1a4)
14 if fd < 0 { return 0 - 1 }
15 sys_write(fd, buf, n); sys_close(fd)
16 return n
17}
18func g_shard(buf: *u8, off: i64, id: *u8, dom: *u8, svc: *u8, port: *u8, realm: *u8, keys: *u8, store: *u8, roles: *u8, health: *u8) -> i64 {
19 var o: i64 = g_app(buf, off, id); buf[o]=9 as u8; o=o+1
20 o = g_app(buf, o, dom); buf[o]=9 as u8; o=o+1
21 o = g_app(buf, o, svc); buf[o]=9 as u8; o=o+1
22 o = g_app(buf, o, port); buf[o]=9 as u8; o=o+1
23 o = g_app(buf, o, realm); buf[o]=9 as u8; o=o+1
24 o = g_app(buf, o, keys); buf[o]=9 as u8; o=o+1
25 o = g_app(buf, o, store); buf[o]=9 as u8; o=o+1
26 o = g_app(buf, o, roles); buf[o]=9 as u8; o=o+1
27 o = g_app(buf, o, health); buf[o]=10 as u8; o=o+1
28 return o
29}
30func g_contains(hay: *u8, hlen: i64, needle: *u8) -> i64 {
31 let nl: i64 = g_slen(needle); var i: i64 = 0
32 while i + nl <= hlen {
33 var j: i64 = 0; var m: i64 = 1
34 while j < nl { if hay[i+j] != needle[j] { m = 0; j = nl } else { j = j+1 } }
35 if m == 1 { return 1 }
36 i = i + 1
37 }
38 return 0
39}
40
41func main(argc: i64, argv: *i64) -> i64 {
42 gp("=== nx_shard_view_gate (fleet view: /api/shards JSON of the whole shard registry) ===\n" as *u8)
43 let reg: *u8 = sys_mmap(4096); var rn: i64 = 0
44 rn = g_shard(reg, rn, "nishifamily-mgmt" as *u8, "nishifamily.com" as *u8, "mgmt" as *u8, "18098" as *u8, "nishi_site_admin" as *u8, "k" as *u8, "s" as *u8, "/r/nf.tsv" as *u8, "api" as *u8)
45 rn = g_shard(reg, rn, "andelinwest-portal" as *u8, "andelinwest.com" as *u8, "docportal" as *u8, "18456" as *u8, "andelinwest_docportal" as *u8, "k" as *u8, "s" as *u8, "/r/adw.tsv" as *u8, "andelinwest" as *u8)
46 g_write_file("/tmp/sv_shards.conf" as *u8, reg, rn)
47
48 let out: *u8 = sys_mmap(131072)
49 let n: i64 = sv_build_shards_json("/tmp/sv_shards.conf" as *u8, out, 131072)
50 gp(" JSON: " as *u8); sys_write(1, out, n); gp("\n" as *u8)
51
52 var pass: i64 = 0; var fail: i64 = 0
53 if g_contains(out, n, "\"count\":2" as *u8) == 1 { pass=pass+1; gp(" T1 count=2 PASS\n" as *u8) } else { fail=fail+1; gp(" T1 FAIL\n" as *u8) }
54 if g_contains(out, n, "\"id\":\"nishifamily-mgmt\"" as *u8) == 1 { pass=pass+1; gp(" T2 nishifamily-mgmt present PASS\n" as *u8) } else { fail=fail+1; gp(" T2 FAIL\n" as *u8) }
55 if g_contains(out, n, "\"id\":\"andelinwest-portal\"" as *u8) == 1 { pass=pass+1; gp(" T3 andelinwest-portal present PASS\n" as *u8) } else { fail=fail+1; gp(" T3 FAIL\n" as *u8) }
56 if g_contains(out, n, "\"port\":18098" as *u8) == 1 { pass=pass+1; gp(" T4 port 18098 present PASS\n" as *u8) } else { fail=fail+1; gp(" T4 FAIL\n" as *u8) }
57 if g_contains(out, n, "\"domain\":\"andelinwest.com\"" as *u8) == 1 { pass=pass+1; gp(" T5 domain rendered PASS\n" as *u8) } else { fail=fail+1; gp(" T5 FAIL\n" as *u8) }
58 var wf: i64 = 0; if out[0] == (123 as u8) { if out[n-1] == (125 as u8) { wf = 1 } }
59 if wf == 1 { pass=pass+1; gp(" T6 well-formed ({...}) PASS\n" as *u8) } else { fail=fail+1; gp(" T6 FAIL\n" as *u8) }
60
61 gp("RESULT pass=" as *u8); gn(pass); gp(" fail=" as *u8); gn(fail)
62 if fail == 0 { gp(" verdict=GREEN\n" as *u8); sys_exit(0); return 0 }
63 gp(" verdict=RED\n" as *u8); sys_exit(1); return 1
64}