1
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
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
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
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 }
173
View as plain text