k8s.io/kubernetes@v1.29.3/pkg/apis/admissionregistration/v1alpha1/defaults_test.go (about) 1 /* 2 Copyright 2022 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 v1alpha1_test 18 19 import ( 20 "testing" 21 22 "github.com/google/go-cmp/cmp" 23 24 v1alpha1 "k8s.io/api/admissionregistration/v1alpha1" 25 apiequality "k8s.io/apimachinery/pkg/api/equality" 26 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 27 "k8s.io/apimachinery/pkg/runtime" 28 "k8s.io/kubernetes/pkg/api/legacyscheme" 29 _ "k8s.io/kubernetes/pkg/apis/admissionregistration/install" 30 ) 31 32 func TestDefaultAdmissionPolicy(t *testing.T) { 33 fail := v1alpha1.Fail 34 equivalent := v1alpha1.Equivalent 35 allScopes := v1alpha1.AllScopes 36 37 tests := []struct { 38 name string 39 original runtime.Object 40 expected runtime.Object 41 }{ 42 { 43 name: "ValidatingAdmissionPolicy", 44 original: &v1alpha1.ValidatingAdmissionPolicy{ 45 Spec: v1alpha1.ValidatingAdmissionPolicySpec{ 46 MatchConstraints: &v1alpha1.MatchResources{}, 47 }, 48 }, 49 expected: &v1alpha1.ValidatingAdmissionPolicy{ 50 Spec: v1alpha1.ValidatingAdmissionPolicySpec{ 51 MatchConstraints: &v1alpha1.MatchResources{ 52 MatchPolicy: &equivalent, 53 NamespaceSelector: &metav1.LabelSelector{}, 54 ObjectSelector: &metav1.LabelSelector{}, 55 }, 56 FailurePolicy: &fail, 57 }, 58 }, 59 }, 60 { 61 name: "ValidatingAdmissionPolicyBinding", 62 original: &v1alpha1.ValidatingAdmissionPolicyBinding{ 63 Spec: v1alpha1.ValidatingAdmissionPolicyBindingSpec{ 64 MatchResources: &v1alpha1.MatchResources{}, 65 }, 66 }, 67 expected: &v1alpha1.ValidatingAdmissionPolicyBinding{ 68 Spec: v1alpha1.ValidatingAdmissionPolicyBindingSpec{ 69 MatchResources: &v1alpha1.MatchResources{ 70 MatchPolicy: &equivalent, 71 NamespaceSelector: &metav1.LabelSelector{}, 72 ObjectSelector: &metav1.LabelSelector{}, 73 }, 74 }, 75 }, 76 }, 77 { 78 name: "scope=*", 79 original: &v1alpha1.ValidatingAdmissionPolicy{ 80 Spec: v1alpha1.ValidatingAdmissionPolicySpec{ 81 MatchConstraints: &v1alpha1.MatchResources{ 82 ResourceRules: []v1alpha1.NamedRuleWithOperations{{}}, 83 }, 84 }, 85 }, 86 expected: &v1alpha1.ValidatingAdmissionPolicy{ 87 Spec: v1alpha1.ValidatingAdmissionPolicySpec{ 88 MatchConstraints: &v1alpha1.MatchResources{ 89 MatchPolicy: &equivalent, 90 NamespaceSelector: &metav1.LabelSelector{}, 91 ObjectSelector: &metav1.LabelSelector{}, 92 ResourceRules: []v1alpha1.NamedRuleWithOperations{ 93 { 94 RuleWithOperations: v1alpha1.RuleWithOperations{ 95 Rule: v1alpha1.Rule{ 96 Scope: &allScopes, // defaulted 97 }, 98 }, 99 }, 100 }, 101 }, 102 FailurePolicy: &fail, 103 }, 104 }, 105 }, 106 } 107 108 for _, test := range tests { 109 t.Run(test.name, func(t *testing.T) { 110 original := test.original 111 expected := test.expected 112 legacyscheme.Scheme.Default(original) 113 if !apiequality.Semantic.DeepEqual(original, expected) { 114 t.Error(cmp.Diff(expected, original)) 115 } 116 }) 117 } 118 } 119 120 func TestDefaultAdmissionPolicyBinding(t *testing.T) { 121 denyAction := v1alpha1.DenyAction 122 equivalent := v1alpha1.Equivalent 123 124 tests := []struct { 125 name string 126 original runtime.Object 127 expected runtime.Object 128 }{ 129 { 130 name: "ValidatingAdmissionPolicyBinding.ParamRef.ParameterNotFoundAction", 131 original: &v1alpha1.ValidatingAdmissionPolicyBinding{ 132 Spec: v1alpha1.ValidatingAdmissionPolicyBindingSpec{ 133 ParamRef: &v1alpha1.ParamRef{}, 134 }, 135 }, 136 expected: &v1alpha1.ValidatingAdmissionPolicyBinding{ 137 Spec: v1alpha1.ValidatingAdmissionPolicyBindingSpec{ 138 ParamRef: &v1alpha1.ParamRef{ 139 ParameterNotFoundAction: &denyAction, 140 }, 141 }, 142 }, 143 }, 144 { 145 name: "ValidatingAdmissionPolicyBinding.MatchResources", 146 original: &v1alpha1.ValidatingAdmissionPolicyBinding{ 147 Spec: v1alpha1.ValidatingAdmissionPolicyBindingSpec{ 148 MatchResources: &v1alpha1.MatchResources{}, 149 }, 150 }, 151 expected: &v1alpha1.ValidatingAdmissionPolicyBinding{ 152 Spec: v1alpha1.ValidatingAdmissionPolicyBindingSpec{ 153 MatchResources: &v1alpha1.MatchResources{ 154 NamespaceSelector: &metav1.LabelSelector{}, 155 ObjectSelector: &metav1.LabelSelector{}, 156 MatchPolicy: &equivalent, 157 }, 158 }, 159 }, 160 }, 161 } 162 163 for _, test := range tests { 164 t.Run(test.name, func(t *testing.T) { 165 original := test.original 166 expected := test.expected 167 legacyscheme.Scheme.Default(original) 168 if !apiequality.Semantic.DeepEqual(original, expected) { 169 t.Error(cmp.Diff(expected, original)) 170 } 171 }) 172 } 173 }