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 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 71 fn main() {} 72