code wiki / (root) / nx_http_server_test.nx

nx_http_server_test.nx source

↩ module page · 114 lines · 4457 B

1// nx_http_server_test.nx -- structural smoke (no actual sockets). 2// 3// Exercises every public helper for the sealed-enum verdict + the 4// sockaddr builder + the verdict-name lookup. Real bind/listen/ 5// accept loopback test is bench/nx_http_server_loopback.sh. 6// 7// expect_exit: 0 8// 9// license_tier: ORIGINAL 10 11import "nx_syscalls_x86_64.nx" 12import "nx_http_server.nx" 13 14func bytes_eq(a: *u8, b: *u8, n: i64) -> i64 { 15 var i: i64 = 0 16 while i < n { 17 if a[i] != b[i] { return 0 } 18 i = i + 1 19 } 20 return 1 21} 22 23func main() -> i64 { 24 // ---- Verdict-enum validity ---- 25 if nxs_verdict_is_valid(NXS_OK) != 1 { return 1 } 26 if nxs_verdict_is_valid(NXS_BIND_ERR) != 1 { return 2 } 27 if nxs_verdict_is_valid(NXS_WRITE_ERR) != 1 { return 3 } 28 if nxs_verdict_is_valid(NXS_BAD_ARG) != 1 { return 4 } 29 if nxs_verdict_is_valid(NXS_VERDICT_N) != 0 { return 5 } 30 if nxs_verdict_is_valid(-1) != 0 { return 6 } 31 32 // ---- Verdict name lookup ---- 33 if bytes_eq(nxs_verdict_name(NXS_OK), "OK" as *u8, 2) != 1 { return 10 } 34 if bytes_eq(nxs_verdict_name(NXS_BIND_ERR), "BIND_ERR" as *u8, 8) != 1 { return 11 } 35 if bytes_eq(nxs_verdict_name(NXS_ACCEPT_ERR), "ACCEPT_ERR" as *u8, 10) != 1 { return 12 } 36 if bytes_eq(nxs_verdict_name(99), "INVALID" as *u8, 7) != 1 { return 13 } 37 38 // ---- sockaddr_in builder: loopback 127.0.0.1:8080 ---- 39 let addr: *u8 = sys_mmap(16) 40 let n: i64 = nx_http_server_addr_loopback(addr, 8080) 41 if n != 16 { return 20 } 42 // AF_INET LE = 02 00 43 if addr[0] != 2 as u8 { return 21 } 44 if addr[1] != 0 as u8 { return 22 } 45 // port 8080 = 0x1F90 BE = 0x1F, 0x90 46 if addr[2] != 0x1f as u8 { return 23 } 47 if addr[3] != 0x90 as u8 { return 24 } 48 // 127.0.0.1 49 if addr[4] != 127 as u8 { return 25 } 50 if addr[5] != 0 as u8 { return 26 } 51 if addr[6] != 0 as u8 { return 27 } 52 if addr[7] != 1 as u8 { return 28 } 53 54 // ---- sockaddr_in builder: any-addr 0.0.0.0:80 ---- 55 let addr2: *u8 = sys_mmap(16) 56 let n2: i64 = nx_http_server_addr_any(addr2, 80) 57 if n2 != 16 { return 30 } 58 // port 80 = 0x0050 BE = 0x00, 0x50 59 if addr2[2] != 0 as u8 { return 31 } 60 if addr2[3] != 0x50 as u8 { return 32 } 61 // 0.0.0.0 62 if addr2[4] != 0 as u8 { return 33 } 63 if addr2[5] != 0 as u8 { return 34 } 64 if addr2[6] != 0 as u8 { return 35 } 65 if addr2[7] != 0 as u8 { return 36 } 66 67 // ---- sockaddr_in builder: BAD_ARG on port out of range ---- 68 let addr3: *u8 = sys_mmap(16) 69 let n3: i64 = nx_http_server_addr_loopback(addr3, 99999) 70 if n3 != NXS_BAD_ARG { return 40 } 71 let n4: i64 = nx_http_server_addr_loopback(addr3, -1) 72 if n4 != NXS_BAD_ARG { return 41 } 73 let n5: i64 = nx_http_server_addr_loopback(0 as *u8, 80) 74 if n5 != NXS_BAD_ARG { return 42 } 75 76 // ---- listen helper: BAD_ARG paths (without actually binding) ---- 77 let v: *i64 = sys_mmap(8) as *i64 78 let lfd: i64 = nx_http_server_listen(0 as *u8, 5, v) 79 if lfd != -1 { return 50 } 80 if v[0] != NXS_BAD_ARG { return 51 } 81 82 let lfd2: i64 = nx_http_server_listen(addr, 0, v) 83 if lfd2 != -1 { return 52 } 84 if v[0] != NXS_BAD_ARG { return 53 } 85 86 let lfd3: i64 = nx_http_server_listen(addr, -1, v) 87 if lfd3 != -1 { return 54 } 88 if v[0] != NXS_BAD_ARG { return 55 } 89 90 // ---- accept helper: BAD_ARG on negative fd ---- 91 let cfd: i64 = nx_http_server_accept_one(-1, v) 92 if cfd != -1 { return 60 } 93 if v[0] != NXS_BAD_ARG { return 61 } 94 95 // ---- send_response: BAD_ARG paths ---- 96 let buf: *u8 = sys_mmap(64) 97 if nx_http_server_send_response(-1, buf, 10) != NXS_BAD_ARG { return 70 } 98 if nx_http_server_send_response(99, 0 as *u8, 10) != NXS_BAD_ARG { return 71 } 99 if nx_http_server_send_response(99, buf, 0) != NXS_BAD_ARG { return 72 } 100 101 // ---- read_request: BAD_ARG paths ---- 102 let req_buf: *u8 = sys_mmap(1024) 103 let om: *i64 = sys_mmap(8) as *i64 104 let opo: *i64 = sys_mmap(8) as *i64 105 let opl: *i64 = sys_mmap(8) as *i64 106 let ocl: *i64 = sys_mmap(8) as *i64 107 let obo: *i64 = sys_mmap(8) as *i64 108 let orn: *i64 = sys_mmap(8) as *i64 109 if nx_http_server_read_request(-1, req_buf, 1024, om, opo, opl, ocl, obo, orn) != NXS_BAD_ARG { return 80 } 110 if nx_http_server_read_request(5, 0 as *u8, 1024, om, opo, opl, ocl, obo, orn) != NXS_BAD_ARG { return 81 } 111 if nx_http_server_read_request(5, req_buf, 0, om, opo, opl, ocl, obo, orn) != NXS_BAD_ARG { return 82 } 112 113 return 0 114}