nx_job_put_error_gate.nx source
↩ module page · 38 lines · 2572 B
1import "nx_tools_api.nx"
2import "nx_gate_verdict.nx"
3func jpg_equal(path: *u8, expected: *u8, n: i64) -> i64 {
4 let lp: *i64 = sys_mmap(16) as *i64
5 let actual: *u8 = sys_read_file(path, lp)
6 if (actual as i64) == 0 { return 0 }
7 if lp[0] != n { return 0 }
8 var i: i64 = 0
9 while i < n { if actual[i] != expected[i] { return 0 } i = i + 1 }
10 return 1
11}
12func main(argc: i64, argv: *i64) -> i64 {
13 let ctr: *i64 = gv_ctr()
14 gv_head("nx_job_put_error_gate")
15 // Dedicated scratch fixtures: this gate must be serialized.
16 let out: *u8 = "/tmp/nishi_job_put_20260909.fixture"
17 let temp: *u8 = "/tmp/nishi_job_put_20260909.marker"
18 let claim: *u8 = "/tmp/nishi_job_put_20260909.claim"
19 let content: *u8 = "receipt-test"
20 let marker: *u8 = "state=DONE"
21 let pending: *u8 = "CLAIMED"
22 gv_check("regular write succeeds", (ta_job_put(out, content, 12) == 0) as i64, ctr)
23 gv_check("regular readback matches payload", jpg_equal(out, content, 12), ctr)
24 gv_check("full-device write error propagated", (ta_job_put("/dev/full", content, 12) < 0) as i64, ctr)
25 gv_check("invalid path error propagated", (ta_job_put("/dev/null/not-a-directory", content, 12) < 0) as i64, ctr)
26 gv_check("negative length rejected", (ta_job_put(out, content, 0 - 1) < 0) as i64, ctr)
27 gv_check("claim fixture initialized", (ta_job_put(claim, pending, 7) == 0) as i64, ctr)
28 gv_check("output failure rejects publication", (ta_job_publish("/dev/full", content, 12, temp, marker, 10, claim) < 0) as i64, ctr)
29 gv_check("output failure retains unresolved claim", jpg_equal(claim, pending, 7), ctr)
30 gv_check("marker failure rejects publication", (ta_job_publish(out, content, 12, "/dev/full", marker, 10, claim) < 0) as i64, ctr)
31 gv_check("marker failure retains unresolved claim", jpg_equal(claim, pending, 7), ctr)
32 gv_check("rename failure rejects publication", (ta_job_publish(out, content, 12, temp, marker, 10, "/dev/null/not-a-directory") < 0) as i64, ctr)
33 gv_check("rename failure retains staged marker", jpg_equal(temp, marker, 10), ctr)
34 gv_check("complete publication succeeds", (ta_job_publish(out, content, 12, temp, marker, 10, claim) == 0) as i64, ctr)
35 gv_check("published output matches payload", jpg_equal(out, content, 12), ctr)
36 gv_check("published completion marker matches", jpg_equal(claim, marker, 10), ctr)
37 return gv_verdict("nx_job_put_error_gate", ctr, "real filesystem publication ordering and kernel failure paths; crash durability and abandoned-claim recovery remain unverified")
38}