mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 05:27:21 +00:00
Serialization test should verify encode does not mutate in
This commit is contained in:
parent
2faf49c75c
commit
8b01cfe1eb
@ -20,6 +20,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"reflect"
|
"reflect"
|
||||||
@ -78,6 +79,13 @@ func dataAsString(data []byte) string {
|
|||||||
func roundTrip(t *testing.T, codec runtime.Codec, item runtime.Object) {
|
func roundTrip(t *testing.T, codec runtime.Codec, item runtime.Object) {
|
||||||
printer := spew.ConfigState{DisableMethods: true}
|
printer := spew.ConfigState{DisableMethods: true}
|
||||||
|
|
||||||
|
original := item
|
||||||
|
copied, err := api.Scheme.DeepCopy(item)
|
||||||
|
if err != nil {
|
||||||
|
panic(fmt.Sprintf("unable to copy: %v", err))
|
||||||
|
}
|
||||||
|
item = copied.(runtime.Object)
|
||||||
|
|
||||||
name := reflect.TypeOf(item).Elem().Name()
|
name := reflect.TypeOf(item).Elem().Name()
|
||||||
data, err := runtime.Encode(codec, item)
|
data, err := runtime.Encode(codec, item)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -85,13 +93,18 @@ func roundTrip(t *testing.T, codec runtime.Codec, item runtime.Object) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !api.Semantic.DeepEqual(original, item) {
|
||||||
|
t.Errorf("0: %v: encode altered the object, diff: %v", name, diff.ObjectReflectDiff(original, item))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
obj2, err := runtime.Decode(codec, data)
|
obj2, err := runtime.Decode(codec, data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("0: %v: %v\nCodec: %v\nData: %s\nSource: %#v", name, err, codec, dataAsString(data), printer.Sprintf("%#v", item))
|
t.Errorf("0: %v: %v\nCodec: %#v\nData: %s\nSource: %#v", name, err, codec, dataAsString(data), printer.Sprintf("%#v", item))
|
||||||
panic("failed")
|
panic("failed")
|
||||||
}
|
}
|
||||||
if !api.Semantic.DeepEqual(item, obj2) {
|
if !api.Semantic.DeepEqual(original, obj2) {
|
||||||
t.Errorf("\n1: %v: diff: %v\nCodec: %v\nSource:\n\n%#v\n\nEncoded:\n\n%s\n\nFinal:\n\n%#v", name, diff.ObjectGoPrintDiff(item, obj2), codec, printer.Sprintf("%#v", item), dataAsString(data), printer.Sprintf("%#v", obj2))
|
t.Errorf("\n1: %v: diff: %v\nCodec: %#v\nSource:\n\n%#v\n\nEncoded:\n\n%s\n\nFinal:\n\n%#v", name, diff.ObjectReflectDiff(item, obj2), codec, printer.Sprintf("%#v", item), dataAsString(data), printer.Sprintf("%#v", obj2))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,7 +114,7 @@ func roundTrip(t *testing.T, codec runtime.Codec, item runtime.Object) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !api.Semantic.DeepEqual(item, obj3) {
|
if !api.Semantic.DeepEqual(item, obj3) {
|
||||||
t.Errorf("3: %v: diff: %v\nCodec: %v", name, diff.ObjectDiff(item, obj3), codec)
|
t.Errorf("3: %v: diff: %v\nCodec: %#v", name, diff.ObjectReflectDiff(item, obj3), codec)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -204,8 +204,8 @@ func TestResourceListConversion(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
output := api.ResourceList{}
|
|
||||||
for i, test := range tests {
|
for i, test := range tests {
|
||||||
|
output := api.ResourceList{}
|
||||||
err := api.Scheme.Convert(&test.input, &output)
|
err := api.Scheme.Convert(&test.input, &output)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected error for case %d: %v", i, err)
|
t.Fatalf("unexpected error for case %d: %v", i, err)
|
||||||
|
Loading…
Reference in New Issue
Block a user