clean up LocalTrafficDetector construction / tests (#124582)
* LocalTrafficDetector construction and test improvements * Reorder getLocalDetector unit test fields so "input" args come before "output" args * Don't pass DetectLocalMode as a separate arg to getLocalDetector It's already part of `config` * Clarify test names in preparation for merging * Merge single-stack/dual-stack LocalTrafficDetector construction Also, only warn if the *primary* IP family is not correctly configured (since we don't actually know if the cluster is really dual-stack or not), and pass the pair of detectors to the proxiers as a map rather than an array. * Remove the rest of Test_getDualStackLocalDetectorTuple
This commit is contained in:
@@ -108,299 +108,292 @@ func Test_platformApplyDefaults(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func Test_getLocalDetector(t *testing.T) {
|
||||
func Test_getLocalDetectors(t *testing.T) {
|
||||
cases := []struct {
|
||||
name string
|
||||
mode proxyconfigapi.LocalMode
|
||||
config *proxyconfigapi.KubeProxyConfiguration
|
||||
family v1.IPFamily
|
||||
expected proxyutil.LocalTrafficDetector
|
||||
nodePodCIDRs []string
|
||||
name string
|
||||
config *proxyconfigapi.KubeProxyConfiguration
|
||||
primaryIPFamily v1.IPFamily
|
||||
nodePodCIDRs []string
|
||||
expected map[v1.IPFamily]proxyutil.LocalTrafficDetector
|
||||
}{
|
||||
// LocalModeClusterCIDR
|
||||
{
|
||||
name: "LocalModeClusterCIDR, IPv4 cluster",
|
||||
mode: proxyconfigapi.LocalModeClusterCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: "10.0.0.0/14"},
|
||||
family: v1.IPv4Protocol,
|
||||
expected: proxyutil.NewDetectLocalByCIDR("10.0.0.0/14"),
|
||||
name: "LocalModeClusterCIDR, single-stack IPv4 cluster",
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocalMode: proxyconfigapi.LocalModeClusterCIDR,
|
||||
ClusterCIDR: "10.0.0.0/14",
|
||||
},
|
||||
primaryIPFamily: v1.IPv4Protocol,
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewDetectLocalByCIDR("10.0.0.0/14"),
|
||||
v1.IPv6Protocol: proxyutil.NewNoOpLocalDetector(),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeClusterCIDR, IPv6 cluster",
|
||||
mode: proxyconfigapi.LocalModeClusterCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: "2002:0:0:1234::/64"},
|
||||
family: v1.IPv6Protocol,
|
||||
expected: proxyutil.NewDetectLocalByCIDR("2002:0:0:1234::/64"),
|
||||
name: "LocalModeClusterCIDR, single-stack IPv6 cluster",
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocalMode: proxyconfigapi.LocalModeClusterCIDR,
|
||||
ClusterCIDR: "2002:0:0:1234::/64",
|
||||
},
|
||||
primaryIPFamily: v1.IPv6Protocol,
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewNoOpLocalDetector(),
|
||||
v1.IPv6Protocol: proxyutil.NewDetectLocalByCIDR("2002:0:0:1234::/64"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeClusterCIDR, IPv6 cluster with IPv4 config",
|
||||
mode: proxyconfigapi.LocalModeClusterCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: "10.0.0.0/14"},
|
||||
family: v1.IPv6Protocol,
|
||||
expected: proxyutil.NewNoOpLocalDetector(),
|
||||
name: "LocalModeClusterCIDR, single-stack IPv6 cluster with single-stack IPv4 config",
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocalMode: proxyconfigapi.LocalModeClusterCIDR,
|
||||
ClusterCIDR: "10.0.0.0/14",
|
||||
},
|
||||
primaryIPFamily: v1.IPv6Protocol,
|
||||
// This will output a warning that there is no IPv6 CIDR but it
|
||||
// will still use the provided IPv4 CIDR for IPv4.
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewDetectLocalByCIDR("10.0.0.0/14"),
|
||||
v1.IPv6Protocol: proxyutil.NewNoOpLocalDetector(),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeClusterCIDR, IPv4 cluster with IPv6 config",
|
||||
mode: proxyconfigapi.LocalModeClusterCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: "2002:0:0:1234::/64"},
|
||||
family: v1.IPv4Protocol,
|
||||
expected: proxyutil.NewNoOpLocalDetector(),
|
||||
name: "LocalModeClusterCIDR, single-stack IPv4 cluster with single-stack IPv6 config",
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocalMode: proxyconfigapi.LocalModeClusterCIDR,
|
||||
ClusterCIDR: "2002:0:0:1234::/64",
|
||||
},
|
||||
primaryIPFamily: v1.IPv4Protocol,
|
||||
// This will output a warning that there is no IPv4 CIDR but it
|
||||
// will still use the provided IPv6 CIDR for IPv6.
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewNoOpLocalDetector(),
|
||||
v1.IPv6Protocol: proxyutil.NewDetectLocalByCIDR("2002:0:0:1234::/64"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeClusterCIDR, IPv4 kube-proxy in dual-stack IPv6-primary cluster",
|
||||
mode: proxyconfigapi.LocalModeClusterCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: "2002:0:0:1234::/64,10.0.0.0/14"},
|
||||
family: v1.IPv4Protocol,
|
||||
expected: proxyutil.NewDetectLocalByCIDR("10.0.0.0/14"),
|
||||
name: "LocalModeClusterCIDR, dual-stack IPv4-primary cluster",
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocalMode: proxyconfigapi.LocalModeClusterCIDR,
|
||||
ClusterCIDR: "10.0.0.0/14,2002:0:0:1234::/64",
|
||||
},
|
||||
primaryIPFamily: v1.IPv4Protocol,
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewDetectLocalByCIDR("10.0.0.0/14"),
|
||||
v1.IPv6Protocol: proxyutil.NewDetectLocalByCIDR("2002:0:0:1234::/64"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeClusterCIDR, no ClusterCIDR",
|
||||
mode: proxyconfigapi.LocalModeClusterCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: ""},
|
||||
family: v1.IPv4Protocol,
|
||||
expected: proxyutil.NewNoOpLocalDetector(),
|
||||
name: "LocalModeClusterCIDR, dual-stack IPv6-primary cluster",
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocalMode: proxyconfigapi.LocalModeClusterCIDR,
|
||||
ClusterCIDR: "2002:0:0:1234::/64,10.0.0.0/14",
|
||||
},
|
||||
primaryIPFamily: v1.IPv6Protocol,
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewDetectLocalByCIDR("10.0.0.0/14"),
|
||||
v1.IPv6Protocol: proxyutil.NewDetectLocalByCIDR("2002:0:0:1234::/64"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeClusterCIDR, IPv4-primary kube-proxy / IPv6-primary config",
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocalMode: proxyconfigapi.LocalModeClusterCIDR,
|
||||
ClusterCIDR: "2002:0:0:1234::/64,10.0.0.0/14",
|
||||
},
|
||||
primaryIPFamily: v1.IPv4Protocol,
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewDetectLocalByCIDR("10.0.0.0/14"),
|
||||
v1.IPv6Protocol: proxyutil.NewDetectLocalByCIDR("2002:0:0:1234::/64"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeClusterCIDR, no ClusterCIDR",
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocalMode: proxyconfigapi.LocalModeClusterCIDR,
|
||||
ClusterCIDR: "",
|
||||
},
|
||||
primaryIPFamily: v1.IPv4Protocol,
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewNoOpLocalDetector(),
|
||||
v1.IPv6Protocol: proxyutil.NewNoOpLocalDetector(),
|
||||
},
|
||||
},
|
||||
// LocalModeNodeCIDR
|
||||
{
|
||||
name: "LocalModeNodeCIDR, IPv4 cluster",
|
||||
mode: proxyconfigapi.LocalModeNodeCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: "10.0.0.0/14"},
|
||||
family: v1.IPv4Protocol,
|
||||
expected: proxyutil.NewDetectLocalByCIDR("10.0.0.0/24"),
|
||||
nodePodCIDRs: []string{"10.0.0.0/24"},
|
||||
name: "LocalModeNodeCIDR, single-stack IPv4 cluster",
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocalMode: proxyconfigapi.LocalModeNodeCIDR,
|
||||
ClusterCIDR: "10.0.0.0/14",
|
||||
},
|
||||
primaryIPFamily: v1.IPv4Protocol,
|
||||
nodePodCIDRs: []string{"10.0.0.0/24"},
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewDetectLocalByCIDR("10.0.0.0/24"),
|
||||
v1.IPv6Protocol: proxyutil.NewNoOpLocalDetector(),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeNodeCIDR, IPv6 cluster",
|
||||
mode: proxyconfigapi.LocalModeNodeCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: "2002:0:0:1234::/64"},
|
||||
family: v1.IPv6Protocol,
|
||||
expected: proxyutil.NewDetectLocalByCIDR("2002::1234:abcd:ffff:0:0/96"),
|
||||
nodePodCIDRs: []string{"2002::1234:abcd:ffff:0:0/96"},
|
||||
name: "LocalModeNodeCIDR, single-stack IPv6 cluster",
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocalMode: proxyconfigapi.LocalModeNodeCIDR,
|
||||
ClusterCIDR: "2002:0:0:1234::/64",
|
||||
},
|
||||
primaryIPFamily: v1.IPv6Protocol,
|
||||
nodePodCIDRs: []string{"2002::1234:abcd:ffff:0:0/96"},
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewNoOpLocalDetector(),
|
||||
v1.IPv6Protocol: proxyutil.NewDetectLocalByCIDR("2002::1234:abcd:ffff:0:0/96"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeNodeCIDR, IPv6 cluster with IPv4 config",
|
||||
mode: proxyconfigapi.LocalModeNodeCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: "10.0.0.0/14"},
|
||||
family: v1.IPv6Protocol,
|
||||
expected: proxyutil.NewNoOpLocalDetector(),
|
||||
nodePodCIDRs: []string{"10.0.0.0/24"},
|
||||
name: "LocalModeNodeCIDR, single-stack IPv6 cluster with single-stack IPv4 config",
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocalMode: proxyconfigapi.LocalModeNodeCIDR,
|
||||
ClusterCIDR: "10.0.0.0/14",
|
||||
},
|
||||
primaryIPFamily: v1.IPv6Protocol,
|
||||
nodePodCIDRs: []string{"10.0.0.0/24"},
|
||||
// This will output a warning that there is no IPv6 CIDR but it
|
||||
// will still use the provided IPv4 CIDR for IPv4.
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewDetectLocalByCIDR("10.0.0.0/24"),
|
||||
v1.IPv6Protocol: proxyutil.NewNoOpLocalDetector(),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeNodeCIDR, IPv4 cluster with IPv6 config",
|
||||
mode: proxyconfigapi.LocalModeNodeCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: "2002:0:0:1234::/64"},
|
||||
family: v1.IPv4Protocol,
|
||||
expected: proxyutil.NewNoOpLocalDetector(),
|
||||
nodePodCIDRs: []string{"2002::1234:abcd:ffff:0:0/96"},
|
||||
name: "LocalModeNodeCIDR, single-stack IPv4 cluster with single-stack IPv6 config",
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocalMode: proxyconfigapi.LocalModeNodeCIDR,
|
||||
ClusterCIDR: "2002:0:0:1234::/64",
|
||||
},
|
||||
primaryIPFamily: v1.IPv4Protocol,
|
||||
nodePodCIDRs: []string{"2002::1234:abcd:ffff:0:0/96"},
|
||||
// This will output a warning that there is no IPv4 CIDR but it
|
||||
// will still use the provided IPv6 CIDR for IPv6.
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewNoOpLocalDetector(),
|
||||
v1.IPv6Protocol: proxyutil.NewDetectLocalByCIDR("2002::1234:abcd:ffff:0:0/96"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeNodeCIDR, IPv6 kube-proxy in dual-stack IPv4-primary cluster",
|
||||
mode: proxyconfigapi.LocalModeNodeCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: "10.0.0.0/14,2002:0:0:1234::/64"},
|
||||
family: v1.IPv6Protocol,
|
||||
expected: proxyutil.NewDetectLocalByCIDR("2002::1234:abcd:ffff:0:0/96"),
|
||||
nodePodCIDRs: []string{"10.0.0.0/24", "2002::1234:abcd:ffff:0:0/96"},
|
||||
name: "LocalModeNodeCIDR, dual-stack IPv4-primary cluster",
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocalMode: proxyconfigapi.LocalModeNodeCIDR,
|
||||
ClusterCIDR: "10.0.0.0/14,2002:0:0:1234::/64",
|
||||
},
|
||||
primaryIPFamily: v1.IPv4Protocol,
|
||||
nodePodCIDRs: []string{"10.0.0.0/24", "2002::1234:abcd:ffff:0:0/96"},
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewDetectLocalByCIDR("10.0.0.0/24"),
|
||||
v1.IPv6Protocol: proxyutil.NewDetectLocalByCIDR("2002::1234:abcd:ffff:0:0/96"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeNodeCIDR, no PodCIDRs",
|
||||
mode: proxyconfigapi.LocalModeNodeCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: ""},
|
||||
family: v1.IPv4Protocol,
|
||||
expected: proxyutil.NewNoOpLocalDetector(),
|
||||
nodePodCIDRs: []string{},
|
||||
name: "LocalModeNodeCIDR, dual-stack IPv6-primary cluster",
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocalMode: proxyconfigapi.LocalModeNodeCIDR,
|
||||
ClusterCIDR: "2002:0:0:1234::/64,10.0.0.0/14",
|
||||
},
|
||||
primaryIPFamily: v1.IPv6Protocol,
|
||||
nodePodCIDRs: []string{"2002::1234:abcd:ffff:0:0/96", "10.0.0.0/24"},
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewDetectLocalByCIDR("10.0.0.0/24"),
|
||||
v1.IPv6Protocol: proxyutil.NewDetectLocalByCIDR("2002::1234:abcd:ffff:0:0/96"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeNodeCIDR, IPv6-primary kube-proxy / IPv4-primary config",
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocalMode: proxyconfigapi.LocalModeNodeCIDR,
|
||||
ClusterCIDR: "10.0.0.0/14,2002:0:0:1234::/64",
|
||||
},
|
||||
primaryIPFamily: v1.IPv6Protocol,
|
||||
nodePodCIDRs: []string{"10.0.0.0/24", "2002::1234:abcd:ffff:0:0/96"},
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewDetectLocalByCIDR("10.0.0.0/24"),
|
||||
v1.IPv6Protocol: proxyutil.NewDetectLocalByCIDR("2002::1234:abcd:ffff:0:0/96"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeNodeCIDR, no PodCIDRs",
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocalMode: proxyconfigapi.LocalModeNodeCIDR,
|
||||
ClusterCIDR: "",
|
||||
},
|
||||
primaryIPFamily: v1.IPv4Protocol,
|
||||
nodePodCIDRs: []string{},
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewNoOpLocalDetector(),
|
||||
v1.IPv6Protocol: proxyutil.NewNoOpLocalDetector(),
|
||||
},
|
||||
},
|
||||
// unknown mode
|
||||
{
|
||||
name: "unknown LocalMode",
|
||||
mode: proxyconfigapi.LocalMode("abcd"),
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: "10.0.0.0/14"},
|
||||
family: v1.IPv4Protocol,
|
||||
expected: proxyutil.NewNoOpLocalDetector(),
|
||||
},
|
||||
// LocalModeBridgeInterface
|
||||
{
|
||||
name: "LocalModeBrideInterface",
|
||||
mode: proxyconfigapi.LocalModeBridgeInterface,
|
||||
name: "unknown LocalMode",
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocal: proxyconfigapi.DetectLocalConfiguration{BridgeInterface: "eth"},
|
||||
DetectLocalMode: proxyconfigapi.LocalMode("abcd"),
|
||||
ClusterCIDR: "10.0.0.0/14",
|
||||
},
|
||||
family: v1.IPv4Protocol,
|
||||
expected: proxyutil.NewDetectLocalByBridgeInterface("eth"),
|
||||
},
|
||||
{
|
||||
name: "LocalModeBridgeInterface, strange bridge name",
|
||||
mode: proxyconfigapi.LocalModeBridgeInterface,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocal: proxyconfigapi.DetectLocalConfiguration{BridgeInterface: "1234567890123456789"},
|
||||
primaryIPFamily: v1.IPv4Protocol,
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewNoOpLocalDetector(),
|
||||
v1.IPv6Protocol: proxyutil.NewNoOpLocalDetector(),
|
||||
},
|
||||
family: v1.IPv4Protocol,
|
||||
expected: proxyutil.NewDetectLocalByBridgeInterface("1234567890123456789"),
|
||||
},
|
||||
// LocalModeInterfaceNamePrefix
|
||||
{
|
||||
name: "LocalModeInterfaceNamePrefix",
|
||||
mode: proxyconfigapi.LocalModeInterfaceNamePrefix,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocal: proxyconfigapi.DetectLocalConfiguration{InterfaceNamePrefix: "eth"},
|
||||
},
|
||||
family: v1.IPv4Protocol,
|
||||
expected: proxyutil.NewDetectLocalByInterfaceNamePrefix("eth"),
|
||||
},
|
||||
{
|
||||
name: "LocalModeInterfaceNamePrefix, strange interface name",
|
||||
mode: proxyconfigapi.LocalModeInterfaceNamePrefix,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocal: proxyconfigapi.DetectLocalConfiguration{InterfaceNamePrefix: "1234567890123456789"},
|
||||
},
|
||||
family: v1.IPv4Protocol,
|
||||
expected: proxyutil.NewDetectLocalByInterfaceNamePrefix("1234567890123456789"),
|
||||
},
|
||||
}
|
||||
for _, c := range cases {
|
||||
t.Run(c.name, func(t *testing.T) {
|
||||
logger, _ := ktesting.NewTestContext(t)
|
||||
r := getLocalDetector(logger, c.family, c.mode, c.config, c.nodePodCIDRs)
|
||||
if !reflect.DeepEqual(r, c.expected) {
|
||||
t.Errorf("Unexpected detect-local implementation, expected: %q, got: %q", c.expected, r)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func Test_getDualStackLocalDetectorTuple(t *testing.T) {
|
||||
cases := []struct {
|
||||
name string
|
||||
mode proxyconfigapi.LocalMode
|
||||
config *proxyconfigapi.KubeProxyConfiguration
|
||||
expected [2]proxyutil.LocalTrafficDetector
|
||||
nodePodCIDRs []string
|
||||
}{
|
||||
// LocalModeClusterCIDR
|
||||
{
|
||||
name: "LocalModeClusterCIDR, dual-stack IPv4-primary cluster",
|
||||
mode: proxyconfigapi.LocalModeClusterCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: "10.0.0.0/14,2002:0:0:1234::/64"},
|
||||
expected: [2]proxyutil.LocalTrafficDetector{
|
||||
proxyutil.NewDetectLocalByCIDR("10.0.0.0/14"),
|
||||
proxyutil.NewDetectLocalByCIDR("2002:0:0:1234::/64"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeClusterCIDR, dual-stack IPv6-primary cluster",
|
||||
mode: proxyconfigapi.LocalModeClusterCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: "2002:0:0:1234::/64,10.0.0.0/14"},
|
||||
expected: [2]proxyutil.LocalTrafficDetector{
|
||||
proxyutil.NewDetectLocalByCIDR("10.0.0.0/14"),
|
||||
proxyutil.NewDetectLocalByCIDR("2002:0:0:1234::/64"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeClusterCIDR, single-stack IPv4 cluster",
|
||||
mode: proxyconfigapi.LocalModeClusterCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: "10.0.0.0/14"},
|
||||
expected: [2]proxyutil.LocalTrafficDetector{
|
||||
proxyutil.NewDetectLocalByCIDR("10.0.0.0/14"),
|
||||
proxyutil.NewNoOpLocalDetector(),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeClusterCIDR, single-stack IPv6 cluster",
|
||||
mode: proxyconfigapi.LocalModeClusterCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: "2002:0:0:1234::/64"},
|
||||
expected: [2]proxyutil.LocalTrafficDetector{
|
||||
proxyutil.NewNoOpLocalDetector(),
|
||||
proxyutil.NewDetectLocalByCIDR("2002:0:0:1234::/64"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeClusterCIDR, no ClusterCIDR",
|
||||
mode: proxyconfigapi.LocalModeClusterCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: ""},
|
||||
expected: [2]proxyutil.LocalTrafficDetector{
|
||||
proxyutil.NewNoOpLocalDetector(),
|
||||
proxyutil.NewNoOpLocalDetector(),
|
||||
},
|
||||
},
|
||||
// LocalModeNodeCIDR
|
||||
{
|
||||
name: "LocalModeNodeCIDR, dual-stack IPv4-primary cluster",
|
||||
mode: proxyconfigapi.LocalModeNodeCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: "10.0.0.0/14,2002:0:0:1234::/64"},
|
||||
expected: [2]proxyutil.LocalTrafficDetector{
|
||||
proxyutil.NewDetectLocalByCIDR("10.0.0.0/24"),
|
||||
proxyutil.NewDetectLocalByCIDR("2002::1234:abcd:ffff:0:0/96"),
|
||||
},
|
||||
nodePodCIDRs: []string{"10.0.0.0/24", "2002::1234:abcd:ffff:0:0/96"},
|
||||
},
|
||||
{
|
||||
name: "LocalModeNodeCIDR, dual-stack IPv6-primary cluster",
|
||||
mode: proxyconfigapi.LocalModeNodeCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: "2002:0:0:1234::/64,10.0.0.0/14"},
|
||||
expected: [2]proxyutil.LocalTrafficDetector{
|
||||
proxyutil.NewDetectLocalByCIDR("10.0.0.0/24"),
|
||||
proxyutil.NewDetectLocalByCIDR("2002::1234:abcd:ffff:0:0/96"),
|
||||
},
|
||||
nodePodCIDRs: []string{"2002::1234:abcd:ffff:0:0/96", "10.0.0.0/24"},
|
||||
},
|
||||
{
|
||||
name: "LocalModeNodeCIDR, single-stack IPv4 cluster",
|
||||
mode: proxyconfigapi.LocalModeNodeCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: "10.0.0.0/14"},
|
||||
expected: [2]proxyutil.LocalTrafficDetector{
|
||||
proxyutil.NewDetectLocalByCIDR("10.0.0.0/24"),
|
||||
proxyutil.NewNoOpLocalDetector(),
|
||||
},
|
||||
nodePodCIDRs: []string{"10.0.0.0/24"},
|
||||
},
|
||||
{
|
||||
name: "LocalModeNodeCIDR, single-stack IPv6 cluster",
|
||||
mode: proxyconfigapi.LocalModeNodeCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: "2002:0:0:1234::/64"},
|
||||
expected: [2]proxyutil.LocalTrafficDetector{
|
||||
proxyutil.NewNoOpLocalDetector(),
|
||||
proxyutil.NewDetectLocalByCIDR("2002::1234:abcd:ffff:0:0/96"),
|
||||
},
|
||||
nodePodCIDRs: []string{"2002::1234:abcd:ffff:0:0/96"},
|
||||
},
|
||||
{
|
||||
name: "LocalModeNodeCIDR, no PodCIDRs",
|
||||
mode: proxyconfigapi.LocalModeNodeCIDR,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{ClusterCIDR: ""},
|
||||
expected: [2]proxyutil.LocalTrafficDetector{
|
||||
proxyutil.NewNoOpLocalDetector(),
|
||||
proxyutil.NewNoOpLocalDetector(),
|
||||
},
|
||||
nodePodCIDRs: []string{},
|
||||
},
|
||||
// LocalModeBridgeInterface
|
||||
{
|
||||
name: "LocalModeBridgeInterface",
|
||||
mode: proxyconfigapi.LocalModeBridgeInterface,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocal: proxyconfigapi.DetectLocalConfiguration{BridgeInterface: "eth"},
|
||||
DetectLocalMode: proxyconfigapi.LocalModeBridgeInterface,
|
||||
DetectLocal: proxyconfigapi.DetectLocalConfiguration{BridgeInterface: "eth"},
|
||||
},
|
||||
expected: [2]proxyutil.LocalTrafficDetector{
|
||||
proxyutil.NewDetectLocalByBridgeInterface("eth"),
|
||||
proxyutil.NewDetectLocalByBridgeInterface("eth"),
|
||||
primaryIPFamily: v1.IPv4Protocol,
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewDetectLocalByBridgeInterface("eth"),
|
||||
v1.IPv6Protocol: proxyutil.NewDetectLocalByBridgeInterface("eth"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeBridgeInterface, strange bridge name",
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocalMode: proxyconfigapi.LocalModeBridgeInterface,
|
||||
DetectLocal: proxyconfigapi.DetectLocalConfiguration{BridgeInterface: "1234567890123456789"},
|
||||
},
|
||||
primaryIPFamily: v1.IPv4Protocol,
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewDetectLocalByBridgeInterface("1234567890123456789"),
|
||||
v1.IPv6Protocol: proxyutil.NewDetectLocalByBridgeInterface("1234567890123456789"),
|
||||
},
|
||||
},
|
||||
// LocalModeInterfaceNamePrefix
|
||||
{
|
||||
name: "LocalModeInterfaceNamePrefix",
|
||||
mode: proxyconfigapi.LocalModeInterfaceNamePrefix,
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocal: proxyconfigapi.DetectLocalConfiguration{InterfaceNamePrefix: "veth"},
|
||||
DetectLocalMode: proxyconfigapi.LocalModeInterfaceNamePrefix,
|
||||
DetectLocal: proxyconfigapi.DetectLocalConfiguration{InterfaceNamePrefix: "eth"},
|
||||
},
|
||||
expected: [2]proxyutil.LocalTrafficDetector{
|
||||
proxyutil.NewDetectLocalByInterfaceNamePrefix("veth"),
|
||||
proxyutil.NewDetectLocalByInterfaceNamePrefix("veth"),
|
||||
primaryIPFamily: v1.IPv4Protocol,
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewDetectLocalByInterfaceNamePrefix("eth"),
|
||||
v1.IPv6Protocol: proxyutil.NewDetectLocalByInterfaceNamePrefix("eth"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "LocalModeInterfaceNamePrefix, strange interface name",
|
||||
config: &proxyconfigapi.KubeProxyConfiguration{
|
||||
DetectLocalMode: proxyconfigapi.LocalModeInterfaceNamePrefix,
|
||||
DetectLocal: proxyconfigapi.DetectLocalConfiguration{InterfaceNamePrefix: "1234567890123456789"},
|
||||
},
|
||||
primaryIPFamily: v1.IPv4Protocol,
|
||||
expected: map[v1.IPFamily]proxyutil.LocalTrafficDetector{
|
||||
v1.IPv4Protocol: proxyutil.NewDetectLocalByInterfaceNamePrefix("1234567890123456789"),
|
||||
v1.IPv6Protocol: proxyutil.NewDetectLocalByInterfaceNamePrefix("1234567890123456789"),
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, c := range cases {
|
||||
t.Run(c.name, func(t *testing.T) {
|
||||
logger, _ := ktesting.NewTestContext(t)
|
||||
r := getDualStackLocalDetectorTuple(logger, c.mode, c.config, c.nodePodCIDRs)
|
||||
r := getLocalDetectors(logger, c.primaryIPFamily, c.config, c.nodePodCIDRs)
|
||||
if !reflect.DeepEqual(r, c.expected) {
|
||||
t.Errorf("Unexpected detect-local implementation, expected: %q, got: %q", c.expected, r)
|
||||
}
|
||||
|
Reference in New Issue
Block a user