1 use anyhow::Context;
2 use std::net::SocketAddr;
3 use std::time::Duration;
4 use test_programs::p3::wasi::http::types::{ErrorCode, Method, Scheme};
5
6 struct Component;
7
8 test_programs::p3::export!(Component);
9
10 impl test_programs::p3::exports::wasi::cli::run::Guest for Component {
run() -> Result<(), ()>11 async fn run() -> Result<(), ()> {
12 // This address inside the TEST-NET-3 address block is expected to time out.
13 let addr = SocketAddr::from(([203, 0, 113, 12], 80)).to_string();
14 let timeout = Duration::from_millis(200);
15 let connect_timeout: Option<u64> = Some(timeout.as_nanos() as u64);
16 let res = test_programs::p3::http::request(
17 Method::Get,
18 Scheme::Http,
19 &addr,
20 "/get?some=arg&goes=here",
21 None,
22 None,
23 connect_timeout,
24 None,
25 None,
26 )
27 .await
28 .context("/get");
29
30 assert!(res.is_err());
31 let err = res.unwrap_err();
32 assert!(
33 matches!(
34 err.downcast_ref::<ErrorCode>(),
35 Some(ErrorCode::ConnectionTimeout | ErrorCode::ConnectionRefused)
36 ),
37 "expected connection timeout: {err:?}"
38 );
39 Ok(())
40 }
41 }
42
main()43 fn main() {}
44