code wiki / (root) / nx_trace_log_test.nx

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}