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