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