Skip to content

Commit

Permalink
Merge pull request #17768 from liggitt/ugorji-1.9
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 18, 2017
2 parents a9bfbc4 + a8b819c commit 1c24d18
Show file tree
Hide file tree
Showing 7 changed files with 120 additions and 21 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/legacyscheme"
api "k8s.io/kubernetes/pkg/apis/core"
Expand Down Expand Up @@ -111,6 +114,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, legacyscheme.Scheme, legacyscheme.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

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 1c24d18

Please sign in to comment.