code wiki / (root) / nx_trace_consent_test.nx

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}