nx_id_evidence_gate_t190.nx source
↩ module page · 40 lines · 2772 B
1import "nx_apistack_idempotency_candidate_t190.nx"
2import "nx_gate_verdict.nx"
3func ig_write(p:*u8,b:*u8,n:i64)->i64{
4 let fd:i64=sys_openat_wr(p,MODE_0600);if fd<0{return fd}
5 let w:i64=sys_write(fd,b,n);let c:i64=sys_close(fd)
6 if w!=n||c!=0{return FIO_EIO};return 0
7}
8func ig_eq(a:*u8,b:*u8,n:i64)->i64{var i:i64=0;while i<n{if a[i]!=b[i]{return 0};i=i+1};return 1}
9func main()->i64{
10 let c:*i64=gv_ctr()
11 let root:*u8="knowledge/gates/id-evidence-fixture-t190"
12 gv_check("fresh test directory",sys_mkdir(root,0x1c0)==0,c)
13 let p:*u8="knowledge/gates/id-evidence-fixture-t190/ledger"
14 gv_check("explicit empty ledger initialized",ig_write(p,"",0)==0,c)
15 let out:*u8=sys_mmap(3017)
16 gv_check("empty valid ledger is unseen",id_lookup(p,"alpha",5,out,8)==ID_NOT_FOUND,c)
17 gv_check("record complete result",id_record(p,"alpha",5,"rc=0",4)==1,c)
18 gv_check("exact retained result",id_lookup(p,"alpha",5,out,8)==4&&ig_eq(out,"rc=0",4)==1,c)
19 gv_check("distinct key unseen",id_lookup(p,"beta",4,out,8)==ID_NOT_FOUND,c)
20 gv_check("duplicate does not replace first evidence",id_record(p,"alpha",5,"rc=9",4)==1&&id_lookup(p,"alpha",5,out,8)==4&&ig_eq(out,"rc=0",4)==1,c)
21 let long:*u8=sys_mmap(3000);var i:i64=0;while i<3000{long[i]=65 as u8;i=i+1}
22 gv_check("long retained row stored",id_record(p,"long",4,long,3000)==1,c)
23 i=0;while i<3017{out[i]=133 as u8;i=i+1}
24 let tiny:i64=id_lookup(p,"long",4,out,8)
25 var unchanged:i64=1;i=8;while i<3017{if out[i]!=133 as u8{unchanged=0};i=i+1}
26 gv_check("short caller buffer refuses entire result",tiny==ID_CAPACITY&&out[0]==0 as u8,c)
27 gv_check("all bytes beyond caller extent untouched",unchanged==1,c)
28 gv_check("exact fitting retained result",id_lookup(p,"long",4,out,3001)==3000&&ig_eq(out,long,3000)==1&&out[3000]==0 as u8,c)
29 gv_check("zero capacity never touches output",id_lookup(p,"long",4,out,0)==ID_CAPACITY,c)
30 let bad:*u8="knowledge/gates/id-evidence-fixture-t190/truncated"
31 ig_write(bad,"key\tpartial",11)
32 gv_check("truncated ledger is not new",id_lookup(bad,"new",3,out,8)==ID_EVIDENCE_ERROR,c)
33 gv_check("append cannot heal lost evidence",id_record(bad,"new",3,"rc=0",4)==FIO_EBADMSG,c)
34 gv_check("unreadable ledger directory is not new",id_lookup(root,"new",3,out,8)==ID_EVIDENCE_ERROR,c)
35 gv_check("missing ledger needs initialization/reconciliation",id_lookup("knowledge/gates/id-evidence-fixture-t190/missing","new",3,out,8)==ID_MISSING,c)
36 gv_check("separator injection refused",id_record(p,"bad\tkey",7,"rc=0",4)==FIO_EINVAL,c)
37 ig_write(bad,"ok\tfirst\nbroken\n",16)
38 gv_check("malformed later evidence prevents false replay",id_lookup(bad,"ok",2,out,8)==ID_EVIDENCE_ERROR,c)
39 return gv_verdict("idempotency-evidence",c,"Filesystem snapshot/result bounds only; no mutation transaction or exactly-once claim")
40}