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         let addr = test_programs::p3::wasi::cli::environment::get_environment()
11*6f6a514bSRoman Volosatovs             .into_iter()
12*6f6a514bSRoman Volosatovs             .find_map(|(k, v)| k.eq("HTTP_SERVER").then_some(v))
13*6f6a514bSRoman Volosatovs             .unwrap();
14*6f6a514bSRoman Volosatovs         let res = test_programs::p3::http::request(
15*6f6a514bSRoman Volosatovs             Method::Get,
16*6f6a514bSRoman Volosatovs             Scheme::Http,
17*6f6a514bSRoman Volosatovs             &addr,
18*6f6a514bSRoman Volosatovs             "/get?some=arg&goes=here",
19*6f6a514bSRoman Volosatovs             None,
20*6f6a514bSRoman Volosatovs             None,
21*6f6a514bSRoman Volosatovs             None,
22*6f6a514bSRoman Volosatovs             None,
23*6f6a514bSRoman Volosatovs             None,
24*6f6a514bSRoman Volosatovs         )
25*6f6a514bSRoman Volosatovs         .await
26*6f6a514bSRoman Volosatovs         .context("/get")
27*6f6a514bSRoman Volosatovs         .unwrap();
28*6f6a514bSRoman Volosatovs 
29*6f6a514bSRoman Volosatovs         println!("{addr} /get: {res:?}");
30*6f6a514bSRoman Volosatovs         assert_eq!(res.status, 200);
31*6f6a514bSRoman Volosatovs         let method = res.header("x-wasmtime-test-method").unwrap();
32*6f6a514bSRoman Volosatovs         assert_eq!(std::str::from_utf8(method).unwrap(), "GET");
33*6f6a514bSRoman Volosatovs         let uri = res.header("x-wasmtime-test-uri").unwrap();
34*6f6a514bSRoman Volosatovs         assert_eq!(
35*6f6a514bSRoman Volosatovs             std::str::from_utf8(uri).unwrap(),
36*6f6a514bSRoman Volosatovs             format!("/get?some=arg&goes=here")
37*6f6a514bSRoman Volosatovs         );
38*6f6a514bSRoman Volosatovs         assert_eq!(res.body, b"");
39*6f6a514bSRoman Volosatovs         Ok(())
40*6f6a514bSRoman Volosatovs     }
41*6f6a514bSRoman Volosatovs }
42*6f6a514bSRoman Volosatovs 
main()43*6f6a514bSRoman Volosatovs fn main() {}
44