Skip to content

Commit

Permalink
Merge pull request #17764 from liggitt/ugorji-1.8
Browse files Browse the repository at this point in the history
Automatic merge from submit-queue.

Restore ugorji json decoding with type coercion

Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1525162
  • Loading branch information
openshift-merge-robot authored Dec 15, 2017
2 parents 2e49678 + d1ca0d4 commit a050d41
Show file tree
Hide file tree
Showing 7 changed files with 120 additions and 20 deletions.
2 changes: 2 additions & 0 deletions glide.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ excludeDirs:
- cmd/service-catalog
- pkg/build/builder
import:
- package: github.com/ugorji/go
version: ded73eae5db7e7a0ef6f55aace87a2873c5d2b74
- package: github.com/coreos/etcd
version: v3.2.8
- package: github.com/gonum/graph
Expand Down
57 changes: 57 additions & 0 deletions pkg/api/compatibility_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,11 @@ import (
"strings"
"testing"

"k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
jsonserializer "k8s.io/apimachinery/pkg/runtime/serializer/json"
"k8s.io/apimachinery/pkg/util/validation/field"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/validation"
Expand Down Expand Up @@ -110,6 +113,60 @@ func TestAllowedGrouplessVersion(t *testing.T) {
}
}

func TestAllowedTypeCoercion(t *testing.T) {
ten := int64(10)

testcases := []struct {
name string
input []byte
into runtime.Object
expected runtime.Object
}{
{
name: "string to number",
input: []byte(`{
"kind":"Pod",
"apiVersion":"v1",
"spec":{"activeDeadlineSeconds":"10"}
}`),
expected: &v1.Pod{
TypeMeta: metav1.TypeMeta{Kind: "Pod", APIVersion: "v1"},
Spec: v1.PodSpec{ActiveDeadlineSeconds: &ten},
},
},
{
name: "empty object to array",
input: []byte(`{
"kind":"Pod",
"apiVersion":"v1",
"spec":{"containers":{}}
}`),
expected: &v1.Pod{
TypeMeta: metav1.TypeMeta{Kind: "Pod", APIVersion: "v1"},
Spec: v1.PodSpec{Containers: []v1.Container{}},
},
},
}

for i := range testcases {
func(i int) {
tc := testcases[i]
t.Run(tc.name, func(t *testing.T) {
s := jsonserializer.NewSerializer(jsonserializer.DefaultMetaFactory, api.Scheme, api.Scheme, false)
obj, _, err := s.Decode(tc.input, nil, tc.into)
if err != nil {
t.Error(err)
return
}
if !reflect.DeepEqual(obj, tc.expected) {
t.Errorf("Expected\n%#v\ngot\n%#v", tc.expected, obj)
return
}
})
}(i)
}
}

func getJSONValue(data map[string]interface{}, keys ...string) (interface{}, bool, error) {
// No keys, current value is it
if len(keys) == 0 {
Expand Down
5 changes: 4 additions & 1 deletion vendor/k8s.io/kubernetes/pkg/api/serialization_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit a050d41

Please sign in to comment.