1
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