nx_printers_render_test.nx source
↩ module page · 74 lines · 3424 B
1// nx_printers_render_test.nx -- offline gate for the /printers HTML renderer.
2// Feeds a synthetic Brother-like response (stopped + exposed + toner-empty + duplex-waste) and asserts the
3// emitted HTML surfaces every hidden truth. Unique exit codes per missing marker.
4// expect_exit: 0 license_tier: ORIGINAL
5
6import "nx_syscalls.nx"
7import "nx_ipp_codec.nx"
8import "nx_printers_render.nx"
9
10func t_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
11
12// substring search: 1 if pat occurs in buf[0..len)
13func contains(buf: *u8, len: i64, pat: *u8) -> i64 {
14 var pl: i64 = 0
15 while pat[pl] != (0 as u8) { pl = pl + 1 }
16 if pl == 0 { return 1 }
17 if pl > len { return 0 }
18 var i: i64 = 0
19 let end: i64 = len - pl + 1
20 var hit: i64 = 0
21 while i < end {
22 if hit == 0 {
23 var j: i64 = 0
24 var ok: i64 = 1
25 while j < pl {
26 if (buf[i + j] as i64) != (pat[j] as i64) { ok = 0; j = pl }
27 else { j = j + 1 }
28 }
29 if ok == 1 { hit = 1 }
30 }
31 i = i + 1
32 }
33 return hit
34}
35
36func main() -> i64 {
37 let buf: *u8 = sys_mmap(4096)
38 var o: i64 = nx_ipp_begin(buf, 1, 1, NX_IPP_STATUS_OK, 1)
39 o = nx_ipp_group(buf, o, NX_IPP_GRP_PRINTER)
40 o = nx_ipp_attr(buf, o, NX_IPP_VT_TEXT, "printer-make-and-model", 22, "Brother DCP-L2540DW series", 26)
41 o = nx_ipp_attr_int(buf, o, NX_IPP_VT_ENUM, "printer-state", 13, NX_IPP_PSTATE_STOPPED)
42 o = nx_ipp_attr(buf, o, NX_IPP_VT_KEYWORD, "printer-state-reasons", 21, "media-empty", 11)
43 o = nx_ipp_attr_add(buf, o, NX_IPP_VT_KEYWORD, "toner-low-warning", 17)
44 o = nx_ipp_attr_bool(buf, o, "printer-is-accepting-jobs", 25, 1)
45 o = nx_ipp_attr(buf, o, NX_IPP_VT_KEYWORD, "uri-security-supported", 22, "none", 4)
46 o = nx_ipp_attr(buf, o, NX_IPP_VT_KEYWORD, "uri-authentication-supported", 28, "none", 4)
47 o = nx_ipp_attr_int(buf, o, NX_IPP_VT_INTEGER, "marker-levels", 13, 0)
48 o = nx_ipp_attr_int(buf, o, NX_IPP_VT_INTEGER, "marker-low-levels", 17, 10)
49 o = nx_ipp_attr_int(buf, o, NX_IPP_VT_INTEGER, "marker-high-levels", 18, 100)
50 o = nx_ipp_attr(buf, o, NX_IPP_VT_KEYWORD, "sides-supported", 15, "one-sided", 9)
51 o = nx_ipp_attr_add(buf, o, NX_IPP_VT_KEYWORD, "two-sided-long-edge", 19)
52 o = nx_ipp_attr(buf, o, NX_IPP_VT_KEYWORD, "sides-default", 13, "one-sided", 9)
53 o = nx_ipp_end(buf, o)
54
55 let html: *u8 = sys_mmap(16384)
56 let sc: *i64 = sys_mmap(128) as *i64
57 let hlen: i64 = nx_printers_render(html, buf, o, sc, 9991, 1198)
58 if hlen <= 0 { return 90 }
59
60 if contains(html, hlen, "Brother DCP-L2540DW") != 1 { return 91 }
61 if contains(html, hlen, "BLOCKED") != 1 { return 92 }
62 if contains(html, hlen, "media-empty") != 1 { return 93 }
63 if contains(html, hlen, "EXPOSED") != 1 { return 94 }
64 if contains(html, hlen, "EMPTY") != 1 { return 95 }
65 if contains(html, hlen, "Paper waste") != 1 { return 96 }
66 if contains(html, hlen, "CVE-2024-47176") != 1 { return 97 }
67 if contains(html, hlen, "Real toner") != 1 { return 99 }
68 if contains(html, hlen, "99.91%") != 1 { return 100 }
69 // well-formed-ish: ends with </html>
70 if contains(html, hlen, "</html>") != 1 { return 98 }
71
72 t_puts("nx_printers_render: PASS (HTML surfaces model + BLOCKED + media-empty + EXPOSED + toner EMPTY + paper waste + CVE)\n")
73 return 0
74}