Skip to content

Commit 1c24d18

Browse files
Merge pull request #17768 from liggitt/ugorji-1.9
Automatic merge from submit-queue. Restore ugorji json decoding with type coercion Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1525162
2 parents a9bfbc4 + a8b819c commit 1c24d18

File tree

7 files changed

+120
-21
lines changed

7 files changed

+120
-21
lines changed

glide.yaml

Lines changed: 2 additions & 0 deletions
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

Lines changed: 57 additions & 0 deletions
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/legacyscheme"
1619
api "k8s.io/kubernetes/pkg/apis/core"
@@ -111,6 +114,60 @@ func TestAllowedGrouplessVersion(t *testing.T) {
111114
}
112115
}
113116

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

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

Lines changed: 5 additions & 2 deletions
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

Lines changed: 11 additions & 9 deletions
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

Lines changed: 6 additions & 3 deletions
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

Lines changed: 3 additions & 2 deletions
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

Lines changed: 36 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)