From f51c1301f2d6541b8ca28c56bc6a03a47ce046eb Mon Sep 17 00:00:00 2001 From: pweil- Date: Wed, 3 Aug 2016 15:39:43 -0400 Subject: [PATCH] add asserts for RecognizingDecoder and update protobuf serializer to implement interface --- pkg/runtime/serializer/json/json.go | 2 ++ pkg/runtime/serializer/protobuf/protobuf.go | 14 ++++++++------ pkg/runtime/serializer/protobuf/protobuf_test.go | 6 +++--- .../recognizer/{ => testing}/recognizer_test.go | 5 +++-- 4 files changed, 16 insertions(+), 11 deletions(-) rename pkg/runtime/serializer/recognizer/{ => testing}/recognizer_test.go (93%) diff --git a/pkg/runtime/serializer/json/json.go b/pkg/runtime/serializer/json/json.go index c26fa50d819..c83ed588e27 100644 --- a/pkg/runtime/serializer/json/json.go +++ b/pkg/runtime/serializer/json/json.go @@ -25,6 +25,7 @@ import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/runtime/serializer/recognizer" "k8s.io/kubernetes/pkg/util/framer" utilyaml "k8s.io/kubernetes/pkg/util/yaml" ) @@ -63,6 +64,7 @@ type Serializer struct { // Serializer implements Serializer var _ runtime.Serializer = &Serializer{} +var _ recognizer.RecognizingDecoder = &Serializer{} // Decode attempts to convert the provided data into YAML or JSON, extract the stored schema kind, apply the provided default gvk, and then // load that data into an object matching the desired schema kind or the provided into. If into is *runtime.Unknown, the raw data will be diff --git a/pkg/runtime/serializer/protobuf/protobuf.go b/pkg/runtime/serializer/protobuf/protobuf.go index a21df48a05d..5a6a50de38a 100644 --- a/pkg/runtime/serializer/protobuf/protobuf.go +++ b/pkg/runtime/serializer/protobuf/protobuf.go @@ -26,6 +26,7 @@ import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/runtime/serializer/recognizer" "k8s.io/kubernetes/pkg/util/framer" ) @@ -76,6 +77,7 @@ type Serializer struct { } var _ runtime.Serializer = &Serializer{} +var _ recognizer.RecognizingDecoder = &Serializer{} // Decode attempts to convert the provided data into a protobuf message, extract the stored schema kind, apply the provided default // gvk, and then load that data into an object matching the desired schema kind or the provided into. If into is *runtime.Unknown, @@ -124,7 +126,7 @@ func (s *Serializer) Decode(originalData []byte, gvk *unversioned.GroupVersionKi if intoUnknown, ok := into.(*runtime.Unknown); ok && intoUnknown != nil { *intoUnknown = unk - if ok, _ := s.RecognizesData(bytes.NewBuffer(unk.Raw)); ok { + if ok, _, _ := s.RecognizesData(bytes.NewBuffer(unk.Raw)); ok { intoUnknown.ContentType = s.contentType } return intoUnknown, &actual, nil @@ -237,19 +239,19 @@ func (s *Serializer) Encode(obj runtime.Object, w io.Writer) error { } // RecognizesData implements the RecognizingDecoder interface. -func (s *Serializer) RecognizesData(peek io.Reader) (bool, error) { +func (s *Serializer) RecognizesData(peek io.Reader) (bool, bool, error) { prefix := make([]byte, 4) n, err := peek.Read(prefix) if err != nil { if err == io.EOF { - return false, nil + return false, false, nil } - return false, err + return false, false, err } if n != 4 { - return false, nil + return false, false, nil } - return bytes.Equal(s.prefix, prefix), nil + return bytes.Equal(s.prefix, prefix), false, nil } // copyKindDefaults defaults dst to the value in src if dst does not have a value set. diff --git a/pkg/runtime/serializer/protobuf/protobuf_test.go b/pkg/runtime/serializer/protobuf/protobuf_test.go index 77a291da8ec..845b38e6cc7 100644 --- a/pkg/runtime/serializer/protobuf/protobuf_test.go +++ b/pkg/runtime/serializer/protobuf/protobuf_test.go @@ -79,7 +79,7 @@ func TestRecognize(t *testing.T) { {0x6b, 0x38, 0x73, 0x01}, } for i, data := range ignores { - if ok, err := s.RecognizesData(bytes.NewBuffer(data)); err != nil || ok { + if ok, _, err := s.RecognizesData(bytes.NewBuffer(data)); err != nil || ok { t.Errorf("%d: should not recognize data: %v", i, err) } } @@ -88,7 +88,7 @@ func TestRecognize(t *testing.T) { {0x6b, 0x38, 0x73, 0x00, 0x01}, } for i, data := range recognizes { - if ok, err := s.RecognizesData(bytes.NewBuffer(data)); err != nil || !ok { + if ok, _, err := s.RecognizesData(bytes.NewBuffer(data)); err != nil || !ok { t.Errorf("%d: should recognize data: %v", i, err) } } @@ -184,7 +184,7 @@ func TestEncode(t *testing.T) { continue } - if ok, err := s.RecognizesData(bytes.NewBuffer(data)); !ok || err != nil { + if ok, _, err := s.RecognizesData(bytes.NewBuffer(data)); !ok || err != nil { t.Errorf("%d: did not recognize data generated by call: %v", i, err) } } diff --git a/pkg/runtime/serializer/recognizer/recognizer_test.go b/pkg/runtime/serializer/recognizer/testing/recognizer_test.go similarity index 93% rename from pkg/runtime/serializer/recognizer/recognizer_test.go rename to pkg/runtime/serializer/recognizer/testing/recognizer_test.go index 4b68cd1b630..98dbd66c9be 100644 --- a/pkg/runtime/serializer/recognizer/recognizer_test.go +++ b/pkg/runtime/serializer/recognizer/testing/recognizer_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package recognizer +package testing import ( "testing" @@ -22,6 +22,7 @@ import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime/serializer/json" + "k8s.io/kubernetes/pkg/runtime/serializer/recognizer" ) type A struct{} @@ -31,7 +32,7 @@ func (A) GetObjectKind() unversioned.ObjectKind { return unversioned.EmptyObject func TestRecognizer(t *testing.T) { s := runtime.NewScheme() s.AddKnownTypes(unversioned.GroupVersion{Version: "v1"}, &A{}) - d := NewDecoder( + d := recognizer.NewDecoder( json.NewSerializer(json.DefaultMetaFactory, s, s, false), json.NewYAMLSerializer(json.DefaultMetaFactory, s, s), )