nx_trace_consent_test.nx source
↩ module page · 59 lines · 2438 B
1// nx_trace_consent_test.nx -- smoke for nx_trace_consent.
2
3import "nx_syscalls.nx"
4import "nx_trace_consent.nx"
5
6func main() -> i64 {
7 if NX_CC_N_STATES != 5 { return 1 }
8 if NX_CS_N_SCOPES != 3 { return 2 }
9 if nx_cc_decision_is_valid(NX_CC_GRANTED) != 1 { return 3 }
10 if nx_cc_decision_is_valid(5) != 0 { return 4 }
11 if nx_cs_scope_is_valid(NX_CS_BRANCH_FETCH) != 1 { return 5 }
12
13 let l: *NxConsentLedger = nx_trace_consent_new(8)
14 if l.count != 0 { return 6 }
15
16 // Default-deny: no requests means check returns DENIED
17 if nx_trace_consent_check(l, 100, 1, 2, 1000) != NX_CC_DENIED { return 7 }
18
19 // Propose
20 nx_trace_consent_propose(l, 1, 100, 1, 2, NX_CS_MERKLE_ROOT_ONLY, 1000, 10000)
21 if l.count != 1 { return 8 }
22 if nx_trace_consent_count_by_decision(l, NX_CC_PENDING) != 1 { return 9 }
23
24 // Recipient grants
25 if nx_trace_consent_decide(l, 1, NX_CC_GRANTED, 2000) != NX_TC_OK { return 10 }
26 if nx_trace_consent_count_by_decision(l, NX_CC_GRANTED) != 1 { return 11 }
27
28 // Now check returns GRANTED
29 if nx_trace_consent_check(l, 100, 1, 2, 5000) != NX_CC_GRANTED { return 12 }
30
31 // Wrong sharer or recipient -> DENIED
32 if nx_trace_consent_check(l, 100, 9, 2, 5000) != NX_CC_DENIED { return 13 }
33
34 // Past expiry: auto-transition to EXPIRED
35 if nx_trace_consent_check(l, 100, 1, 2, 99999) != NX_CC_EXPIRED { return 14 }
36
37 // Another propose + DENY
38 nx_trace_consent_propose(l, 2, 200, 1, 3, NX_CS_FULL_TRACE, 2000, 10000)
39 nx_trace_consent_decide(l, 2, NX_CC_DENIED, 3000)
40 if nx_trace_consent_check(l, 200, 1, 3, 4000) != NX_CC_DENIED { return 15 }
41
42 // Cannot re-decide PENDING after already decided
43 if nx_trace_consent_decide(l, 2, NX_CC_GRANTED, 4000) != NX_TC_ERR_NOT_PENDING { return 16 }
44
45 // Revoke after grant
46 nx_trace_consent_propose(l, 3, 300, 1, 4, NX_CS_BRANCH_FETCH, 3000, 10000)
47 nx_trace_consent_decide(l, 3, NX_CC_GRANTED, 3100)
48 nx_trace_consent_decide(l, 3, NX_CC_REVOKED, 3200)
49 if nx_trace_consent_check(l, 300, 1, 4, 4000) != NX_CC_REVOKED { return 17 }
50
51 // Cannot revoke not-granted
52 nx_trace_consent_propose(l, 4, 400, 1, 5, NX_CS_BRANCH_FETCH, 4000, 10000)
53 if nx_trace_consent_decide(l, 4, NX_CC_REVOKED, 4100) != NX_TC_ERR_NOT_PENDING { return 18 }
54
55 // Bad scope refused
56 if nx_trace_consent_propose(l, 5, 500, 1, 6, 99, 5000, 10000) != NX_TC_ERR_BAD_SCOPE { return 19 }
57
58 return 0
59}