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