Skip to content

Commit a8b819c

Browse files
committed
Add compatibility test for (shudder) string->int and {}->[] coercion
1 parent d9c9d9b commit a8b819c

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

Diff for: 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/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 {

0 commit comments

Comments
 (0)