1 use test_programs::p3::wasi::http::types::{Fields, Headers, Method, Request, Response, Scheme};
2 use test_programs::p3::{wit_future, wit_stream};
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         println!("Called _start");
11         {
12             let headers = Headers::from_list(&[(
13                 "Content-Type".to_string(),
14                 "application/json".to_string().into_bytes(),
15             )])
16             .unwrap();
17             let (mut contents_tx, contents_rx) = wit_stream::new();
18             let (_, trailers_rx) = wit_future::new(|| Ok(None));
19             let (request, _) = Request::new(headers, Some(contents_rx), trailers_rx, None);
20 
21             request.set_method(&Method::Get).expect("setting method");
22             request
23                 .set_scheme(Some(&Scheme::Https))
24                 .expect("setting scheme");
25             request
26                 .set_authority(Some("www.example.com"))
27                 .expect("setting authority");
28             drop(request);
29             let remaining = contents_tx.write_all(b"request-body".to_vec()).await;
30             assert_eq!(String::from_utf8_lossy(&remaining), "request-body");
31         }
32         {
33             let headers = Headers::from_list(&[(
34                 "Content-Type".to_string(),
35                 "application/text".to_string().into_bytes(),
36             )])
37             .unwrap();
38             let (mut contents_tx, contents_rx) = wit_stream::new();
39             let (_, trailers_rx) = wit_future::new(|| Ok(None));
40             let _ = Response::new(headers, Some(contents_rx), trailers_rx);
41             let remaining = contents_tx.write_all(b"response-body".to_vec()).await;
42             assert!(!remaining.is_empty());
43         }
44 
45         {
46             let (_, trailers_rx) = wit_future::new(|| Ok(None));
47             let (req, _) = Request::new(Fields::new(), None, trailers_rx, None);
48 
49             assert!(
50                 req.set_method(&Method::Other("invalid method".to_string()))
51                     .is_err()
52             );
53 
54             assert!(req.set_authority(Some("bad-port:99999")).is_err());
55             assert!(req.set_authority(Some("bad-\nhost")).is_err());
56             assert!(req.set_authority(Some("too-many-ports:80:80:80")).is_err());
57 
58             assert!(
59                 req.set_scheme(Some(&Scheme::Other("bad\nscheme".to_string())))
60                     .is_err()
61             );
62 
63             assert!(req.set_path_with_query(Some("/bad\npath")).is_err());
64         }
65 
66         println!("Done");
67         Ok(())
68     }
69 }
70 
main()71 fn main() {}
72