diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/BUILD index 32d6d981f49..1ee6b4c5436 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/BUILD @@ -48,6 +48,7 @@ go_test( srcs = [ "convert_test.go", "goopenapi_test.go", + "unfold_test.go", "validation_test.go", ], embed = [":go_default_library"], diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/structural.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/structural.go index 23d09eb9ef7..10fcb9cf36a 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/structural.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/structural.go @@ -30,7 +30,7 @@ type Structural struct { Generic Extensions - *ValueValidation + ValueValidation *ValueValidation } // +k8s:deepcopy-gen=true diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/unfold.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/unfold.go index d135757ee7b..5c69a4f300e 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/unfold.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/unfold.go @@ -35,13 +35,16 @@ func (s *Structural) Unfold() *Structural { return false } - if s.AnyOf == nil { - s.AnyOf = []NestedValueValidation{ + if s.ValueValidation == nil { + s.ValueValidation = &ValueValidation{} + } + if s.ValueValidation.AnyOf == nil { + s.ValueValidation.AnyOf = []NestedValueValidation{ {ForbiddenGenerics: Generic{Type: "integer"}}, {ForbiddenGenerics: Generic{Type: "string"}}, } } else { - s.AllOf = append([]NestedValueValidation{ + s.ValueValidation.AllOf = append([]NestedValueValidation{ { ValueValidation: ValueValidation{ AnyOf: []NestedValueValidation{ @@ -50,7 +53,7 @@ func (s *Structural) Unfold() *Structural { }, }, }, - }, s.AllOf...) + }, s.ValueValidation.AllOf...) } return true diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/unfold_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/unfold_test.go new file mode 100644 index 00000000000..e4086df4755 --- /dev/null +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/unfold_test.go @@ -0,0 +1,32 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package schema + +import ( + "testing" +) + +// TestStructuralUnfoldNilValueValidation tests that Unfold() does not crash +// on a IntOrString pattern with nil ValueValidation. +func TestStructuralUnfoldIntOrString(t *testing.T) { + schema := Structural{ + Extensions: Extensions{ + XIntOrString: true, + }, + } + schema.Unfold() +}