From 22be97eeda9ecfd42c0326ed7548e75c25b12d7c Mon Sep 17 00:00:00 2001 From: Monis Khan Date: Thu, 29 Jul 2021 13:34:37 -0400 Subject: [PATCH] concierge_impersonation_proxy_test: check all forms of DNS Signed-off-by: Monis Khan --- .../concierge_impersonation_proxy_test.go | 50 +++++++++++++++++-- 1 file changed, 45 insertions(+), 5 deletions(-) diff --git a/test/integration/concierge_impersonation_proxy_test.go b/test/integration/concierge_impersonation_proxy_test.go index ea305aa6..5e3c368f 100644 --- a/test/integration/concierge_impersonation_proxy_test.go +++ b/test/integration/concierge_impersonation_proxy_test.go @@ -1733,14 +1733,54 @@ func TestImpersonationProxy(t *testing.T) { //nolint:gocyclo // yeah, it's compl func ensureDNSResolves(t *testing.T, urlString string) { t.Helper() + parsedURL, err := url.Parse(urlString) require.NoError(t, err) - if net.ParseIP(parsedURL.Host) == nil { - testlib.RequireEventually(t, func(requireEventually *require.Assertions) { - _, err = net.LookupIP(parsedURL.Host) - requireEventually.NoError(err) - }, 5*time.Minute, 1*time.Second) + + host := parsedURL.Hostname() + + if net.ParseIP(host) != nil { + return // ignore IPs } + + var d net.Dialer + loggingDialer := func(ctx context.Context, network, address string) (net.Conn, error) { + t.Logf("dns lookup, network=%s address=%s", network, address) + conn, connErr := d.DialContext(ctx, network, address) + if connErr != nil { + t.Logf("dns lookup, err=%v", connErr) + } else { + local := conn.LocalAddr() + remote := conn.RemoteAddr() + t.Logf("dns lookup, local conn network=%s addr=%s", local.Network(), local.String()) + t.Logf("dns lookup, remote conn network=%s addr=%s", remote.Network(), remote.String()) + } + return conn, connErr + } + + goResolver := &net.Resolver{ + PreferGo: true, + StrictErrors: true, + Dial: loggingDialer, + } + notGoResolver := &net.Resolver{ + PreferGo: false, + StrictErrors: true, + Dial: loggingDialer, + } + + testlib.RequireEventually(t, func(requireEventually *require.Assertions) { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + for _, resolver := range []*net.Resolver{goResolver, notGoResolver} { + resolver := resolver + + ips, ipErr := resolver.LookupIPAddr(ctx, host) + requireEventually.NoError(ipErr) + requireEventually.NotEmpty(ips) + } + }, 5*time.Minute, 1*time.Second) } func createTestNamespace(t *testing.T, adminClient kubernetes.Interface) string {