]> Cypherpunks repositories - gostls13.git/commitdiff
net: make TestGoLookupIPWithResolverConfig robust
authorMikio Hara <mikioh.mikioh@gmail.com>
Wed, 24 Feb 2016 02:59:49 +0000 (11:59 +0900)
committerMikio Hara <mikioh.mikioh@gmail.com>
Thu, 25 Feb 2016 03:12:59 +0000 (03:12 +0000)
It crashes when the node under the test is shaken up.

-- FAIL: TestGoLookupIPWithResolverConfig (11.73s)
panic: interface conversion: error is nil, not *net.DNSError [recovered]
panic: interface conversion: error is nil, not *net.DNSError

goroutine 23 [running]:
panic(0x2e2620, 0xc820181440)
/go/src/runtime/panic.go:483 +0x3f3
testing.tRunner.func1(0xc820136d80)
/go/src/testing/testing.go:467 +0x192
panic(0x2e2620, 0xc820181440)
/go/src/runtime/panic.go:441 +0x4f6
net.TestGoLookupIPWithResolverConfig(0xc820136d80)
/go/src/net/dnsclient_unix_test.go:358 +0x7ca
testing.tRunner(0xc820136d80, 0x49ddc0)
/go/src/testing/testing.go:473 +0x98
created by testing.RunTests
/go/src/testing/testing.go:582 +0x892
exit status 2

Change-Id: I9631f41a3c73f3269c7e30d679c025ae64d71a98
Reviewed-on: https://go-review.googlesource.com/19870
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/net/dnsclient_unix_test.go

index 5623039b7b87dd4efb4c77c36d24293b9decfebb..4a5c438e46905845e3835c23c489a6f7eadfa6d0 100644 (file)
@@ -355,7 +355,13 @@ func TestGoLookupIPWithResolverConfig(t *testing.T) {
                }
                addrs, err := goLookupIP(tt.name)
                if err != nil {
-                       if err, ok := err.(*DNSError); !ok || (err.Name != tt.error.(*DNSError).Name || err.Server != tt.error.(*DNSError).Server || err.IsTimeout != tt.error.(*DNSError).IsTimeout) {
+                       // This test uses external network connectivity.
+                       // We need to take care with errors on both
+                       // DNS message exchange layer and DNS
+                       // transport layer because goLookupIP may fail
+                       // when the IP connectivty on node under test
+                       // gets lost during its run.
+                       if err, ok := err.(*DNSError); !ok || tt.error != nil && (err.Name != tt.error.(*DNSError).Name || err.Server != tt.error.(*DNSError).Server || err.IsTimeout != tt.error.(*DNSError).IsTimeout) {
                                t.Errorf("got %v; want %v", err, tt.error)
                        }
                        continue