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