Skip to content
This repository has been archived by the owner on Oct 24, 2023. It is now read-only.

Commit

Permalink
add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
aramase committed Mar 6, 2020
1 parent 7422876 commit 26d115d
Show file tree
Hide file tree
Showing 3 changed files with 178 additions and 7 deletions.
177 changes: 170 additions & 7 deletions pkg/api/addons_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3379,6 +3379,164 @@ func TestSetAddonsConfig(t *testing.T) {
},
}, "1.15.4"),
},
{
name: "addons with IPv6 single stack",
cs: &ContainerService{
Properties: &Properties{
FeatureFlags: &FeatureFlags{
EnableIPv6Only: true,
},
OrchestratorProfile: &OrchestratorProfile{
OrchestratorVersion: "1.18.0",
KubernetesConfig: &KubernetesConfig{
KubernetesImageBaseType: common.KubernetesImageBaseTypeGCR,
DNSServiceIP: DefaultKubernetesDNSServiceIPv6,
NetworkPlugin: NetworkPluginKubenet,
KubeletConfig: map[string]string{
"--cluster-domain": "cluster.local",
"--node-ip": "::",
},
ClusterSubnet: DefaultKubernetesClusterSubnetIPv6,
ProxyMode: KubeProxyModeIPTables,
APIServerConfig: map[string]string{
"--bind-address": "::",
},
ControllerManagerConfig: map[string]string{
"--bind-address": "::",
},
SchedulerConfig: map[string]string{
"--bind-address": "::",
},
},
},
},
},
isUpgrade: false,
expectedAddons: omitFromAddons([]string{common.AzureCNINetworkMonitorAddonName}, overwriteDefaultAddons([]KubernetesAddon{
{
Name: common.CoreDNSAddonName,
Enabled: to.BoolPtr(DefaultCoreDNSAddonEnabled),
Config: map[string]string{
"domain": "cluster.local",
"clusterIP": DefaultKubernetesDNSServiceIPv6,
"use-host-network": "true",
},
Containers: []KubernetesContainerSpec{
{
Name: common.CoreDNSAddonName,
Image: specConfig.KubernetesImageBase + k8sComponentsByVersionMap["1.18.0"][common.CoreDNSAddonName],
},
},
},
{
Name: common.IPMASQAgentAddonName,
Enabled: to.BoolPtr(true),
Containers: []KubernetesContainerSpec{
{
Name: common.IPMASQAgentAddonName,
CPURequests: "50m",
MemoryRequests: "50Mi",
CPULimits: "50m",
MemoryLimits: "250Mi",
Image: specConfig.KubernetesImageBase + k8sComponentsByVersionMap["1.18.0"][common.IPMASQAgentAddonName],
},
},
Config: map[string]string{
"non-masquerade-cidr": DefaultKubernetesClusterSubnetIPv6,
"enable-ipv6": "true",
"non-masq-cni-cidr": "",
"secondary-non-masquerade-cidr": "",
},
},
{
Name: common.KubeProxyAddonName,
Enabled: to.BoolPtr(DefaultKubeProxyAddonEnabled),
Config: map[string]string{
"cluster-cidr": DefaultKubernetesClusterSubnetIPv6,
"proxy-mode": string(KubeProxyModeIPTables),
"featureGates": "{}",
"bind-address": "::",
"healthz-bind-address": "::",
"metrics-bind-address": "::1",
},
Containers: []KubernetesContainerSpec{
{
Name: common.KubeProxyAddonName,
Image: specConfig.KubernetesImageBase + k8sComponentsByVersionMap["1.18.0"][common.KubeProxyAddonName],
},
},
},
}, "1.18.0", "", common.KubernetesImageBaseTypeGCR)),
},
{
name: "addons with dual stack",
cs: &ContainerService{
Properties: &Properties{
FeatureFlags: &FeatureFlags{
EnableIPv6DualStack: true,
},
OrchestratorProfile: &OrchestratorProfile{
OrchestratorVersion: "1.18.0",
KubernetesConfig: &KubernetesConfig{
KubernetesImageBaseType: common.KubernetesImageBaseTypeGCR,
DNSServiceIP: DefaultKubernetesDNSServiceIP,
NetworkPlugin: NetworkPluginKubenet,
KubeletConfig: map[string]string{
"--cluster-domain": "cluster.local",
"--feature-gates": "IPv6DualStack=true",
},
ClusterSubnet: DefaultKubernetesClusterSubnet + "," + DefaultKubernetesClusterSubnetIPv6,
ServiceCIDR: DefaultKubernetesServiceCIDR + "," + DefaultKubernetesServiceCIDRIPv6,
ProxyMode: KubeProxyModeIPVS,
APIServerConfig: map[string]string{
"--feature-gates": "IPv6DualStack=true",
},
ControllerManagerConfig: map[string]string{
"--feature-gates": "IPv6DualStack=true",
},
},
},
},
},
isUpgrade: false,
expectedAddons: omitFromAddons([]string{common.AzureCNINetworkMonitorAddonName}, overwriteDefaultAddons([]KubernetesAddon{
{
Name: common.IPMASQAgentAddonName,
Enabled: to.BoolPtr(true),
Containers: []KubernetesContainerSpec{
{
Name: common.IPMASQAgentAddonName,
CPURequests: "50m",
MemoryRequests: "50Mi",
CPULimits: "50m",
MemoryLimits: "250Mi",
Image: specConfig.KubernetesImageBase + k8sComponentsByVersionMap["1.18.0"][common.IPMASQAgentAddonName],
},
},
Config: map[string]string{
"non-masquerade-cidr": DefaultKubernetesClusterSubnet,
"enable-ipv6": "true",
"non-masq-cni-cidr": "",
"secondary-non-masquerade-cidr": DefaultKubernetesClusterSubnetIPv6,
},
},
{
Name: common.KubeProxyAddonName,
Enabled: to.BoolPtr(DefaultKubeProxyAddonEnabled),
Config: map[string]string{
"cluster-cidr": DefaultKubernetesClusterSubnet + "," + DefaultKubernetesClusterSubnetIPv6,
"proxy-mode": string(KubeProxyModeIPVS),
"featureGates": "IPv6DualStack: true",
},
Containers: []KubernetesContainerSpec{
{
Name: common.KubeProxyAddonName,
Image: specConfig.KubernetesImageBase + k8sComponentsByVersionMap["1.18.0"][common.KubeProxyAddonName],
},
},
},
}, "1.18.0", "", common.KubernetesImageBaseTypeGCR)),
},
}

