nx_mvault_reindex_gate.nx source
↩ module page · 101 lines · 4199 B
1// nx_mvault_reindex_gate.nx -- proves the per-item migrate pipeline end-to-end
2// on synthetic items in a /tmp store: contextual classify -> content CID ->
3// dedup -> DSM dest path -> reclaim tally -> seg-store record.
4// (Build with a clean /tmp store; run-exit == 0 means GREEN.)
5
6import "nx_syscalls.nx"
7import "nx_mvault_ingest.nx"
8import "nx_mvault_context.nx"
9import "nx_mvault_reclaim.nx"
10import "nx_mvault_reindex.nx"
11
12func starts_with(s: *u8, p: *u8) -> i64 {
13 var i: i64 = 0
14 while p[i] != (0 as u8) {
15 if s[i] != p[i] { return 0 }
16 i = i + 1
17 }
18 return 1
19}
20
21func cid_ok(c: *u8) -> i64 {
22 if c[0] != (0x6E as u8) { return 0 } // n
23 if c[1] != (0x78 as u8) { return 0 } // x
24 if c[2] != (0x63 as u8) { return 0 } // c
25 if c[3] != (0x31 as u8) { return 0 } // 1
26 if c[4] != (0x2D as u8) { return 0 } // -
27 return 1
28}
29
30func main(argc: i64, argv: *i64) -> i64 {
31 var fails: i64 = 0
32 let rc: *i64 = mv_reclaim_new()
33 let sp: *u8 = "/tmp/mvault_reindex_gate-" as *u8
34 let root: *u8 = "/volume1/vault" as *u8
35 let thresh: i64 = 1073741824
36
37 let jb1: *u8 = sys_mmap(16)
38 jb1[0] = 0xFF as u8; jb1[1] = 0xD8 as u8; jb1[2] = 0xFF as u8; jb1[3] = 0xE0 as u8
39 let jb4: *u8 = sys_mmap(16)
40 jb4[0] = 0xFF as u8; jb4[1] = 0xD8 as u8; jb4[2] = 0xFF as u8; jb4[3] = 0xE1 as u8
41 let vb: *u8 = sys_mmap(16)
42 vb[0] = 0 as u8; vb[1] = 0 as u8; vb[2] = 0 as u8; vb[3] = 0x18 as u8
43 vb[4] = 0x66 as u8; vb[5] = 0x74 as u8; vb[6] = 0x79 as u8; vb[7] = 0x70 as u8
44 vb[8] = 0x69 as u8; vb[9] = 0x73 as u8; vb[10] = 0x6F as u8; vb[11] = 0x6D as u8
45 let pb: *u8 = sys_mmap(16)
46 pb[0] = 0x89 as u8; pb[1] = 0x50 as u8; pb[2] = 0x4E as u8; pb[3] = 0x47 as u8
47 pb[4] = 0x0D as u8; pb[5] = 0x0A as u8; pb[6] = 0x1A as u8; pb[7] = 0x0A as u8
48
49 let path: *u8 = sys_mmap(512)
50 let cid: *u8 = sys_mmap(80)
51
52 let src_t: *u8 = "tumblr" as *u8
53 let src_r: *u8 = "reddit" as *u8
54 let src_d: *u8 = "doujin" as *u8
55 let src_s: *u8 = "sovereign" as *u8
56 let ext_j: *u8 = "jpg" as *u8
57 let ext_m: *u8 = "mp4" as *u8
58 let ext_p: *u8 = "png" as *u8
59 let pre_ri: *u8 = "/volume1/vault/real/image/" as *u8
60 let pre_rv: *u8 = "/volume1/vault/real/video/" as *u8
61 let pre_rm: *u8 = "/volume1/vault/real/manga/" as *u8
62 let pre_gi: *u8 = "/volume1/vault/gen/image/" as *u8
63
64 // 1: real tumblr jpeg -> real/image, NEW
65 let d1: i64 = mv_reindex_one(rc, sp, root, jb1, 4, MV_CLASS_REAL, MV_CTX_NONE, src_t, ext_j, thresh, 1, path, cid)
66 if d1 != 0 { fails = fails + 1 }
67 if starts_with(path, pre_ri) != 1 { fails = fails + 1 }
68 if cid_ok(cid) != 1 { fails = fails + 1 }
69
70 // 2: SAME jpeg bytes -> DUPLICATE (dedup by content CID)
71 let d2: i64 = mv_reindex_one(rc, sp, root, jb1, 4, MV_CLASS_REAL, MV_CTX_NONE, src_t, ext_j, thresh, 1, path, cid)
72 if d2 != 1 { fails = fails + 1 }
73
74 // 3: real reddit mp4 -> real/video, NEW
75 let d3: i64 = mv_reindex_one(rc, sp, root, vb, 12, MV_CLASS_REAL, MV_CTX_NONE, src_r, ext_m, thresh, 1, path, cid)
76 if d3 != 0 { fails = fails + 1 }
77 if starts_with(path, pre_rv) != 1 { fails = fails + 1 }
78
79 // 4: jpeg bytes IN A NUMBERED SEQUENCE -> MANGA (contextual), NEW
80 let d4: i64 = mv_reindex_one(rc, sp, root, jb4, 4, MV_CLASS_REAL, MV_CTX_IMGSEQ, src_d, ext_j, thresh, 1, path, cid)
81 if d4 != 0 { fails = fails + 1 }
82 if starts_with(path, pre_rm) != 1 { fails = fails + 1 }
83
84 // 5: gen png -> gen/image, NEW
85 let d5: i64 = mv_reindex_one(rc, sp, root, pb, 8, MV_CLASS_GEN, MV_CTX_NONE, src_s, ext_p, thresh, 1, path, cid)
86 if d5 != 0 { fails = fails + 1 }
87 if starts_with(path, pre_gi) != 1 { fails = fails + 1 }
88
89 // reclaim tallies: 5 seen, 4 kept, 1 duplicate reclaimable (4 bytes)
90 if mv_reclaim_total(rc) != 5 { fails = fails + 1 }
91 if mv_reclaim_unique(rc) != 4 { fails = fails + 1 }
92 if mv_reclaim_dupcount(rc) != 1 { fails = fails + 1 }
93 if mv_reclaim_reclaimable(rc) != 4 { fails = fails + 1 }
94
95 if fails == 0 {
96 sys_write(1, "MVAULT-REINDEX-GATE GREEN pipeline\n" as *u8, 35)
97 return 0
98 }
99 sys_write(1, "MVAULT-REINDEX-GATE RED\n" as *u8, 24)
100 return 1
101}