1 use anyhow::Context; 2 use test_programs::p3::wasi::http::types::{Method, Scheme}; 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 const BODY: &[u8] = b"{\"foo\": \"bar\"}"; 11 let addr = test_programs::p3::wasi::cli::environment::get_environment() 12 .into_iter() 13 .find_map(|(k, v)| k.eq("HTTP_SERVER").then_some(v)) 14 .unwrap(); 15 let res = test_programs::p3::http::request( 16 Method::Post, 17 Scheme::Http, 18 &addr, 19 "/post", 20 Some(BODY), 21 None, 22 None, 23 None, 24 None, 25 ) 26 .await 27 .context("/post") 28 .unwrap(); 29 30 println!("/post: {res:?}"); 31 assert_eq!(res.status, 200); 32 let method = res.header("x-wasmtime-test-method").unwrap(); 33 assert_eq!(std::str::from_utf8(method).unwrap(), "POST"); 34 let uri = res.header("x-wasmtime-test-uri").unwrap(); 35 assert_eq!(std::str::from_utf8(uri).unwrap(), format!("/post")); 36 assert_eq!(res.body, BODY, "invalid body returned"); 37 Ok(()) 38 } 39 } 40 41 fn main() {} 42