code wiki / (root) / nx_tracker_test.nx

nx_tracker_test.nx source

↩ module page · 45 lines · 2179 B

1// nx_tracker_test.nx -- KAT for tracker announce build + compact-peer parse. 2// Native sovereign lane; exit 0 = pass, N = assertion N failed. 3 4import "nx_str.nx" 5import "nx_tracker.nx" 6 7func main() -> i64 { 8 // --- %-encode: 'A' unreserved, 0x00 + 0xFF escaped --- 9 let ib: *u8 = sys_mmap(3) 10 ib[0] = 0x41; ib[1] = 0x00; ib[2] = 0xFF 11 let oe: *u8 = sys_mmap(16) 12 let on: i64 = nx_trk_pct_encode(ib, 3, oe) 13 if on != 7 { return 1 } // "A%00%ff" 14 if (oe[0] as i64) != 0x41 { return 2 } 15 if (oe[1] as i64) != 0x25 { return 3 } // '%' 16 if (oe[2] as i64) != 0x30 { return 4 } // '0' 17 if (oe[5] as i64) != 0x66 { return 5 } // 'f' 18 19 // --- announce path build --- 20 let ih: *u8 = sys_mmap(20) 21 let pid: *u8 = sys_mmap(20) 22 var i: i64 = 0 23 while i < 20 { ih[i] = 0xAB; pid[i] = 0x2D; i = i + 1 } // info_hash 0xAB*20; peer_id '-'*20 (unreserved) 24 let path: *u8 = sys_mmap(512) 25 nx_tracker_build_path("/announce", 9, ih, pid, 6881, 1024, path) 26 if nx_str_str(path, "/announce?info_hash=") != 0 { return 6 } 27 if nx_str_str(path, "%ab%ab") < 0 { return 7 } // escaped info_hash 28 if nx_str_str(path, "&port=6881") < 0 { return 8 } 29 if nx_str_str(path, "&left=1024") < 0 { return 9 } 30 if nx_str_str(path, "&compact=1") < 0 { return 10 } 31 32 // --- compact peer parse: d5:peers6:<127.0.0.1:6881>e (built byte-wise; embedded nulls) --- 33 let resp: *u8 = sys_mmap(64) 34 resp[0]=0x64; resp[1]=0x35; resp[2]=0x3A; resp[3]=0x70; resp[4]=0x65; resp[5]=0x65; resp[6]=0x72; resp[7]=0x73; resp[8]=0x36; resp[9]=0x3A 35 resp[10]=127; resp[11]=0; resp[12]=0; resp[13]=1; resp[14]=0x1A; resp[15]=0xE1 36 resp[16]=0x65 // 'e' 37 let ips: *i64 = sys_mmap(8 * 8) as *i64 38 let ports: *i64 = sys_mmap(8 * 8) as *i64 39 let np: i64 = nx_tracker_parse_peers(resp, 17, ips, ports, 8) 40 if np != 1 { return 11 } 41 if ips[0] != 0x7F000001 { return 12 } // 127.0.0.1 42 if ports[0] != 6881 { return 13 } // 0x1AE1 43 44 return 0 45}