for _, test := range tests {
Expand Down Expand Up @@ -3834,17 +3992,22 @@ func concatenateDefaultAddons(addons []KubernetesAddon, version string) []Kubern
}

func overwriteDefaultAddons(addons []KubernetesAddon, version, kubernetesImageBase, kubernetesImageBaseType string) []KubernetesAddon {
overrideAddons := make(map[string]KubernetesAddon)
for _, addonOverride := range addons {
overrideAddons[addonOverride.Name] = addonOverride
}

var ret []KubernetesAddon
defaults := getDefaultAddons(version, kubernetesImageBase, kubernetesImageBaseType)
for _, addonOverride := range addons {
for _, addon := range defaults {
if addon.Name == addonOverride.Name {
ret = append(ret, addonOverride)
} else {
ret = append(ret, addon)
}

for _, addon := range defaults {
if _, exists := overrideAddons[addon.Name]; exists {
ret = append(ret, overrideAddons[addon.Name])
continue
}
ret = append(ret, addon)
}

return ret
}

Expand Down
5 changes: 5 additions & 0 deletions pkg/api/vlabs/validate.go
Original file line number Diff line number Diff line change
Expand Up @@ -1237,6 +1237,11 @@ func (k *KubernetesConfig) Validate(k8sVersion string, hasWindows, ipv6DualStack
// number of minimum retries allowed for kubelet to post node status
const minKubeletRetries = 4

// enableIPv6DualStack and enableIPv6Only are mutually exclusive feature flags
if ipv6DualStackEnabled && isIPv6 {
return errors.Errorf("featureFlags.EnableIPv6DualStack and featureFlags.EnableIPv6Only can't be enabled at the same time.")
}

if ipv6DualStackEnabled {
sv, err := semver.Make(k8sVersion)
if err != nil {
Expand Down
3 changes: 3 additions & 0 deletions pkg/api/vlabs/validate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -654,6 +654,9 @@ func Test_KubernetesConfig_Validate(t *testing.T) {
if err := c.Validate(k8sVersion, false, false, true); err == nil {
t.Error("should error when network plugin is not kubenet for single stack IPv6")
}
if err := c.Validate(k8sVersion, false, true, true); err == nil {
t.Error("should error when dual stack and single stack IPv6 enabled simultaneously")
}
}
}

Expand Down

0 comments on commit 26d115d

Please sign in to comment.