nx_trace_log_test.nx source
↩ module page · 56 lines · 2079 B
1// nx_trace_log_test.nx -- smoke for nx_trace_log.
2
3import "nx_syscalls.nx"
4import "nx_methyl.nx"
5import "nx_provenance_chain.nx"
6import "nx_trace_log.nx"
7
8func main() -> i64 {
9 let sig: *u8 = (sys_mmap(96)) as *u8
10 sig[0] = 1 as u8
11 let mark: *NxMethylMark = nx_methyl_new(7, 0xcafe, 1000, sig, 96)
12
13 // 1: empty log
14 let l: *NxTraceLog = nx_trace_log_new(32)
15 if l.capacity != 32 { return 1 }
16 if nx_trace_log_count(l) != 0 { return 2 }
17
18 // 2: append entries
19 nx_trace_log_append(l, 1000, 100, 0, NX_TX_CAPTURE,
20 0xaa, 0xbb, 7)
21 nx_trace_log_append(l, 1100, 100, 1, NX_TX_PREPROCESS,
22 0xcc, 0xdd, 7)
23 if nx_trace_log_count(l) != 2 { return 3 }
24 if nx_trace_log_count_for_call(l, 100) != 2 { return 4 }
25 if nx_trace_log_count_for_call(l, 9999) != 0 { return 5 }
26
27 // 3: build provenance chain and dump to log
28 let c: *NxProvenanceChain = nx_provenance_chain_new(8)
29 nx_provenance_append(c, NX_TX_ENCODE, 0x10, 0x11, 2000, 7, mark)
30 nx_provenance_append(c, NX_TX_ENCRYPT, 0x20, 0x21, 2100, 7, mark)
31 nx_provenance_append(c, NX_TX_NIC_SEND, 0x30, 0x31, 2200, 7, mark)
32
33 let l2: *NxTraceLog = nx_trace_log_new(32)
34 // call_id=200
35 if nx_trace_log_append_from_chain(l2, c, 200) != NX_TL_OK { return 6 }
36 if nx_trace_log_count(l2) != 3 { return 7 }
37 if nx_trace_log_count_for_call(l2, 200) != 3 { return 8 }
38
39 // 4: read entry
40 let e: *NxTraceEntry = nx_trace_log_entry_at(l2, 0)
41 if e.transform_id != NX_TX_ENCODE { return 9 }
42 if e.call_id != 200 { return 10 }
43 if e.entry_seq != 0 { return 11 }
44
45 // 5: out-of-range entry returns NULL
46 let none: *NxTraceEntry = nx_trace_log_entry_at(l2, 99)
47 if (none as i64) != 0 { return 12 }
48
49 // 6: FULL when capacity exhausted
50 let small: *NxTraceLog = nx_trace_log_new(2)
51 nx_trace_log_append(small, 1000, 1, 0, NX_TX_CAPTURE, 0, 0, 0)
52 nx_trace_log_append(small, 1001, 1, 1, NX_TX_PREPROCESS, 0, 0, 0)
53 if nx_trace_log_append(small, 1002, 1, 2, NX_TX_ENCODE, 0, 0, 0) != NX_TL_ERR_FULL { return 13 }
54
55 return 0
56}