1 use test_programs::p3::wasi::http::types::{HeaderError, Headers, Request};
2 use test_programs::p3::wit_future;
3
4 struct Component;
5
6 test_programs::p3::export!(Component);
7
8 impl test_programs::p3::exports::wasi::cli::run::Guest for Component {
run() -> Result<(), ()>9 async fn run() -> Result<(), ()> {
10 let hdrs = Headers::new();
11 assert!(matches!(
12 hdrs.append("malformed header name", b"ok value".as_ref()),
13 Err(HeaderError::InvalidSyntax)
14 ));
15
16 assert!(matches!(
17 hdrs.append("ok-header-name", b"ok value".as_ref()),
18 Ok(())
19 ));
20
21 assert!(matches!(
22 hdrs.append("ok-header-name", b"bad\nvalue".as_ref()),
23 Err(HeaderError::InvalidSyntax)
24 ));
25
26 assert!(matches!(
27 hdrs.append("Connection", b"keep-alive".as_ref()),
28 Err(HeaderError::Forbidden)
29 ));
30
31 assert!(matches!(
32 hdrs.append("Keep-Alive", b"stuff".as_ref()),
33 Err(HeaderError::Forbidden)
34 ));
35
36 assert!(matches!(
37 hdrs.append("Host", b"example.com".as_ref()),
38 Err(HeaderError::Forbidden)
39 ));
40
41 assert!(matches!(
42 hdrs.append("custom-forbidden-header", b"keep-alive".as_ref()),
43 Err(HeaderError::Forbidden)
44 ));
45
46 assert!(matches!(
47 hdrs.append("Custom-Forbidden-Header", b"keep-alive".as_ref()),
48 Err(HeaderError::Forbidden)
49 ));
50
51 assert!(matches!(
52 Headers::from_list(&[("bad header".to_owned(), b"value".to_vec())]),
53 Err(HeaderError::InvalidSyntax)
54 ));
55
56 assert!(matches!(
57 Headers::from_list(&[("custom-forbidden-header".to_owned(), b"value".to_vec())]),
58 Err(HeaderError::Forbidden)
59 ));
60
61 assert!(matches!(
62 Headers::from_list(&[("ok-header-name".to_owned(), b"bad\nvalue".to_vec())]),
63 Err(HeaderError::InvalidSyntax)
64 ));
65
66 let (_, rx) = wit_future::new(|| Ok(None));
67 let (req, _) = Request::new(hdrs, None, rx, None);
68 let hdrs = req.get_headers();
69
70 assert!(matches!(
71 hdrs.set("Content-Length", &[b"10".to_vec()]),
72 Err(HeaderError::Immutable),
73 ));
74
75 assert!(matches!(
76 hdrs.append("Content-Length", b"10".as_ref()),
77 Err(HeaderError::Immutable),
78 ));
79
80 assert!(matches!(
81 hdrs.delete("Content-Length"),
82 Err(HeaderError::Immutable),
83 ));
84 Ok(())
85 }
86 }
87
main()88 fn main() {}
89