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