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 { 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 43 fn main() {} 44