Preserve int64 data when patching
This commit is contained in:
@@ -19,10 +19,12 @@ package runtime_test
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/api/testapi"
|
||||
"k8s.io/kubernetes/pkg/api/validation"
|
||||
"k8s.io/kubernetes/pkg/runtime"
|
||||
)
|
||||
|
||||
@@ -129,3 +131,66 @@ func TestDecode(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDecodeNumbers(t *testing.T) {
|
||||
|
||||
// Start with a valid pod
|
||||
originalJSON := []byte(`{
|
||||
"kind":"Pod",
|
||||
"apiVersion":"v1",
|
||||
"metadata":{"name":"pod","namespace":"foo"},
|
||||
"spec":{
|
||||
"containers":[{"name":"container","image":"container"}],
|
||||
"activeDeadlineSeconds":1000030003
|
||||
}
|
||||
}`)
|
||||
|
||||
pod := &api.Pod{}
|
||||
|
||||
// Decode with structured codec
|
||||
codec, err := testapi.GetCodecForObject(pod)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
err = runtime.DecodeInto(codec, originalJSON, pod)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
// ensure pod is valid
|
||||
if errs := validation.ValidatePod(pod); len(errs) > 0 {
|
||||
t.Fatalf("pod should be valid: %v", errs)
|
||||
}
|
||||
|
||||
// Round-trip with unstructured codec
|
||||
unstructuredObj, err := runtime.Decode(runtime.UnstructuredJSONScheme, originalJSON)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
roundtripJSON, err := runtime.Encode(runtime.UnstructuredJSONScheme, unstructuredObj)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
// Make sure we serialize back out in int form
|
||||
if !strings.Contains(string(roundtripJSON), `"activeDeadlineSeconds":1000030003`) {
|
||||
t.Errorf("Expected %s, got %s", `"activeDeadlineSeconds":1000030003`, string(roundtripJSON))
|
||||
}
|
||||
|
||||
// Decode with structured codec again
|
||||
obj2, err := runtime.Decode(codec, roundtripJSON)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
// ensure pod is still valid
|
||||
pod2, ok := obj2.(*api.Pod)
|
||||
if !ok {
|
||||
t.Fatalf("expected an *api.Pod, got %#v", obj2)
|
||||
}
|
||||
if errs := validation.ValidatePod(pod2); len(errs) > 0 {
|
||||
t.Fatalf("pod should be valid: %v", errs)
|
||||
}
|
||||
// ensure round-trip preserved large integers
|
||||
if !reflect.DeepEqual(pod, pod2) {
|
||||
t.Fatalf("Expected\n\t%#v, got \n\t%#v", pod, pod2)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user