1- use futures:: join;
21use test_programs:: p3:: wasi:: sockets:: ip_name_lookup:: { ErrorCode , resolve_addresses} ;
32use test_programs:: p3:: wasi:: sockets:: types:: IpAddress ;
43
@@ -14,16 +13,33 @@ async fn resolve_one(name: &str) -> Result<IpAddress, ErrorCode> {
1413 . to_owned ( ) )
1514}
1615
16+ /// Attempts to resolve at least one of `domains`. Allows failure so long as one
17+ /// succeeds. Intended to help make this test less flaky while still also
18+ /// testing live services.
19+ async fn resolve_at_least_one_of ( domains : & [ & str ] ) {
20+ for domain in domains {
21+ match resolve_one ( domain) . await {
22+ Ok ( _) => return ,
23+ Err ( e) => eprintln ! ( "failed to resolve `{domain}`: {e}" ) ,
24+ }
25+ }
26+
27+ panic ! ( "should have been able to resolve at least one domain" ) ;
28+ }
29+
1730impl test_programs:: p3:: exports:: wasi:: cli:: run:: Guest for Component {
1831 async fn run ( ) -> Result < ( ) , ( ) > {
1932 // Valid domains
20- let ( res0, res1) = join ! (
21- resolve_addresses( "localhost" . into( ) ) ,
22- resolve_addresses( "example.com" . into( ) )
23- ) ;
24- if res0. is_err ( ) && res1. is_err ( ) {
25- panic ! ( "should have been able to resolve at least one domain" ) ;
26- }
33+ resolve_one ( "localhost" ) . await . unwrap ( ) ;
34+
35+ resolve_at_least_one_of ( & [
36+ "example.com" ,
37+ "api.github.com" ,
38+ "docs.wasmtime.dev" ,
39+ "bytecodealliance.org" ,
40+ "www.rust-lang.org" ,
41+ ] )
42+ . await ;
2743
2844 // NB: this is an actual real resolution, so it might time out, might cause
2945 // issues, etc. This result is ignored to prevent flaky failures in CI.
0 commit comments