Skip to content

Commit 1b4b1d1

Browse files
authored
Merge pull request kubernetes#76966 from figo/master
Split TestLoopbackHostPort into 2 tests
2 parents a8787da + 6b73b50 commit 1b4b1d1

File tree

1 file changed

+40
-3
lines changed

1 file changed

+40
-3
lines changed

staging/src/k8s.io/apiserver/pkg/server/config_selfclient_test.go

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,15 @@ import (
2121
"testing"
2222
)
2323

24-
func TestLoopbackHostPort(t *testing.T) {
24+
func TestLoopbackHostPortIPv4(t *testing.T) {
25+
_, ipv6only, err := isIPv6LoopbackSupported()
26+
if err != nil {
27+
t.Fatalf("fail to enumerate network interface, %s", err)
28+
}
29+
if ipv6only {
30+
t.Fatalf("no ipv4 loopback interface")
31+
}
32+
2533
host, port, err := LoopbackHostPort("1.2.3.4:443")
2634
if err != nil {
2735
t.Fatalf("unexpected error: %v", err)
@@ -43,8 +51,17 @@ func TestLoopbackHostPort(t *testing.T) {
4351
if port != "443" {
4452
t.Fatalf("expected 443 as port, got %q", port)
4553
}
54+
}
55+
func TestLoopbackHostPortIPv6(t *testing.T) {
56+
ipv6, _, err := isIPv6LoopbackSupported()
57+
if err != nil {
58+
t.Fatalf("fail to enumerate network interface, %s", err)
59+
}
60+
if !ipv6 {
61+
t.Fatalf("no ipv6 loopback interface")
62+
}
4663

47-
host, port, err = LoopbackHostPort("[ff06:0:0:0:0:0:0:c3]:443")
64+
host, port, err := LoopbackHostPort("[ff06:0:0:0:0:0:0:c3]:443")
4865
if err != nil {
4966
t.Fatalf("unexpected error: %v", err)
5067
}
@@ -62,8 +79,28 @@ func TestLoopbackHostPort(t *testing.T) {
6279
if ip := net.ParseIP(host); ip == nil || !ip.IsLoopback() || ip.To4() != nil {
6380
t.Fatalf("expected IPv6 host to be loopback, got %q", host)
6481
}
65-
6682
if port != "443" {
6783
t.Fatalf("expected 443 as port, got %q", port)
6884
}
6985
}
86+
87+
func isIPv6LoopbackSupported() (ipv6 bool, ipv6only bool, err error) {
88+
addrs, err := net.InterfaceAddrs()
89+
if err != nil {
90+
return false, false, err
91+
}
92+
ipv4 := false
93+
for _, address := range addrs {
94+
ipnet, ok := address.(*net.IPNet)
95+
if !ok || !ipnet.IP.IsLoopback() {
96+
continue
97+
}
98+
if ipnet.IP.To4() == nil {
99+
ipv6 = true
100+
continue
101+
}
102+
ipv4 = true
103+
}
104+
ipv6only = ipv6 && !ipv4
105+
return ipv6, ipv6only, nil
106+
}

0 commit comments

Comments
 (0)