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}