...

Source file src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/defaults_test.go

Documentation: k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1

     1  /*
     2  Copyright 2019 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 v1beta1
    18  
    19  import (
    20  	"testing"
    21  
    22  	"github.com/google/go-cmp/cmp"
    23  
    24  	apiequality "k8s.io/apimachinery/pkg/api/equality"
    25  	"k8s.io/apimachinery/pkg/runtime"
    26  	utilpointer "k8s.io/utils/pointer"
    27  )
    28  
    29  func TestDefaults(t *testing.T) {
    30  	scheme := runtime.NewScheme()
    31  	AddToScheme(scheme)
    32  	tests := []struct {
    33  		name     string
    34  		original *CustomResourceDefinition
    35  		expected *CustomResourceDefinition
    36  	}{
    37  		{
    38  			name:     "empty",
    39  			original: &CustomResourceDefinition{},
    40  			expected: &CustomResourceDefinition{
    41  				Spec: CustomResourceDefinitionSpec{
    42  					Scope:                 NamespaceScoped,
    43  					Conversion:            &CustomResourceConversion{Strategy: NoneConverter},
    44  					PreserveUnknownFields: utilpointer.BoolPtr(true),
    45  				},
    46  			},
    47  		},
    48  		{
    49  			name: "conversion defaults",
    50  			original: &CustomResourceDefinition{
    51  				Spec: CustomResourceDefinitionSpec{
    52  					Scope: NamespaceScoped,
    53  					Conversion: &CustomResourceConversion{
    54  						Strategy: WebhookConverter,
    55  						WebhookClientConfig: &WebhookClientConfig{
    56  							Service: &ServiceReference{},
    57  						},
    58  					},
    59  					PreserveUnknownFields: utilpointer.BoolPtr(true),
    60  				},
    61  			},
    62  			expected: &CustomResourceDefinition{
    63  				Spec: CustomResourceDefinitionSpec{
    64  					Scope: NamespaceScoped,
    65  					Conversion: &CustomResourceConversion{
    66  						Strategy:                 WebhookConverter,
    67  						ConversionReviewVersions: []string{"v1beta1"},
    68  						WebhookClientConfig: &WebhookClientConfig{
    69  							Service: &ServiceReference{Port: utilpointer.Int32Ptr(443)},
    70  						},
    71  					},
    72  					PreserveUnknownFields: utilpointer.BoolPtr(true),
    73  				},
    74  			},
    75  		},
    76  		{
    77  			name: "storage status defaults",
    78  			original: &CustomResourceDefinition{
    79  				Spec: CustomResourceDefinitionSpec{
    80  					Scope:                 NamespaceScoped,
    81  					Conversion:            &CustomResourceConversion{Strategy: NoneConverter},
    82  					PreserveUnknownFields: utilpointer.BoolPtr(true),
    83  					Versions: []CustomResourceDefinitionVersion{
    84  						{Name: "v1", Storage: false, Served: true},
    85  						{Name: "v2", Storage: true, Served: true},
    86  						{Name: "v3", Storage: false, Served: true},
    87  					},
    88  				},
    89  			},
    90  			expected: &CustomResourceDefinition{
    91  				Spec: CustomResourceDefinitionSpec{
    92  					Scope:                 NamespaceScoped,
    93  					Conversion:            &CustomResourceConversion{Strategy: NoneConverter},
    94  					PreserveUnknownFields: utilpointer.BoolPtr(true),
    95  					Version:               "v1",
    96  					Versions: []CustomResourceDefinitionVersion{
    97  						{Name: "v1", Storage: false, Served: true},
    98  						{Name: "v2", Storage: true, Served: true},
    99  						{Name: "v3", Storage: false, Served: true},
   100  					},
   101  				},
   102  				Status: CustomResourceDefinitionStatus{
   103  					StoredVersions: []string{"v2"},
   104  				},
   105  			},
   106  		},
   107  		{
   108  			name: "version defaults",
   109  			original: &CustomResourceDefinition{
   110  				Spec: CustomResourceDefinitionSpec{
   111  					Scope:                 NamespaceScoped,
   112  					Conversion:            &CustomResourceConversion{Strategy: NoneConverter},
   113  					PreserveUnknownFields: utilpointer.BoolPtr(true),
   114  					Version:               "v1",
   115  				},
   116  			},
   117  			expected: &CustomResourceDefinition{
   118  				Spec: CustomResourceDefinitionSpec{
   119  					Scope:                 NamespaceScoped,
   120  					Conversion:            &CustomResourceConversion{Strategy: NoneConverter},
   121  					PreserveUnknownFields: utilpointer.BoolPtr(true),
   122  					Version:               "v1",
   123  					Versions: []CustomResourceDefinitionVersion{
   124  						{Name: "v1", Storage: true, Served: true},
   125  					},
   126  				},
   127  				Status: CustomResourceDefinitionStatus{
   128  					StoredVersions: []string{"v1"},
   129  				},
   130  			},
   131  		},
   132  	}
   133  
   134  	for _, test := range tests {
   135  		t.Run(test.name, func(t *testing.T) {
   136  			original := test.original
   137  			expected := test.expected
   138  			scheme.Default(original)
   139  			if !apiequality.Semantic.DeepEqual(original, expected) {
   140  				t.Errorf("expected vs got:\n%s", cmp.Diff(test.expected, original))
   141  			}
   142  		})
   143  	}
   144  }
   145  

View as plain text