nx_pub_release_gate.nx source
↩ module page · 54 lines · 3893 B
1// Release registration qualification against real local store files.
2import "nx_pub_release_lib.nx"
3import "nx_gate_verdict.nx"
4
5const RG_HASH_A: *u8 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" as *u8
6const RG_HASH_B: *u8 = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" as *u8
7
8func rg_seed(prefix: *u8) -> i64 {
9 let w: *i64 = ss_begin_cap(64)
10 if ss_add(w,1,"q:n" as *u8,"0" as *u8,1) < 0 { return 4 }
11 return ss_commit(prefix,w,ss_next_segid(prefix))
12}
13func main(argc: i64, argv: *i64) -> i64 {
14 if argc != 2 { return 2 }
15 if sys_mkdir(argv[1] as *u8,0x1ed) != 0 { return 2 }
16 if sys_chdir(argv[1] as *u8) != 0 { return 2 }
17 let pass: *i64 = gv_ctr()
18 let plan: *i64 = gv_plan_new("existing-plane-created\nregister-creates\nregister-appends-one-segment\nregistered-identity-found\nretry-succeeds\nretry-does-not-write\nconflicting-hash-refused\nconflict-does-not-write\nlive-path-refused\npath-alias-refused\npublisher-dot-rule-matches\nshort-hash-refused\nmissing-plane-refused\nlegacy-count-unchanged\nfixture-hides-newest-docs\nfixture-hides-newest-index\ndamaged-store-refuses-registration\ndamaged-store-does-not-write\n" as *u8)
19 let prefix: *u8 = "pub-" as *u8
20 gv_plan_check(plan,"existing-plane-created",rg_seed(prefix) == 0,pass)
21 let initial: i64 = ss_max_segid(prefix)
22 gv_plan_check(plan,"register-creates",pr_register(prefix,"releases/a.html" as *u8,RG_HASH_A) == PR_CREATED,pass)
23 let registered: i64 = ss_max_segid(prefix)
24 gv_plan_check(plan,"register-appends-one-segment",registered == initial+1,pass)
25 gv_plan_check(plan,"registered-identity-found",pr_check(prefix,"releases/a.html" as *u8,RG_HASH_A) == PR_OK,pass)
26 gv_plan_check(plan,"retry-succeeds",pr_register(prefix,"releases/a.html" as *u8,RG_HASH_A) == PR_OK,pass)
27 gv_plan_check(plan,"retry-does-not-write",ss_max_segid(prefix) == registered,pass)
28 gv_plan_check(plan,"conflicting-hash-refused",pr_register(prefix,"releases/a.html" as *u8,RG_HASH_B) == PR_CONFLICT,pass)
29 gv_plan_check(plan,"conflict-does-not-write",ss_max_segid(prefix) == registered,pass)
30 gv_plan_check(plan,"live-path-refused",pr_register(prefix,"world/beach.html" as *u8,RG_HASH_A) == PR_INVALID,pass)
31 gv_plan_check(plan,"path-alias-refused",pr_register(prefix,"releases/../a.html" as *u8,RG_HASH_A) == PR_INVALID,pass)
32 gv_plan_check(plan,"publisher-dot-rule-matches",pr_path_ok("releases/a..html" as *u8) == 0,pass)
33 gv_plan_check(plan,"short-hash-refused",pr_register(prefix,"releases/b.html" as *u8,"aa" as *u8) == PR_INVALID,pass)
34 gv_plan_check(plan,"missing-plane-refused",pr_register("absent-" as *u8,"releases/a.html" as *u8,RG_HASH_A) == PR_IO,pass)
35 let p: *i64 = sys_mmap(16) as *i64
36 let n: *i64 = sys_mmap(16) as *i64
37 var preserved: i64 = 0
38 if ss_get_idx(prefix,"q:n" as *u8,p,n) == 1 {
39 preserved = pr_same(p[0] as *u8,n[0],"0" as *u8,1)
40 }
41 gv_plan_check(plan,"legacy-count-unchanged",preserved,pass)
42 // Simulate unavailable newest segment without deleting anything; preserve it for diagnosis.
43 let docs: *u8 = sys_mmap(512)
44 let keys: *u8 = sys_mmap(512)
45 ss_auxname(prefix,registered,".docs" as *u8,0,docs)
46 ss_auxname(prefix,registered,".idx" as *u8,0,keys)
47 gv_plan_check(plan,"fixture-hides-newest-docs",sys_renameat(docs,"held.docs" as *u8) == 0,pass)
48 gv_plan_check(plan,"fixture-hides-newest-index",sys_renameat(keys,"held.keys" as *u8) == 0,pass)
49 let damaged: i64 = pr_register(prefix,"releases/a.html" as *u8,RG_HASH_B)
50 gv_plan_check(plan,"damaged-store-refuses-registration",damaged == PR_IO,pass)
51 gv_plan_check(plan,"damaged-store-does-not-write",ss_max_segid(prefix) == registered,pass)
52 gv_plan_finish(plan,pass)
53 return gv_verdict("nx_pub_release_gate" as *u8,pass,"Local isolated store; no production changes." as *u8)
54}