...
1
16
17 package validatingadmissionpolicy
18
19 import (
20 "testing"
21
22 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
23 genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
24 "k8s.io/kubernetes/pkg/apis/admissionregistration"
25 )
26
27 func TestValidatingAdmissionPolicyStrategy(t *testing.T) {
28 strategy := NewStrategy(nil, nil)
29 ctx := genericapirequest.NewDefaultContext()
30 if strategy.NamespaceScoped() {
31 t.Error("ValidatingAdmissionPolicy strategy must be cluster scoped")
32 }
33 if strategy.AllowCreateOnUpdate() {
34 t.Errorf("ValidatingAdmissionPolicy should not allow create on update")
35 }
36
37 configuration := validValidatingAdmissionPolicy()
38 strategy.PrepareForCreate(ctx, configuration)
39 errs := strategy.Validate(ctx, configuration)
40 if len(errs) != 0 {
41 t.Errorf("Unexpected error validating %v", errs)
42 }
43 invalidConfiguration := &admissionregistration.ValidatingAdmissionPolicy{
44 ObjectMeta: metav1.ObjectMeta{Name: ""},
45 }
46 strategy.PrepareForUpdate(ctx, invalidConfiguration, configuration)
47 errs = strategy.ValidateUpdate(ctx, invalidConfiguration, configuration)
48 if len(errs) == 0 {
49 t.Errorf("Expected a validation error")
50 }
51 }
52 func validValidatingAdmissionPolicy() *admissionregistration.ValidatingAdmissionPolicy {
53 ignore := admissionregistration.Ignore
54 return &admissionregistration.ValidatingAdmissionPolicy{
55 ObjectMeta: metav1.ObjectMeta{
56 Name: "foo",
57 },
58 Spec: admissionregistration.ValidatingAdmissionPolicySpec{
59 ParamKind: &admissionregistration.ParamKind{
60 Kind: "ReplicaLimit",
61 APIVersion: "rules.example.com/v1",
62 },
63 Validations: []admissionregistration.Validation{
64 {
65 Expression: "object.spec.replicas <= params.maxReplicas",
66 },
67 },
68 MatchConstraints: &admissionregistration.MatchResources{
69 MatchPolicy: func() *admissionregistration.MatchPolicyType {
70 r := admissionregistration.MatchPolicyType("Exact")
71 return &r
72 }(),
73 ObjectSelector: &metav1.LabelSelector{
74 MatchLabels: map[string]string{"a": "b"},
75 },
76 NamespaceSelector: &metav1.LabelSelector{
77 MatchLabels: map[string]string{"a": "b"},
78 },
79 ResourceRules: []admissionregistration.NamedRuleWithOperations{
80 {
81 RuleWithOperations: admissionregistration.RuleWithOperations{
82 Operations: []admissionregistration.OperationType{"CREATE"},
83 Rule: admissionregistration.Rule{
84 APIGroups: []string{"a"},
85 APIVersions: []string{"a"},
86 Resources: []string{"a"},
87 },
88 },
89 },
90 },
91 },
92 FailurePolicy: &ignore,
93 },
94 }
95 }
96
View as plain text