code wiki / (root) / nx_https_url_for_fetch_test.nx

nx_https_url_for_fetch_test.nx source

↩ module page · 121 lines · 5169 B

1// nx_https_url_for_fetch_test.nx -- KAT for the HTTPS URL 2// parse + scheme validate + default port primitive. 3// 4// expect_exit: 0 5// license_tier: ORIGINAL 6 7import "nx_syscalls.nx" 8import "nx_url.nx" 9import "nx_https_url_for_fetch.nx" 10 11// Write ASCII bytes from `src` (length n) into buf, NUL-terminate. 12func write_str(buf: *u8, src: *u8, n: i64) -> i64 { 13 var i: i64 = 0 14 while i < n { 15 buf[i] = src[i] 16 i = i + 1 17 } 18 buf[n] = 0 19 return n 20} 21 22func main() -> i64 { 23 let buf: *u8 = sys_mmap(128) 24 let url: *NxUrl = nx_url_new() 25 let target_raw: *u8 = sys_mmap(64) 26 let target: *NxHttpsTarget = target_raw as *NxHttpsTarget 27 target.url = url 28 target.port = 0 29 30 // ---- Test A: "https://example.com/path" -> OK, port = 443 ---- 31 let url_a: *u8 = sys_mmap(64) 32 url_a[0]=0x68; url_a[1]=0x74; url_a[2]=0x74; url_a[3]=0x70; url_a[4]=0x73 // "https" 33 url_a[5]=0x3A; url_a[6]=0x2F; url_a[7]=0x2F // "://" 34 url_a[8]=0x65; url_a[9]=0x78; url_a[10]=0x61; url_a[11]=0x6D 35 url_a[12]=0x70; url_a[13]=0x6C; url_a[14]=0x65; url_a[15]=0x2E 36 url_a[16]=0x63; url_a[17]=0x6F; url_a[18]=0x6D // "example.com" 37 url_a[19]=0x2F; url_a[20]=0x70; url_a[21]=0x61; url_a[22]=0x74; url_a[23]=0x68 // "/path" 38 url_a[24]=0 // NUL 39 let v_a: i64 = nx_https_url_for_fetch(url_a, target) 40 if v_a != NX_HTTPS_URL_OK { return 1 } 41 if target.port != 443 { return 2 } 42 if target.url.host_len != 11 { return 3 } // "example.com" 43 if target.url.path_len != 5 { return 4 } // "/path" 44 45 // ---- Test B: "https://example.com:8443/" -> OK, port = 8443 ---- 46 let url_b: *u8 = sys_mmap(64) 47 url_b[0]=0x68; url_b[1]=0x74; url_b[2]=0x74; url_b[3]=0x70; url_b[4]=0x73 // "https" 48 url_b[5]=0x3A; url_b[6]=0x2F; url_b[7]=0x2F 49 url_b[8]=0x65; url_b[9]=0x78; url_b[10]=0x61; url_b[11]=0x6D 50 url_b[12]=0x70; url_b[13]=0x6C; url_b[14]=0x65; url_b[15]=0x2E 51 url_b[16]=0x63; url_b[17]=0x6F; url_b[18]=0x6D // "example.com" 52 url_b[19]=0x3A; url_b[20]=0x38; url_b[21]=0x34; url_b[22]=0x34; url_b[23]=0x33 // ":8443" 53 url_b[24]=0x2F // "/" 54 url_b[25]=0 55 let url_b_p: *NxUrl = nx_url_new() 56 target.url = url_b_p 57 target.port = 0 58 let v_b: i64 = nx_https_url_for_fetch(url_b, target) 59 if v_b != NX_HTTPS_URL_OK { return 10 } 60 if target.port != 8443 { return 11 } 61 62 // ---- Test C: "http://example.com/" -> WRONG_SCHEME ---- 63 let url_c: *u8 = sys_mmap(64) 64 url_c[0]=0x68; url_c[1]=0x74; url_c[2]=0x74; url_c[3]=0x70 // "http" 65 url_c[4]=0x3A; url_c[5]=0x2F; url_c[6]=0x2F 66 url_c[7]=0x65; url_c[8]=0x78; url_c[9]=0x61; url_c[10]=0x6D 67 url_c[11]=0x70; url_c[12]=0x6C; url_c[13]=0x65; url_c[14]=0x2E 68 url_c[15]=0x63; url_c[16]=0x6F; url_c[17]=0x6D 69 url_c[18]=0x2F 70 url_c[19]=0 71 let url_c_p: *NxUrl = nx_url_new() 72 target.url = url_c_p 73 target.port = 0 74 let v_c: i64 = nx_https_url_for_fetch(url_c, target) 75 if v_c != NX_HTTPS_URL_WRONG_SCHEME { return 20 } 76 77 // ---- Test D: "ftp://example.com/" -> WRONG_SCHEME ---- 78 let url_d: *u8 = sys_mmap(32) 79 url_d[0]=0x66; url_d[1]=0x74; url_d[2]=0x70 // "ftp" 80 url_d[3]=0x3A; url_d[4]=0x2F; url_d[5]=0x2F 81 url_d[6]=0x65; url_d[7]=0x78; url_d[8]=0x61 82 url_d[9]=0x2F 83 url_d[10]=0 84 let url_d_p: *NxUrl = nx_url_new() 85 target.url = url_d_p 86 target.port = 0 87 if nx_https_url_for_fetch(url_d, target) != NX_HTTPS_URL_WRONG_SCHEME { return 30 } 88 89 // ---- Test E: no scheme "example.com" -> BAD_PARSE ---- 90 let url_e: *u8 = sys_mmap(32) 91 url_e[0]=0x65; url_e[1]=0x78; url_e[2]=0x61 92 url_e[3]=0 93 let url_e_p: *NxUrl = nx_url_new() 94 target.url = url_e_p 95 target.port = 0 96 if nx_https_url_for_fetch(url_e, target) != NX_HTTPS_URL_BAD_PARSE { return 40 } 97 98 // ---- Test F: case-insensitive "HTTPS://" -> OK ---- 99 let url_f: *u8 = sys_mmap(32) 100 url_f[0]=0x48; url_f[1]=0x54; url_f[2]=0x54; url_f[3]=0x50; url_f[4]=0x53 // "HTTPS" 101 url_f[5]=0x3A; url_f[6]=0x2F; url_f[7]=0x2F 102 url_f[8]=0x65; url_f[9]=0x78; url_f[10]=0x61 // "exa" 103 url_f[11]=0x2F 104 url_f[12]=0 105 let url_f_p: *NxUrl = nx_url_new() 106 target.url = url_f_p 107 target.port = 0 108 if nx_https_url_for_fetch(url_f, target) != NX_HTTPS_URL_OK { return 50 } 109 if target.port != 443 { return 51 } 110 111 // ---- Test G: verdict gate ---- 112 if nx_https_url_verdict_is_valid(NX_HTTPS_URL_OK) != 1 { return 60 } 113 if nx_https_url_verdict_is_valid(NX_HTTPS_URL_BAD_PARSE) != 1 { return 61 } 114 if nx_https_url_verdict_is_valid(NX_HTTPS_URL_WRONG_SCHEME) != 1 { return 62 } 115 if nx_https_url_verdict_is_valid(NX_HTTPS_URL_BAD_PORT) != 1 { return 63 } 116 if nx_https_url_verdict_is_valid(NX_HTTPS_URL_VERDICT_N) != 0 { return 64 } 117 if nx_https_url_verdict_is_valid(0) != 0 { return 65 } 118 if nx_https_url_verdict_is_valid(0 - 1) != 0 { return 66 } 119 120 return 0 121}