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 {
run() -> Result<(), ()>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 
main()41 fn main() {}
42