From 3790290c9b48f058421126adb5c8bc78b1878ce5 Mon Sep 17 00:00:00 2001 From: Antonio Ojea Date: Thu, 7 Jan 2021 15:27:08 +0100 Subject: [PATCH] remove e2e miekg/dns dependency miekg dependency was forking some of the golang standard library. We can fork it directly into the third_party folder respecting the LICENSE. --- test/e2e/network/BUILD | 2 +- test/e2e/network/dns_common.go | 5 +- third_party/BUILD | 1 + third_party/forked/golang/net/BUILD | 28 +++++++++ third_party/forked/golang/net/dnsclient.go | 58 +++++++++++++++++++ .../forked/golang/net/dnsclient_test.go | 51 ++++++++++++++++ 6 files changed, 141 insertions(+), 4 deletions(-) create mode 100644 third_party/forked/golang/net/BUILD create mode 100644 third_party/forked/golang/net/dnsclient.go create mode 100644 third_party/forked/golang/net/dnsclient_test.go diff --git a/test/e2e/network/BUILD b/test/e2e/network/BUILD index 9d21a4e6679..95073b1eb74 100644 --- a/test/e2e/network/BUILD +++ b/test/e2e/network/BUILD @@ -91,8 +91,8 @@ go_library( "//test/e2e/storage/utils:go_default_library", "//test/utils:go_default_library", "//test/utils/image:go_default_library", + "//third_party/forked/golang/net:go_default_library", "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud:go_default_library", - "//vendor/github.com/miekg/dns:go_default_library", "//vendor/github.com/onsi/ginkgo:go_default_library", "//vendor/github.com/onsi/gomega:go_default_library", "//vendor/google.golang.org/api/compute/v1:go_default_library", diff --git a/test/e2e/network/dns_common.go b/test/e2e/network/dns_common.go index 04ba1d6dd08..6b2d8bc9842 100644 --- a/test/e2e/network/dns_common.go +++ b/test/e2e/network/dns_common.go @@ -26,8 +26,6 @@ import ( v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - dnsutil "github.com/miekg/dns" - "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/util/intstr" @@ -37,6 +35,7 @@ import ( "k8s.io/kubernetes/test/e2e/framework" e2epod "k8s.io/kubernetes/test/e2e/framework/pod" imageutils "k8s.io/kubernetes/test/utils/image" + dnsclient "k8s.io/kubernetes/third_party/forked/golang/net" "github.com/onsi/ginkgo" "github.com/onsi/gomega" @@ -430,7 +429,7 @@ func createProbeCommand(namesToResolve []string, hostEntries []string, ptrLookup fileNames = append(fileNames, podARecByTCPFileName) if len(ptrLookupIP) > 0 { - ptrLookup, err := dnsutil.ReverseAddr(ptrLookupIP) + ptrLookup, err := dnsclient.Reverseaddr(ptrLookupIP) if err != nil { framework.Failf("Unable to obtain reverse IP address record from IP %s: %v", ptrLookupIP, err) } diff --git a/third_party/BUILD b/third_party/BUILD index 2634d7ac402..2cbb04edefe 100644 --- a/third_party/BUILD +++ b/third_party/BUILD @@ -19,6 +19,7 @@ filegroup( srcs = [ ":package-srcs", "//third_party/forked/golang/expansion:all-srcs", + "//third_party/forked/golang/net:all-srcs", "//third_party/forked/golang/reflect:all-srcs", "//third_party/forked/golang/template:all-srcs", "//third_party/forked/gonum/graph:all-srcs", diff --git a/third_party/forked/golang/net/BUILD b/third_party/forked/golang/net/BUILD new file mode 100644 index 00000000000..f099de0b1ad --- /dev/null +++ b/third_party/forked/golang/net/BUILD @@ -0,0 +1,28 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = ["dnsclient.go"], + importpath = "k8s.io/kubernetes/third_party/forked/golang/net", + visibility = ["//visibility:public"], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) + +go_test( + name = "go_default_test", + srcs = ["dnsclient_test.go"], + embed = [":go_default_library"], +) diff --git a/third_party/forked/golang/net/dnsclient.go b/third_party/forked/golang/net/dnsclient.go new file mode 100644 index 00000000000..74fbbc26d72 --- /dev/null +++ b/third_party/forked/golang/net/dnsclient.go @@ -0,0 +1,58 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This package is copied from Go library net. +// https://golang.org/src/net/dnsclient.go +// The original private function reverseaddr +// is exported as public function. + +package net + +import "net" + +// Reverseaddr returns the in-addr.arpa. or ip6.arpa. hostname of the IP +// address addr suitable for rDNS (PTR) record lookup or an error if it fails +// to parse the IP address. +func Reverseaddr(addr string) (arpa string, err error) { + ip := net.ParseIP(addr) + if ip == nil { + return "", &net.DNSError{Err: "unrecognized address", Name: addr} + } + if ip.To4() != nil { + return uitoa(uint(ip[15])) + "." + uitoa(uint(ip[14])) + "." + uitoa(uint(ip[13])) + "." + uitoa(uint(ip[12])) + ".in-addr.arpa.", nil + } + // Must be IPv6 + buf := make([]byte, 0, len(ip)*4+len("ip6.arpa.")) + // Add it, in reverse, to the buffer + for i := len(ip) - 1; i >= 0; i-- { + v := ip[i] + buf = append(buf, hexDigit[v&0xF], + '.', + hexDigit[v>>4], + '.') + } + // Append "ip6.arpa." and return (buf already has the final .) + buf = append(buf, "ip6.arpa."...) + return string(buf), nil +} + +// Convert unsigned integer to decimal string. +func uitoa(val uint) string { + if val == 0 { // avoid string allocation + return "0" + } + var buf [20]byte // big enough for 64bit value base 10 + i := len(buf) - 1 + for val >= 10 { + q := val / 10 + buf[i] = byte('0' + val - q*10) + i-- + val = q + } + // val < 10 + buf[i] = byte('0' + val) + return string(buf[i:]) +} + +const hexDigit = "0123456789abcdef" diff --git a/third_party/forked/golang/net/dnsclient_test.go b/third_party/forked/golang/net/dnsclient_test.go new file mode 100644 index 00000000000..12f6290bcc4 --- /dev/null +++ b/third_party/forked/golang/net/dnsclient_test.go @@ -0,0 +1,51 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This package is copied from Go library net. +// https://golang.org/src/net/dnsclient.go +// The original private function reverseaddr +// is exported as public function. + +package net + +import ( + "net" + "testing" +) + +func TestReverseaddr(t *testing.T) { + var revAddrTests = []struct { + Addr string + Reverse string + ErrPrefix string + }{ + {"1.2.3.4", "4.3.2.1.in-addr.arpa.", ""}, + {"245.110.36.114", "114.36.110.245.in-addr.arpa.", ""}, + {"::ffff:12.34.56.78", "78.56.34.12.in-addr.arpa.", ""}, + {"::1", "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.", ""}, + {"1::", "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0.ip6.arpa.", ""}, + {"1234:567::89a:bcde", "e.d.c.b.a.9.8.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.7.6.5.0.4.3.2.1.ip6.arpa.", ""}, + {"1234:567:fefe:bcbc:adad:9e4a:89a:bcde", "e.d.c.b.a.9.8.0.a.4.e.9.d.a.d.a.c.b.c.b.e.f.e.f.7.6.5.0.4.3.2.1.ip6.arpa.", ""}, + {"1.2.3", "", "unrecognized address"}, + {"1.2.3.4.5", "", "unrecognized address"}, + {"1234:567:bcbca::89a:bcde", "", "unrecognized address"}, + {"1234:567::bcbc:adad::89a:bcde", "", "unrecognized address"}, + } + for i, tt := range revAddrTests { + a, err := Reverseaddr(tt.Addr) + if len(tt.ErrPrefix) > 0 && err == nil { + t.Errorf("#%d: expected %q, got (error)", i, tt.ErrPrefix) + continue + } + if len(tt.ErrPrefix) == 0 && err != nil { + t.Errorf("#%d: expected , got %q (error)", i, err) + } + if err != nil && err.(*net.DNSError).Err != tt.ErrPrefix { + t.Errorf("#%d: expected %q, got %q (mismatched error)", i, tt.ErrPrefix, err.(*net.DNSError).Err) + } + if a != tt.Reverse { + t.Errorf("#%d: expected %q, got %q (reverse address)", i, tt.Reverse, a) + } + } +}