k8s.io/kubernetes@v1.31.0-alpha.0.0.20240520171757-56147500dadc/cmd/kubeadm/app/util/config/strict/strict_test.go (about) 1 /* 2 Copyright 2018 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package strict_test 18 19 import ( 20 "os" 21 "path/filepath" 22 "testing" 23 24 "k8s.io/apimachinery/pkg/runtime" 25 "k8s.io/apimachinery/pkg/runtime/schema" 26 kubeproxyconfigv1alpha1 "k8s.io/kube-proxy/config/v1alpha1" 27 kubeletconfigv1beta1 "k8s.io/kubelet/config/v1beta1" 28 29 kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme" 30 kubeadmapiv1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta3" 31 "k8s.io/kubernetes/cmd/kubeadm/app/componentconfigs" 32 "k8s.io/kubernetes/cmd/kubeadm/app/constants" 33 "k8s.io/kubernetes/cmd/kubeadm/app/util/config/strict" 34 ) 35 36 func TestVerifyUnmarshalStrict(t *testing.T) { 37 const ( 38 pathTestData = "testdata/" 39 ) 40 41 var schemes = []*runtime.Scheme{kubeadmscheme.Scheme, componentconfigs.Scheme} 42 var testFiles = []struct { 43 fileName string 44 kind string 45 groupVersion schema.GroupVersion 46 expectedError bool 47 }{ 48 // tests with file errors 49 { 50 fileName: "invalid_casesensitive_field.yaml", 51 kind: constants.ClusterConfigurationKind, 52 groupVersion: kubeadmapiv1.SchemeGroupVersion, 53 expectedError: true, 54 }, 55 { 56 fileName: "invalid_duplicate_field_clustercfg.yaml", 57 kind: constants.InitConfigurationKind, 58 groupVersion: kubeadmapiv1.SchemeGroupVersion, 59 expectedError: true, 60 }, 61 { 62 fileName: "invalid_duplicate_field_joincfg.yaml", 63 kind: constants.JoinConfigurationKind, 64 groupVersion: kubeadmapiv1.SchemeGroupVersion, 65 expectedError: true, 66 }, 67 { 68 fileName: "invalid_duplicate_field_kubeletcfg.yaml", 69 kind: "KubeletConfiguration", 70 groupVersion: kubeletconfigv1beta1.SchemeGroupVersion, 71 expectedError: true, 72 }, 73 { 74 fileName: "invalid_duplicate_field_kubeproxycfg.yaml", 75 kind: "KubeProxyConfiguration", 76 groupVersion: kubeproxyconfigv1alpha1.SchemeGroupVersion, 77 expectedError: true, 78 }, 79 { 80 fileName: "invalid_unknown_field_clustercfg.yaml", 81 kind: constants.ClusterConfigurationKind, 82 groupVersion: kubeadmapiv1.SchemeGroupVersion, 83 expectedError: true, 84 }, 85 { 86 fileName: "invalid_unknown_field_initcfg.yaml", 87 kind: constants.InitConfigurationKind, 88 groupVersion: kubeadmapiv1.SchemeGroupVersion, 89 expectedError: true, 90 }, 91 { 92 fileName: "invalid_unknown_field_joincfg.yaml", 93 kind: constants.JoinConfigurationKind, 94 groupVersion: kubeadmapiv1.SchemeGroupVersion, 95 expectedError: true, 96 }, 97 { 98 fileName: "invalid_unknown_field_kubeletcfg.yaml", 99 kind: "KubeletConfiguration", 100 groupVersion: kubeletconfigv1beta1.SchemeGroupVersion, 101 expectedError: true, 102 }, 103 { 104 fileName: "invalid_unknown_field_kubeproxycfg.yaml", 105 kind: "KubeProxyConfiguration", 106 groupVersion: kubeproxyconfigv1alpha1.SchemeGroupVersion, 107 expectedError: true, 108 }, 109 // test unknown groupVersion and kind 110 { 111 fileName: "valid_clustercfg.yaml", 112 kind: constants.ClusterConfigurationKind, 113 groupVersion: schema.GroupVersion{Group: "someGroup", Version: "v1"}, 114 expectedError: true, 115 }, 116 { 117 fileName: "valid_clustercfg.yaml", 118 kind: "SomeUnknownKind", 119 groupVersion: kubeadmapiv1.SchemeGroupVersion, 120 expectedError: true, 121 }, 122 // valid tests 123 { 124 fileName: "valid_clustercfg.yaml", 125 kind: constants.ClusterConfigurationKind, 126 groupVersion: kubeadmapiv1.SchemeGroupVersion, 127 expectedError: false, 128 }, 129 { 130 fileName: "valid_initcfg.yaml", 131 kind: constants.InitConfigurationKind, 132 groupVersion: kubeadmapiv1.SchemeGroupVersion, 133 expectedError: false, 134 }, 135 { 136 fileName: "valid_joincfg.yaml", 137 kind: constants.JoinConfigurationKind, 138 groupVersion: kubeadmapiv1.SchemeGroupVersion, 139 expectedError: false, 140 }, 141 { 142 fileName: "valid_kubeletcfg.yaml", 143 kind: "KubeletConfiguration", 144 groupVersion: kubeletconfigv1beta1.SchemeGroupVersion, 145 expectedError: false, 146 }, 147 { 148 fileName: "valid_kubeproxycfg.yaml", 149 kind: "KubeProxyConfiguration", 150 groupVersion: kubeproxyconfigv1alpha1.SchemeGroupVersion, 151 expectedError: false, 152 }, 153 } 154 155 for _, test := range testFiles { 156 t.Run(test.fileName, func(t *testing.T) { 157 bytes, err := os.ReadFile(filepath.Join(pathTestData, test.fileName)) 158 if err != nil { 159 t.Fatalf("couldn't read test data: %v", err) 160 } 161 gvk := schema.GroupVersionKind{ 162 Group: test.groupVersion.Group, 163 Version: test.groupVersion.Version, 164 Kind: test.kind, 165 } 166 err = strict.VerifyUnmarshalStrict(schemes, gvk, bytes) 167 if (err != nil) != test.expectedError { 168 t.Errorf("expected error %v, got %v, error: %v", err != nil, test.expectedError, err) 169 } 170 }) 171 } 172 }