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}