From 898701993180e64439dde343f713060b3b33daad Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Tue, 1 Nov 2016 21:31:46 -0400 Subject: [PATCH] Improve the common kinds API test to catch more errors --- pkg/api/serialization_test.go | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/pkg/api/serialization_test.go b/pkg/api/serialization_test.go index 3fbab963531..ad101efb05b 100644 --- a/pkg/api/serialization_test.go +++ b/pkg/api/serialization_test.go @@ -244,16 +244,38 @@ var nonRoundTrippableTypes = sets.NewString( "WatchEvent", ) -var commonKinds = []string{"ListOptions", "DeleteOptions"} +var commonKinds = []string{"Status", "ListOptions", "DeleteOptions", "ExportOptions"} -// verify all external group/versions have the common kinds like the ListOptions, DeleteOptions are registered. +// verify all external group/versions have the common kinds registered. func TestCommonKindsRegistered(t *testing.T) { for _, kind := range commonKinds { for _, group := range testapi.Groups { gv := group.GroupVersion() - if _, err := api.Scheme.New(gv.WithKind(kind)); err != nil { + gvk := gv.WithKind(kind) + obj, err := api.Scheme.New(gvk) + if err != nil { t.Error(err) } + defaults := gv.WithKind("") + if _, got, err := api.Codecs.LegacyCodec().Decode([]byte(`{"kind":"`+kind+`"}`), &defaults, nil); err != nil || gvk != *got { + t.Errorf("expected %v: %v %v", gvk, got, err) + } + data, err := runtime.Encode(api.Codecs.LegacyCodec(*gv), obj) + if err != nil { + t.Errorf("expected %v: %v\n%s", gvk, err, string(data)) + continue + } + if !bytes.Contains(data, []byte(`"kind":"`+kind+`","apiVersion":"`+gv.String()+`"`)) { + if kind != "Status" { + t.Errorf("expected %v: %v\n%s", gvk, err, string(data)) + continue + } + // TODO: this is wrong, but legacy clients expect it + if !bytes.Contains(data, []byte(`"kind":"`+kind+`","apiVersion":"v1"`)) { + t.Errorf("expected %v: %v\n%s", gvk, err, string(data)) + continue + } + } } } }