@@ -5993,6 +5993,294 @@ func TestValidateCustomResourceDefinitionUpdate(t *testing.T) {
5993
5993
requestGV : apiextensionsv1 .SchemeGroupVersion ,
5994
5994
errors : []validationMatch {},
5995
5995
},
5996
+ {
5997
+ name : "ratcheting validation of defaults with disabled feature gate via v1, non-structural, no defaults before" ,
5998
+ old : & apiextensions.CustomResourceDefinition {
5999
+ ObjectMeta : metav1.ObjectMeta {
6000
+ Name : "plural.group.com" ,
6001
+ ResourceVersion : "42" ,
6002
+ },
6003
+ Spec : apiextensions.CustomResourceDefinitionSpec {
6004
+ Group : "group.com" ,
6005
+ Version : "version" ,
6006
+ Versions : []apiextensions.CustomResourceDefinitionVersion {
6007
+ {
6008
+ Name : "version" ,
6009
+ Served : true ,
6010
+ Storage : true ,
6011
+ },
6012
+ },
6013
+ Scope : apiextensions .NamespaceScoped ,
6014
+ Names : apiextensions.CustomResourceDefinitionNames {
6015
+ Plural : "plural" ,
6016
+ Singular : "singular" ,
6017
+ Kind : "Plural" ,
6018
+ ListKind : "PluralList" ,
6019
+ },
6020
+ Validation : & apiextensions.CustomResourceValidation {
6021
+ OpenAPIV3Schema : & apiextensions.JSONSchemaProps {
6022
+ Type : "object" ,
6023
+ Properties : map [string ]apiextensions.JSONSchemaProps {
6024
+ "a" : {},
6025
+ },
6026
+ },
6027
+ },
6028
+ PreserveUnknownFields : pointer .BoolPtr (false ),
6029
+ },
6030
+ Status : apiextensions.CustomResourceDefinitionStatus {
6031
+ StoredVersions : []string {"version" },
6032
+ },
6033
+ },
6034
+ resource : & apiextensions.CustomResourceDefinition {
6035
+ ObjectMeta : metav1.ObjectMeta {
6036
+ Name : "plural.group.com" ,
6037
+ ResourceVersion : "42" ,
6038
+ },
6039
+ Spec : apiextensions.CustomResourceDefinitionSpec {
6040
+ Group : "group.com" ,
6041
+ Version : "version" ,
6042
+ Versions : []apiextensions.CustomResourceDefinitionVersion {
6043
+ {
6044
+ Name : "version" ,
6045
+ Served : true ,
6046
+ Storage : true ,
6047
+ },
6048
+ },
6049
+ Scope : apiextensions .NamespaceScoped ,
6050
+ Names : apiextensions.CustomResourceDefinitionNames {
6051
+ Plural : "plural" ,
6052
+ Singular : "singular" ,
6053
+ Kind : "Plural" ,
6054
+ ListKind : "PluralList" ,
6055
+ },
6056
+ Validation : & apiextensions.CustomResourceValidation {
6057
+ OpenAPIV3Schema : & apiextensions.JSONSchemaProps {
6058
+ Type : "object" ,
6059
+ Properties : map [string ]apiextensions.JSONSchemaProps {
6060
+ "a" : {
6061
+ Type : "number" ,
6062
+ Default : jsonPtr (42.0 ),
6063
+ },
6064
+ },
6065
+ },
6066
+ },
6067
+ PreserveUnknownFields : pointer .BoolPtr (false ),
6068
+ },
6069
+ Status : apiextensions.CustomResourceDefinitionStatus {
6070
+ StoredVersions : []string {"version" },
6071
+ },
6072
+ },
6073
+ requestGV : apiextensionsv1 .SchemeGroupVersion ,
6074
+ errors : []validationMatch {
6075
+ forbidden ("spec" , "validation" , "openAPIV3Schema" , "properties[a]" , "default" ),
6076
+ },
6077
+ },
6078
+ {
6079
+ name : "ratcheting validation of defaults with disabled feature gate via v1, unpruned => unpruned" ,
6080
+ old : & apiextensions.CustomResourceDefinition {
6081
+ ObjectMeta : metav1.ObjectMeta {
6082
+ Name : "plural.group.com" ,
6083
+ ResourceVersion : "42" ,
6084
+ },
6085
+ Spec : apiextensions.CustomResourceDefinitionSpec {
6086
+ Group : "group.com" ,
6087
+ Version : "version" ,
6088
+ Versions : []apiextensions.CustomResourceDefinitionVersion {
6089
+ {
6090
+ Name : "version" ,
6091
+ Served : true ,
6092
+ Storage : true ,
6093
+ },
6094
+ },
6095
+ Scope : apiextensions .NamespaceScoped ,
6096
+ Names : apiextensions.CustomResourceDefinitionNames {
6097
+ Plural : "plural" ,
6098
+ Singular : "singular" ,
6099
+ Kind : "Plural" ,
6100
+ ListKind : "PluralList" ,
6101
+ },
6102
+ Validation : & apiextensions.CustomResourceValidation {
6103
+ OpenAPIV3Schema : & apiextensions.JSONSchemaProps {
6104
+ Type : "object" ,
6105
+ Properties : map [string ]apiextensions.JSONSchemaProps {
6106
+ "a" : {
6107
+ Type : "object" ,
6108
+ Properties : map [string ]apiextensions.JSONSchemaProps {
6109
+ "foo" : {Type : "string" },
6110
+ },
6111
+ Default : jsonPtr (map [string ]interface {}{
6112
+ "unknown" : "unknown" ,
6113
+ }),
6114
+ },
6115
+ },
6116
+ },
6117
+ },
6118
+ PreserveUnknownFields : pointer .BoolPtr (false ),
6119
+ },
6120
+ Status : apiextensions.CustomResourceDefinitionStatus {
6121
+ StoredVersions : []string {"version" },
6122
+ },
6123
+ },
6124
+ resource : & apiextensions.CustomResourceDefinition {
6125
+ ObjectMeta : metav1.ObjectMeta {
6126
+ Name : "plural.group.com" ,
6127
+ ResourceVersion : "42" ,
6128
+ },
6129
+ Spec : apiextensions.CustomResourceDefinitionSpec {
6130
+ Group : "group.com" ,
6131
+ Version : "version" ,
6132
+ Versions : []apiextensions.CustomResourceDefinitionVersion {
6133
+ {
6134
+ Name : "version" ,
6135
+ Served : true ,
6136
+ Storage : true ,
6137
+ },
6138
+ },
6139
+ Scope : apiextensions .NamespaceScoped ,
6140
+ Names : apiextensions.CustomResourceDefinitionNames {
6141
+ Plural : "plural" ,
6142
+ Singular : "singular" ,
6143
+ Kind : "Plural" ,
6144
+ ListKind : "PluralList" ,
6145
+ },
6146
+ Validation : & apiextensions.CustomResourceValidation {
6147
+ OpenAPIV3Schema : & apiextensions.JSONSchemaProps {
6148
+ Type : "object" ,
6149
+ Properties : map [string ]apiextensions.JSONSchemaProps {
6150
+ "a" : {
6151
+ Type : "object" ,
6152
+ Properties : map [string ]apiextensions.JSONSchemaProps {
6153
+ "foo" : {Type : "string" },
6154
+ },
6155
+ Default : jsonPtr (map [string ]interface {}{
6156
+ "unknown" : "unknown" ,
6157
+ }),
6158
+ },
6159
+ "b" : {
6160
+ Type : "object" ,
6161
+ Properties : map [string ]apiextensions.JSONSchemaProps {
6162
+ "foo" : {Type : "string" },
6163
+ },
6164
+ Default : jsonPtr (map [string ]interface {}{
6165
+ "unknown" : "unknown" ,
6166
+ }),
6167
+ },
6168
+ },
6169
+ },
6170
+ },
6171
+ PreserveUnknownFields : pointer .BoolPtr (false ),
6172
+ },
6173
+ Status : apiextensions.CustomResourceDefinitionStatus {
6174
+ StoredVersions : []string {"version" },
6175
+ },
6176
+ },
6177
+ requestGV : apiextensionsv1 .SchemeGroupVersion ,
6178
+ errors : []validationMatch {},
6179
+ },
6180
+ {
6181
+ name : "ratcheting validation of defaults with disabled feature gate via v1, pruned => unpruned" ,
6182
+ old : & apiextensions.CustomResourceDefinition {
6183
+ ObjectMeta : metav1.ObjectMeta {
6184
+ Name : "plural.group.com" ,
6185
+ ResourceVersion : "42" ,
6186
+ },
6187
+ Spec : apiextensions.CustomResourceDefinitionSpec {
6188
+ Group : "group.com" ,
6189
+ Version : "version" ,
6190
+ Versions : []apiextensions.CustomResourceDefinitionVersion {
6191
+ {
6192
+ Name : "version" ,
6193
+ Served : true ,
6194
+ Storage : true ,
6195
+ },
6196
+ },
6197
+ Scope : apiextensions .NamespaceScoped ,
6198
+ Names : apiextensions.CustomResourceDefinitionNames {
6199
+ Plural : "plural" ,
6200
+ Singular : "singular" ,
6201
+ Kind : "Plural" ,
6202
+ ListKind : "PluralList" ,
6203
+ },
6204
+ Validation : & apiextensions.CustomResourceValidation {
6205
+ OpenAPIV3Schema : & apiextensions.JSONSchemaProps {
6206
+ Type : "object" ,
6207
+ Properties : map [string ]apiextensions.JSONSchemaProps {
6208
+ "a" : {
6209
+ Type : "object" ,
6210
+ Properties : map [string ]apiextensions.JSONSchemaProps {
6211
+ "foo" : {Type : "string" },
6212
+ },
6213
+ Default : jsonPtr (map [string ]interface {}{
6214
+ "foo" : "foo" ,
6215
+ }),
6216
+ },
6217
+ },
6218
+ },
6219
+ },
6220
+ PreserveUnknownFields : pointer .BoolPtr (false ),
6221
+ },
6222
+ Status : apiextensions.CustomResourceDefinitionStatus {
6223
+ StoredVersions : []string {"version" },
6224
+ },
6225
+ },
6226
+ resource : & apiextensions.CustomResourceDefinition {
6227
+ ObjectMeta : metav1.ObjectMeta {
6228
+ Name : "plural.group.com" ,
6229
+ ResourceVersion : "42" ,
6230
+ },
6231
+ Spec : apiextensions.CustomResourceDefinitionSpec {
6232
+ Group : "group.com" ,
6233
+ Version : "version" ,
6234
+ Versions : []apiextensions.CustomResourceDefinitionVersion {
6235
+ {
6236
+ Name : "version" ,
6237
+ Served : true ,
6238
+ Storage : true ,
6239
+ },
6240
+ },
6241
+ Scope : apiextensions .NamespaceScoped ,
6242
+ Names : apiextensions.CustomResourceDefinitionNames {
6243
+ Plural : "plural" ,
6244
+ Singular : "singular" ,
6245
+ Kind : "Plural" ,
6246
+ ListKind : "PluralList" ,
6247
+ },
6248
+ Validation : & apiextensions.CustomResourceValidation {
6249
+ OpenAPIV3Schema : & apiextensions.JSONSchemaProps {
6250
+ Type : "object" ,
6251
+ Properties : map [string ]apiextensions.JSONSchemaProps {
6252
+ "a" : {
6253
+ Type : "object" ,
6254
+ Properties : map [string ]apiextensions.JSONSchemaProps {
6255
+ "foo" : {Type : "string" },
6256
+ },
6257
+ Default : jsonPtr (map [string ]interface {}{
6258
+ "foo" : "foo" ,
6259
+ }),
6260
+ },
6261
+ "b" : {
6262
+ Type : "object" ,
6263
+ Properties : map [string ]apiextensions.JSONSchemaProps {
6264
+ "foo" : {Type : "string" },
6265
+ },
6266
+ Default : jsonPtr (map [string ]interface {}{
6267
+ "unknown" : "unknown" ,
6268
+ }),
6269
+ },
6270
+ },
6271
+ },
6272
+ },
6273
+ PreserveUnknownFields : pointer .BoolPtr (false ),
6274
+ },
6275
+ Status : apiextensions.CustomResourceDefinitionStatus {
6276
+ StoredVersions : []string {"version" },
6277
+ },
6278
+ },
6279
+ requestGV : apiextensionsv1 .SchemeGroupVersion ,
6280
+ errors : []validationMatch {
6281
+ invalid ("spec" , "validation" , "openAPIV3Schema" , "properties[b]" , "default" ),
6282
+ },
6283
+ },
5996
6284
{
5997
6285
name : "add default with enabled feature gate, structural schema, without pruning" ,
5998
6286
old : & apiextensions.CustomResourceDefinition {
0 commit comments