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 { 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 let (remaining, ()) = 29 futures::join!(contents_tx.write_all(b"request-body".to_vec()), async { 30 drop(request); 31 },); 32 assert!(!remaining.is_empty()); 33 } 34 { 35 let headers = Headers::from_list(&[( 36 "Content-Type".to_string(), 37 "application/text".to_string().into_bytes(), 38 )]) 39 .unwrap(); 40 let (mut contents_tx, contents_rx) = wit_stream::new(); 41 let (_, trailers_rx) = wit_future::new(|| Ok(None)); 42 let _ = Response::new(headers, Some(contents_rx), trailers_rx); 43 let remaining = contents_tx.write_all(b"response-body".to_vec()).await; 44 assert!(!remaining.is_empty()); 45 } 46 47 { 48 let (_, trailers_rx) = wit_future::new(|| Ok(None)); 49 let (req, _) = Request::new(Fields::new(), None, trailers_rx, None); 50 51 assert!( 52 req.set_method(&Method::Other("invalid method".to_string())) 53 .is_err() 54 ); 55 56 assert!(req.set_authority(Some("bad-port:99999")).is_err()); 57 assert!(req.set_authority(Some("bad-\nhost")).is_err()); 58 assert!(req.set_authority(Some("too-many-ports:80:80:80")).is_err()); 59 60 assert!( 61 req.set_scheme(Some(&Scheme::Other("bad\nscheme".to_string()))) 62 .is_err() 63 ); 64 65 assert!(req.set_path_with_query(Some("/bad\npath")).is_err()); 66 } 67 68 println!("Done"); 69 Ok(()) 70 } 71 } 72 73 fn main() {} 74