@@ -830,9 +830,6 @@ func (f RoundTripFunc) RoundTrip(req *http.Request) (*http.Response, error) {
830
830
}
831
831
832
832
func TestNodeAddrResolve (t * testing.T ) {
833
- if runtime .GOOS == "windows" {
834
- t .Skip ("TODO(#7876): test regressed on windows while CI was broken" )
835
- }
836
833
c := & Client {
837
834
Logf : t .Logf ,
838
835
UDPBindAddr : "127.0.0.1:0" ,
@@ -852,6 +849,29 @@ func TestNodeAddrResolve(t *testing.T) {
852
849
// No IPv4 or IPv6 addrs
853
850
}
854
851
852
+ // Checks whether IPv6 and IPv6 DNS resolution works on this platform.
853
+ ipv6Works := func (t * testing.T ) bool {
854
+ // Verify that we can create an IPv6 socket.
855
+ ln , err := net .ListenPacket ("udp6" , "[::1]:0" )
856
+ if err != nil {
857
+ t .Logf ("IPv6 may not work on this machine: %v" , err )
858
+ return false
859
+ }
860
+ ln .Close ()
861
+
862
+ // Resolve a hostname that we know has an IPv6 address.
863
+ addrs , err := net .DefaultResolver .LookupNetIP (context .Background (), "ip6" , "google.com" )
864
+ if err != nil {
865
+ t .Logf ("IPv6 DNS resolution error: %v" , err )
866
+ return false
867
+ }
868
+ if len (addrs ) == 0 {
869
+ t .Logf ("IPv6 DNS resolution returned no addresses" )
870
+ return false
871
+ }
872
+ return true
873
+ }
874
+
855
875
ctx := context .Background ()
856
876
for _ , tt := range []bool {true , false } {
857
877
t .Run (fmt .Sprintf ("UseDNSCache=%v" , tt ), func (t * testing.T ) {
@@ -869,6 +889,11 @@ func TestNodeAddrResolve(t *testing.T) {
869
889
t .Logf ("got IPv4 addr: %v" , ap )
870
890
})
871
891
t .Run ("IPv6" , func (t * testing.T ) {
892
+ // Skip if IPv6 doesn't work on this machine.
893
+ if ! ipv6Works (t ) {
894
+ t .Skipf ("IPv6 may not work on this machine" )
895
+ }
896
+
872
897
ap := c .nodeAddr (ctx , dn , probeIPv6 )
873
898
if ! ap .IsValid () {
874
899
t .Fatal ("expected valid AddrPort" )
0 commit comments