code wiki / (root) / nx_pollinate_test.nx

nx_pollinate_test.nx source

↩ module page · 100 lines · 3626 B

1// nx_pollinate_test.nx -- smoke for nx_pollinate. 2 3import "nx_syscalls.nx" 4import "nx_evict_journal.nx" 5import "nx_pollinate.nx" 6 7func main() -> i64 { 8 // 1: kind enum sealed 9 if NX_PK_N_KINDS != 5 { return 1 } 10 if nx_pk_is_valid(NX_PK_ANTIBODY) != 1 { return 2 } 11 if nx_pk_is_valid(NX_PK_RECLAIM_REPORT) != 1 { return 3 } 12 if nx_pk_is_valid(-1) != 0 { return 4 } 13 if nx_pk_is_valid(5) != 0 { return 5 } 14 15 // 2: construction with consent_required=1 16 let j: *NxEvictJournal = nx_evict_journal_new(16) 17 let p: *NxPollinator = nx_pollinator_new(4, 8, 1, j) 18 if p.peer_capacity != 4 { return 6 } 19 if p.outbox_capacity != 8 { return 7 } 20 if p.consent_required != 1 { return 8 } 21 if p.n_peers != 0 { return 9 } 22 if p.n_outbox != 0 { return 10 } 23 24 // 3: add 3 peer relations 25 // peer_id=1000, initial_trust_q10=614 26 if nx_pollinate_add_peer(p, 1000, 614) != 0 { return 11 } 27 if nx_pollinate_add_peer(p, 2000, 819) != 1 { return 12 } 28 if nx_pollinate_add_peer(p, 3000, 410) != 2 { return 13 } 29 if p.n_peers != 3 { return 14 } 30 31 // 4: duplicate peer rejected 32 if nx_pollinate_add_peer(p, 1000, 614) != -1 { return 15 } 33 34 // 5: propose a payload 35 let body: *u8 = (sys_mmap(32)) as *u8 36 body[0] = 65 as u8 37 let sig: *u8 = (sys_mmap(96)) as *u8 38 sig[0] = 1 as u8 39 let pl: *NxPollinationPayload = (sys_mmap(64)) as *NxPollinationPayload 40 pl.kind = NX_PK_ANTIBODY 41 pl.originator_id = 7 42 pl.content_hash = 0xcafe 43 pl.body_ptr = body 44 pl.body_len = 32 45 pl.sig_ptr = sig 46 pl.sig_len = 96 47 pl.ts_us = 1000 48 49 let rc1: nx_int = nx_pollinate_propose(p, pl) 50 if rc1 != NX_PL_OK { return 16 } 51 if nx_pollinate_outbox_count(p) != 1 { return 17 } 52 53 // 6: bad kind rejected 54 pl.kind = 99 55 if nx_pollinate_propose(p, pl) != NX_PL_ERR_BAD_KIND { return 18 } 56 pl.kind = NX_PK_ANTIBODY 57 58 // 7: null sig rejected 59 let null_sig: *u8 = (0 as i64) as *u8 60 pl.sig_ptr = null_sig 61 if nx_pollinate_propose(p, pl) != NX_PL_ERR_BAD_SIG { return 19 } 62 pl.sig_ptr = sig 63 pl.sig_len = 0 64 if nx_pollinate_propose(p, pl) != NX_PL_ERR_BAD_SIG { return 20 } 65 pl.sig_len = 96 66 67 // 8: consent gating -- send refused when consent_required=1 68 if nx_pollinate_send(p, 1000, pl, 2000) != NX_PL_ERR_CONSENT_REQUIRED { return 21 } 69 70 // 9: operator consents on outbox slot 0 71 if nx_pollinate_consent(p, 0, 2100) != NX_PL_OK { return 22 } 72 // journal should have one entry 73 if j.count != 1 { return 23 } 74 75 // 10: pollinator with consent_required=0 (auto-share) -- send OK 76 let p2: *NxPollinator = nx_pollinator_new(4, 8, 0, j) 77 nx_pollinate_add_peer(p2, 9000, 819) 78 let rc_send: nx_int = nx_pollinate_send(p2, 9000, pl, 3000) 79 if rc_send != NX_PL_OK { return 24 } 80 if nx_pollinate_peer_share_count(p2, 9000) != 1 { return 25 } 81 82 // 11: send to unknown peer refused 83 if nx_pollinate_send(p2, 5555, pl, 3000) != NX_PL_REFUSED_BY_POLICY { return 26 } 84 85 // 12: receive from known peer increments receive_count 86 let rc_recv: nx_int = nx_pollinate_receive(p2, 9000, pl, 4000) 87 if rc_recv != NX_PL_OK { return 27 } 88 if nx_pollinate_peer_receive_count(p2, 9000) != 1 { return 28 } 89 90 // 13: receive from unknown peer refused 91 if nx_pollinate_receive(p2, 5555, pl, 4000) != NX_PL_REFUSED_BY_POLICY { return 29 } 92 93 // 14: outbox QUEUE_FULL after exhausting capacity 94 let p3: *NxPollinator = nx_pollinator_new(2, 2, 0, j) 95 nx_pollinate_propose(p3, pl) 96 nx_pollinate_propose(p3, pl) 97 if nx_pollinate_propose(p3, pl) != NX_PL_QUEUE_FULL { return 30 } 98 99 return 0 100}