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