remove test files
parent
0a27ee5d73
commit
0d4b61ea24
|
@ -1,13 +1,15 @@
|
|||
maintaining a fork of kubernetes constants to avoid depending on k8s.io/kubernetes/ as a lib
|
||||
how to update this fork
|
||||
|
||||
# clone kuberentes
|
||||
|
||||
# pick latest stable version
|
||||
$ git reset --hard v1.22.4
|
||||
# clone latest stable version
|
||||
|
||||
# cd into minikube
|
||||
|
||||
$ mkdir -p ./third_party/kubeadm/app/
|
||||
$ cp -r ../kubernetes/cmd/kubeadm/app/features ./third_party/kubeadm/app/
|
||||
$ cp -r ../kubernetes/cmd/kubeadm/app/constants ./third_party/kubeadm/app/
|
||||
```
|
||||
git clone --depth 1 --branch v1.22.4 git@github.com:kubernetes/kubernetes.git ./out/kubernetes
|
||||
rm -rf ./third_party/kubeadm || true
|
||||
mkdir -p ./third_party/kubeadm/app/
|
||||
cp -r ./out/kubernetes/cmd/kubeadm/app/features ./third_party/kubeadm/app/
|
||||
cp -r ./out/kubernetes/cmd/kubeadm/app/constants ./third_party/kubeadm/app/
|
||||
rm ./third_party/kubeadm/app/features/*_test.go || true
|
||||
rm ./third_party/kubeadm/app/constants/*_test.go || true
|
||||
```
|
|
@ -1,239 +0,0 @@
|
|||
/*
|
||||
Copyright 2017 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package constants
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"k8s.io/apimachinery/pkg/util/version"
|
||||
)
|
||||
|
||||
func TestGetStaticPodDirectory(t *testing.T) {
|
||||
expected := "/etc/kubernetes/manifests"
|
||||
actual := GetStaticPodDirectory()
|
||||
|
||||
if actual != expected {
|
||||
t.Errorf(
|
||||
"failed GetStaticPodDirectory:\n\texpected: %s\n\t actual: %s",
|
||||
expected,
|
||||
actual,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetAdminKubeConfigPath(t *testing.T) {
|
||||
expected := filepath.Join(KubernetesDir, AdminKubeConfigFileName)
|
||||
actual := GetAdminKubeConfigPath()
|
||||
|
||||
if actual != expected {
|
||||
t.Errorf(
|
||||
"failed GetAdminKubeConfigPath:\n\texpected: %s\n\t actual: %s",
|
||||
expected,
|
||||
actual,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetBootstrapKubeletKubeConfigPath(t *testing.T) {
|
||||
expected := "/etc/kubernetes/bootstrap-kubelet.conf"
|
||||
actual := GetBootstrapKubeletKubeConfigPath()
|
||||
|
||||
if actual != expected {
|
||||
t.Errorf(
|
||||
"failed GetBootstrapKubeletKubeConfigPath:\n\texpected: %s\n\t actual: %s",
|
||||
expected,
|
||||
actual,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetKubeletKubeConfigPath(t *testing.T) {
|
||||
expected := "/etc/kubernetes/kubelet.conf"
|
||||
actual := GetKubeletKubeConfigPath()
|
||||
|
||||
if actual != expected {
|
||||
t.Errorf(
|
||||
"failed GetKubeletKubeConfigPath:\n\texpected: %s\n\t actual: %s",
|
||||
expected,
|
||||
actual,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetStaticPodFilepath(t *testing.T) {
|
||||
var tests = []struct {
|
||||
componentName, manifestsDir, expected string
|
||||
}{
|
||||
{
|
||||
componentName: "kube-apiserver",
|
||||
manifestsDir: "/etc/kubernetes/manifests",
|
||||
expected: "/etc/kubernetes/manifests/kube-apiserver.yaml",
|
||||
},
|
||||
{
|
||||
componentName: "kube-controller-manager",
|
||||
manifestsDir: "/etc/kubernetes/manifests/",
|
||||
expected: "/etc/kubernetes/manifests/kube-controller-manager.yaml",
|
||||
},
|
||||
{
|
||||
componentName: "foo",
|
||||
manifestsDir: "/etc/bar/",
|
||||
expected: "/etc/bar/foo.yaml",
|
||||
},
|
||||
}
|
||||
for _, rt := range tests {
|
||||
t.Run(rt.componentName, func(t *testing.T) {
|
||||
actual := GetStaticPodFilepath(rt.componentName, rt.manifestsDir)
|
||||
if actual != rt.expected {
|
||||
t.Errorf(
|
||||
"failed GetStaticPodFilepath:\n\texpected: %s\n\t actual: %s",
|
||||
rt.expected,
|
||||
actual,
|
||||
)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestEtcdSupportedVersion(t *testing.T) {
|
||||
var supportedEtcdVersion = map[uint8]string{
|
||||
13: "3.2.24",
|
||||
14: "3.3.10",
|
||||
15: "3.3.10",
|
||||
16: "3.3.17-0",
|
||||
17: "3.4.3-0",
|
||||
18: "3.4.3-0",
|
||||
}
|
||||
var tests = []struct {
|
||||
kubernetesVersion string
|
||||
expectedVersion *version.Version
|
||||
expectedWarning bool
|
||||
expectedError bool
|
||||
}{
|
||||
{
|
||||
kubernetesVersion: "1.x.1",
|
||||
expectedVersion: nil,
|
||||
expectedWarning: false,
|
||||
expectedError: true,
|
||||
},
|
||||
{
|
||||
kubernetesVersion: "1.10.1",
|
||||
expectedVersion: version.MustParseSemantic("3.2.24"),
|
||||
expectedWarning: true,
|
||||
expectedError: false,
|
||||
},
|
||||
{
|
||||
kubernetesVersion: "1.99.0",
|
||||
expectedVersion: version.MustParseSemantic("3.4.3-0"),
|
||||
expectedWarning: true,
|
||||
expectedError: false,
|
||||
},
|
||||
{
|
||||
kubernetesVersion: "v1.16.0",
|
||||
expectedVersion: version.MustParseSemantic("3.3.17-0"),
|
||||
expectedWarning: false,
|
||||
expectedError: false,
|
||||
},
|
||||
{
|
||||
kubernetesVersion: "1.17.2",
|
||||
expectedVersion: version.MustParseSemantic("3.4.3-0"),
|
||||
expectedWarning: false,
|
||||
expectedError: false,
|
||||
},
|
||||
}
|
||||
for _, rt := range tests {
|
||||
t.Run(rt.kubernetesVersion, func(t *testing.T) {
|
||||
actualVersion, actualWarning, actualError := EtcdSupportedVersion(supportedEtcdVersion, rt.kubernetesVersion)
|
||||
if (actualError != nil) != rt.expectedError {
|
||||
t.Fatalf("expected error %v, got %v", rt.expectedError, actualError != nil)
|
||||
}
|
||||
if (actualWarning != nil) != rt.expectedWarning {
|
||||
t.Fatalf("expected warning %v, got %v", rt.expectedWarning, actualWarning != nil)
|
||||
}
|
||||
if actualError == nil && actualVersion.String() != rt.expectedVersion.String() {
|
||||
t.Errorf("expected version %s, got %s", rt.expectedVersion.String(), actualVersion.String())
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetKubernetesServiceCIDR(t *testing.T) {
|
||||
var tests = []struct {
|
||||
svcSubnetList string
|
||||
isDualStack bool
|
||||
expected string
|
||||
expectedError bool
|
||||
name string
|
||||
}{
|
||||
{
|
||||
svcSubnetList: "192.168.10.0/24",
|
||||
isDualStack: false,
|
||||
expected: "192.168.10.0/24",
|
||||
expectedError: false,
|
||||
name: "valid: valid IPv4 range from single-stack",
|
||||
},
|
||||
{
|
||||
svcSubnetList: "fd03::/112",
|
||||
isDualStack: false,
|
||||
expected: "fd03::/112",
|
||||
expectedError: false,
|
||||
name: "valid: valid IPv6 range from single-stack",
|
||||
},
|
||||
{
|
||||
svcSubnetList: "192.168.10.0/24,fd03::/112",
|
||||
isDualStack: true,
|
||||
expected: "192.168.10.0/24",
|
||||
expectedError: false,
|
||||
name: "valid: valid <IPv4,IPv6> ranges from dual-stack",
|
||||
},
|
||||
{
|
||||
svcSubnetList: "fd03::/112,192.168.10.0/24",
|
||||
isDualStack: true,
|
||||
expected: "fd03::/112",
|
||||
expectedError: false,
|
||||
name: "valid: valid <IPv6,IPv4> ranges from dual-stack",
|
||||
},
|
||||
{
|
||||
svcSubnetList: "192.168.10.0/24,fd03:x::/112",
|
||||
isDualStack: true,
|
||||
expected: "",
|
||||
expectedError: true,
|
||||
name: "invalid: failed to parse subnet range for dual-stack",
|
||||
},
|
||||
}
|
||||
|
||||
for _, rt := range tests {
|
||||
t.Run(rt.name, func(t *testing.T) {
|
||||
actual, actualError := GetKubernetesServiceCIDR(rt.svcSubnetList, rt.isDualStack)
|
||||
if rt.expectedError {
|
||||
if actualError == nil {
|
||||
t.Errorf("failed GetKubernetesServiceCIDR:\n\texpected error, but got no error")
|
||||
}
|
||||
} else if !rt.expectedError && actualError != nil {
|
||||
t.Errorf("failed GetKubernetesServiceCIDR:\n\texpected no error, but got: %v", actualError)
|
||||
} else {
|
||||
if actual.String() != rt.expected {
|
||||
t.Errorf(
|
||||
"failed GetKubernetesServiceCIDR:\n\texpected: %s\n\t actual: %s",
|
||||
rt.expected,
|
||||
actual.String(),
|
||||
)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
|
@ -1,219 +0,0 @@
|
|||
/*
|
||||
Copyright 2017 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package features
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"k8s.io/apimachinery/pkg/util/version"
|
||||
"k8s.io/component-base/featuregate"
|
||||
)
|
||||
|
||||
func TestKnownFeatures(t *testing.T) {
|
||||
var someFeatures = FeatureList{
|
||||
"feature2": {FeatureSpec: featuregate.FeatureSpec{Default: true, PreRelease: featuregate.Alpha}},
|
||||
"feature1": {FeatureSpec: featuregate.FeatureSpec{Default: false, PreRelease: featuregate.Beta}},
|
||||
"feature3": {FeatureSpec: featuregate.FeatureSpec{Default: false, PreRelease: featuregate.GA}},
|
||||
"hidden": {FeatureSpec: featuregate.FeatureSpec{Default: false, PreRelease: featuregate.GA}, HiddenInHelpText: true},
|
||||
}
|
||||
|
||||
r := KnownFeatures(&someFeatures)
|
||||
|
||||
if len(r) != 3 {
|
||||
t.Errorf("KnownFeatures returned %d values, expected 3", len(r))
|
||||
}
|
||||
|
||||
// check the first value is feature1 (the list should be sorted); prerelease and default should be present
|
||||
f1 := "feature1=true|false (BETA - default=false)"
|
||||
if r[0] != f1 {
|
||||
t.Errorf("KnownFeatures returned %s values, expected %s", r[0], f1)
|
||||
}
|
||||
// check the second value is feature2; prerelease and default should be present
|
||||
f2 := "feature2=true|false (ALPHA - default=true)"
|
||||
if r[1] != f2 {
|
||||
t.Errorf("KnownFeatures returned %s values, expected %s", r[1], f2)
|
||||
}
|
||||
// check the second value is feature3; prerelease should not be shown for GA features; default should be present
|
||||
f3 := "feature3=true|false (default=false)"
|
||||
if r[2] != f3 {
|
||||
t.Errorf("KnownFeatures returned %s values, expected %s", r[2], f3)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewFeatureGate(t *testing.T) {
|
||||
var someFeatures = FeatureList{
|
||||
"feature1": {FeatureSpec: featuregate.FeatureSpec{Default: false, PreRelease: featuregate.Beta}},
|
||||
"feature2": {FeatureSpec: featuregate.FeatureSpec{Default: true, PreRelease: featuregate.Alpha}},
|
||||
"deprecated": {FeatureSpec: featuregate.FeatureSpec{Default: true, PreRelease: featuregate.Deprecated}},
|
||||
}
|
||||
|
||||
var tests = []struct {
|
||||
value string
|
||||
expectedError bool
|
||||
expectedFeaturesGate map[string]bool
|
||||
}{
|
||||
{ //invalid value (missing =)
|
||||
value: "invalidValue",
|
||||
expectedError: true,
|
||||
},
|
||||
{ //invalid value (missing =)
|
||||
value: "feature1=true,invalidValue",
|
||||
expectedError: true,
|
||||
},
|
||||
{ //invalid value (not a boolean)
|
||||
value: "feature1=notABoolean",
|
||||
expectedError: true,
|
||||
},
|
||||
{ //invalid value (not a boolean)
|
||||
value: "feature1=true,feature2=notABoolean",
|
||||
expectedError: true,
|
||||
},
|
||||
{ //unrecognized feature-gate key
|
||||
value: "unknownFeature=false",
|
||||
expectedError: true,
|
||||
},
|
||||
{ //unrecognized feature-gate key
|
||||
value: "feature1=true,unknownFeature=false",
|
||||
expectedError: true,
|
||||
},
|
||||
{ //deprecated feature-gate key
|
||||
value: "deprecated=true",
|
||||
expectedError: true,
|
||||
},
|
||||
{ //one feature
|
||||
value: "feature1=true",
|
||||
expectedError: false,
|
||||
expectedFeaturesGate: map[string]bool{"feature1": true},
|
||||
},
|
||||
{ //two features
|
||||
value: "feature1=true,feature2=false",
|
||||
expectedError: false,
|
||||
expectedFeaturesGate: map[string]bool{"feature1": true, "feature2": false},
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.value, func(t *testing.T) {
|
||||
r, err := NewFeatureGate(&someFeatures, test.value)
|
||||
|
||||
if !test.expectedError && err != nil {
|
||||
t.Errorf("NewFeatureGate failed when not expected: %v", err)
|
||||
return
|
||||
} else if test.expectedError && err == nil {
|
||||
t.Error("NewFeatureGate didn't failed when expected")
|
||||
return
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(r, test.expectedFeaturesGate) {
|
||||
t.Errorf("NewFeatureGate returned a unexpected value")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateVersion(t *testing.T) {
|
||||
var someFeatures = FeatureList{
|
||||
"feature1": {FeatureSpec: featuregate.FeatureSpec{Default: false, PreRelease: featuregate.Beta}},
|
||||
"feature2": {FeatureSpec: featuregate.FeatureSpec{Default: true, PreRelease: featuregate.Alpha}, MinimumVersion: version.MustParseSemantic("v1.17.0").WithPreRelease("alpha.1")},
|
||||
}
|
||||
|
||||
var tests = []struct {
|
||||
name string
|
||||
requestedVersion string
|
||||
requestedFeatures map[string]bool
|
||||
expectedError bool
|
||||
}{
|
||||
{
|
||||
name: "no min version",
|
||||
requestedFeatures: map[string]bool{"feature1": true},
|
||||
expectedError: false,
|
||||
},
|
||||
{
|
||||
name: "min version but correct value given",
|
||||
requestedFeatures: map[string]bool{"feature2": true},
|
||||
requestedVersion: "v1.17.0",
|
||||
expectedError: false,
|
||||
},
|
||||
{
|
||||
name: "min version and incorrect value given",
|
||||
requestedFeatures: map[string]bool{"feature2": true},
|
||||
requestedVersion: "v1.11.2",
|
||||
expectedError: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
err := ValidateVersion(someFeatures, test.requestedFeatures, test.requestedVersion)
|
||||
if !test.expectedError && err != nil {
|
||||
t.Errorf("ValidateVersion failed when not expected: %v", err)
|
||||
return
|
||||
} else if test.expectedError && err == nil {
|
||||
t.Error("ValidateVersion didn't failed when expected")
|
||||
return
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// TestEnabledDefaults tests that Enabled returns the default values for
|
||||
// each feature gate when no feature gates are specified.
|
||||
func TestEnabledDefaults(t *testing.T) {
|
||||
for featureName, feature := range InitFeatureGates {
|
||||
featureList := make(map[string]bool)
|
||||
|
||||
enabled := Enabled(featureList, featureName)
|
||||
if enabled != feature.Default {
|
||||
t.Errorf("Enabled returned %v instead of default value %v for feature %s", enabled, feature.Default, featureName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCheckDeprecatedFlags(t *testing.T) {
|
||||
dummyMessage := "dummy message"
|
||||
var someFeatures = FeatureList{
|
||||
"feature1": {FeatureSpec: featuregate.FeatureSpec{Default: false, PreRelease: featuregate.Beta}},
|
||||
"deprecated": {FeatureSpec: featuregate.FeatureSpec{Default: true, PreRelease: featuregate.Deprecated}, DeprecationMessage: dummyMessage},
|
||||
}
|
||||
|
||||
var tests = []struct {
|
||||
name string
|
||||
features map[string]bool
|
||||
expectedMsg map[string]string
|
||||
}{
|
||||
{
|
||||
name: "deprecated feature",
|
||||
features: map[string]bool{"deprecated": true},
|
||||
expectedMsg: map[string]string{"deprecated": dummyMessage},
|
||||
},
|
||||
{
|
||||
name: "valid feature",
|
||||
features: map[string]bool{"feature1": true},
|
||||
expectedMsg: map[string]string{},
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
msg := CheckDeprecatedFlags(&someFeatures, test.features)
|
||||
if !reflect.DeepEqual(test.expectedMsg, msg) {
|
||||
t.Error("CheckDeprecatedFlags didn't returned expected message")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue