...

Source file src/k8s.io/kubernetes/cmd/kubeadm/app/util/config/strict/strict_test.go

Documentation: k8s.io/kubernetes/cmd/kubeadm/app/util/config/strict

     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  }
   173  

View as plain text