From 8f2687457702a9d67fe34b9bd872ce6c2256643d Mon Sep 17 00:00:00 2001 From: Jordan Liggitt Date: Wed, 29 May 2019 10:45:29 -0400 Subject: [PATCH] Set GVK when decoding protobuf --- pkg/api/testing/serialization_proto_test.go | 2 +- .../apimachinery/pkg/api/apitesting/roundtrip/roundtrip.go | 7 +------ .../pkg/runtime/serializer/protobuf/protobuf.go | 3 +++ .../pkg/test/runtime_serializer_protobuf_protobuf_test.go | 4 +++- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pkg/api/testing/serialization_proto_test.go b/pkg/api/testing/serialization_proto_test.go index 10f41093f7..445a2916f8 100644 --- a/pkg/api/testing/serialization_proto_test.go +++ b/pkg/api/testing/serialization_proto_test.go @@ -40,7 +40,7 @@ import ( ) func TestUniversalDeserializer(t *testing.T) { - expected := &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "test"}} + expected := &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "test"}, TypeMeta: metav1.TypeMeta{APIVersion: "v1", Kind: "Pod"}} d := legacyscheme.Codecs.UniversalDeserializer() for _, mediaType := range []string{"application/json", "application/yaml", "application/vnd.kubernetes.protobuf"} { info, ok := runtime.SerializerInfoForMediaType(legacyscheme.Codecs.SupportedMediaTypes(), mediaType) diff --git a/staging/src/k8s.io/apimachinery/pkg/api/apitesting/roundtrip/roundtrip.go b/staging/src/k8s.io/apimachinery/pkg/api/apitesting/roundtrip/roundtrip.go index 7aec3a8cf5..a227b69944 100644 --- a/staging/src/k8s.io/apimachinery/pkg/api/apitesting/roundtrip/roundtrip.go +++ b/staging/src/k8s.io/apimachinery/pkg/api/apitesting/roundtrip/roundtrip.go @@ -141,12 +141,7 @@ func RoundTripExternalTypes(t *testing.T, scheme *runtime.Scheme, codecFactory r continue } t.Run(gvk.Group+"."+gvk.Version+"."+gvk.Kind, func(t *testing.T) { - // FIXME: this is explicitly testing w/o protobuf which was failing if enabled - // the reason for that is that protobuf is not setting Kind and APIVersion fields - // during obj2 decode, the same then applies to DecodeInto obj3. My guess is we - // should be setting these two fields accordingly when protobuf is passed as codec - // to roundTrip method. - roundTripSpecificKind(t, gvk, scheme, codecFactory, fuzzer, nonRoundTrippableTypes, true) + roundTripSpecificKind(t, gvk, scheme, codecFactory, fuzzer, nonRoundTrippableTypes, false) }) } } diff --git a/staging/src/k8s.io/apimachinery/pkg/runtime/serializer/protobuf/protobuf.go b/staging/src/k8s.io/apimachinery/pkg/runtime/serializer/protobuf/protobuf.go index dde86095f2..8af889d35b 100644 --- a/staging/src/k8s.io/apimachinery/pkg/runtime/serializer/protobuf/protobuf.go +++ b/staging/src/k8s.io/apimachinery/pkg/runtime/serializer/protobuf/protobuf.go @@ -405,6 +405,9 @@ func unmarshalToObject(typer runtime.ObjectTyper, creater runtime.ObjectCreater, if err := proto.Unmarshal(data, pb); err != nil { return nil, actual, err } + if actual != nil { + obj.GetObjectKind().SetGroupVersionKind(*actual) + } return obj, actual, nil } diff --git a/staging/src/k8s.io/apimachinery/pkg/test/runtime_serializer_protobuf_protobuf_test.go b/staging/src/k8s.io/apimachinery/pkg/test/runtime_serializer_protobuf_protobuf_test.go index f2989c5642..26c6f1bd61 100644 --- a/staging/src/k8s.io/apimachinery/pkg/test/runtime_serializer_protobuf_protobuf_test.go +++ b/staging/src/k8s.io/apimachinery/pkg/test/runtime_serializer_protobuf_protobuf_test.go @@ -320,13 +320,15 @@ func TestDecodeObjects(t *testing.T) { wire1 = append([]byte{0x6b, 0x38, 0x73, 0x00}, wire1...) + obj1WithKind := obj1.DeepCopyObject() + obj1WithKind.GetObjectKind().SetGroupVersionKind(schema.GroupVersionKind{Group: "", Version: "v1", Kind: "Carp"}) testCases := []struct { obj runtime.Object data []byte errFn func(error) bool }{ { - obj: obj1, + obj: obj1WithKind, data: wire1, }, }