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