Skip to content

Commit a050d41

Browse files
Merge pull request #17764 from liggitt/ugorji-1.8
Automatic merge from submit-queue. Restore ugorji json decoding with type coercion Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1525162
2 parents 2e49678 + d1ca0d4 commit a050d41

File tree

7 files changed

+120
-20
lines changed

7 files changed

+120
-20
lines changed

glide.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ excludeDirs:
44
- cmd/service-catalog
55
- pkg/build/builder
66
import:
7+
- package: github.com/ugorji/go
8+
version: ded73eae5db7e7a0ef6f55aace87a2873c5d2b74
79
- package: github.com/coreos/etcd
810
version: v3.2.8
911
- package: github.com/gonum/graph

pkg/api/compatibility_test.go

+57
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,11 @@ import (
99
"strings"
1010
"testing"
1111

12+
"k8s.io/api/core/v1"
13+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1214
"k8s.io/apimachinery/pkg/runtime"
1315
"k8s.io/apimachinery/pkg/runtime/schema"
16+
jsonserializer "k8s.io/apimachinery/pkg/runtime/serializer/json"
1417
"k8s.io/apimachinery/pkg/util/validation/field"
1518
"k8s.io/kubernetes/pkg/api"
1619
"k8s.io/kubernetes/pkg/api/validation"
@@ -110,6 +113,60 @@ func TestAllowedGrouplessVersion(t *testing.T) {
110113
}
111114
}
112115

116+
func TestAllowedTypeCoercion(t *testing.T) {
117+
ten := int64(10)
118+
119+
testcases := []struct {
120+
name string
121+
input []byte
122+
into runtime.Object
123+
expected runtime.Object
124+
}{
125+
{
126+
name: "string to number",
127+
input: []byte(`{
128+
"kind":"Pod",
129+
"apiVersion":"v1",
130+
"spec":{"activeDeadlineSeconds":"10"}
131+
}`),
132+
expected: &v1.Pod{
133+
TypeMeta: metav1.TypeMeta{Kind: "Pod", APIVersion: "v1"},
134+
Spec: v1.PodSpec{ActiveDeadlineSeconds: &ten},
135+
},
136+
},
137+
{
138+
name: "empty object to array",
139+
input: []byte(`{
140+
"kind":"Pod",
141+
"apiVersion":"v1",
142+
"spec":{"containers":{}}
143+
}`),
144+
expected: &v1.Pod{
145+
TypeMeta: metav1.TypeMeta{Kind: "Pod", APIVersion: "v1"},
146+
Spec: v1.PodSpec{Containers: []v1.Container{}},
147+
},
148+
},
149+
}
150+
151+
for i := range testcases {
152+
func(i int) {
153+
tc := testcases[i]
154+
t.Run(tc.name, func(t *testing.T) {
155+
s := jsonserializer.NewSerializer(jsonserializer.DefaultMetaFactory, api.Scheme, api.Scheme, false)
156+
obj, _, err := s.Decode(tc.input, nil, tc.into)
157+
if err != nil {
158+
t.Error(err)
159+
return
160+
}
161+
if !reflect.DeepEqual(obj, tc.expected) {
162+
t.Errorf("Expected\n%#v\ngot\n%#v", tc.expected, obj)
163+
return
164+
}
165+
})
166+
}(i)
167+
}
168+
}
169+
113170
func getJSONValue(data map[string]interface{}, keys ...string) (interface{}, bool, error) {
114171
// No keys, current value is it
115172
if len(keys) == 0 {

vendor/k8s.io/kubernetes/pkg/api/serialization_test.go

+4-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/apis/meta/fuzzer/fuzzer.go

+11-9
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/group_version_test.go

+6-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types_test.go

+3-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go

+37-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)