diff --git a/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_test.go b/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_test.go index af504efad1d..8f171d3d87b 100644 --- a/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_test.go +++ b/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_test.go @@ -41,7 +41,8 @@ func init() { } testapi.Groups[testgroup.SchemeGroupVersion.Group] = testapi.NewTestGroup( registered.GroupOrDie(testgroup.SchemeGroupVersion.Group).GroupVersion, - testgroup.SchemeGroupVersion) + testgroup.SchemeGroupVersion, + api.Scheme.KnownTypes(testgroup.SchemeGroupVersion)) testHelper = testapi.Groups[testgroup.SchemeGroupVersion.Group] } diff --git a/pkg/api/serialization_test.go b/pkg/api/serialization_test.go index 7b1f17f818e..b89260f5cd1 100644 --- a/pkg/api/serialization_test.go +++ b/pkg/api/serialization_test.go @@ -153,7 +153,7 @@ func TestRoundTripTypes(t *testing.T) { // defer api.Scheme.Log(nil) for groupKey, group := range testapi.Groups { - for kind := range api.Scheme.KnownTypes(group.InternalGroupVersion()) { + for kind := range group.InternalTypes() { t.Logf("working on %v in %v", kind, groupKey) if nonRoundTrippableTypes.Has(kind) { continue diff --git a/pkg/api/testapi/testapi.go b/pkg/api/testapi/testapi.go index 918930964e4..d5d5452adc6 100644 --- a/pkg/api/testapi/testapi.go +++ b/pkg/api/testapi/testapi.go @@ -20,6 +20,7 @@ package testapi import ( "fmt" "os" + "reflect" "strings" "k8s.io/kubernetes/pkg/api" @@ -50,6 +51,7 @@ var ( type TestGroup struct { externalGroupVersion unversioned.GroupVersion internalGroupVersion unversioned.GroupVersion + internalTypes map[string]reflect.Type } func init() { @@ -62,9 +64,11 @@ func init() { panic(fmt.Sprintf("Error parsing groupversion %v: %v", gvString, err)) } + internalGroupVersion := unversioned.GroupVersion{Group: groupVersion.Group, Version: runtime.APIVersionInternal} Groups[groupVersion.Group] = TestGroup{ externalGroupVersion: groupVersion, - internalGroupVersion: unversioned.GroupVersion{Group: groupVersion.Group, Version: runtime.APIVersionInternal}, + internalGroupVersion: internalGroupVersion, + internalTypes: api.Scheme.KnownTypes(internalGroupVersion), } } } @@ -73,24 +77,49 @@ func init() { Groups[api.GroupName] = TestGroup{ externalGroupVersion: unversioned.GroupVersion{Group: api.GroupName, Version: registered.GroupOrDie(api.GroupName).GroupVersion.Version}, internalGroupVersion: api.SchemeGroupVersion, + internalTypes: api.Scheme.KnownTypes(api.SchemeGroupVersion), } } if _, ok := Groups[extensions.GroupName]; !ok { Groups[extensions.GroupName] = TestGroup{ externalGroupVersion: unversioned.GroupVersion{Group: extensions.GroupName, Version: registered.GroupOrDie(extensions.GroupName).GroupVersion.Version}, internalGroupVersion: extensions.SchemeGroupVersion, + internalTypes: api.Scheme.KnownTypes(extensions.SchemeGroupVersion), } } if _, ok := Groups[autoscaling.GroupName]; !ok { + internalTypes := make(map[string]reflect.Type) + for k, t := range api.Scheme.KnownTypes(extensions.SchemeGroupVersion) { + if k == "Scale" { + continue + } + internalTypes[k] = t + } Groups[autoscaling.GroupName] = TestGroup{ externalGroupVersion: unversioned.GroupVersion{Group: autoscaling.GroupName, Version: registered.GroupOrDie(autoscaling.GroupName).GroupVersion.Version}, internalGroupVersion: extensions.SchemeGroupVersion, + internalTypes: internalTypes, + } + } + if _, ok := Groups[autoscaling.GroupName+"IntraGroup"]; !ok { + internalTypes := make(map[string]reflect.Type) + for k, t := range api.Scheme.KnownTypes(extensions.SchemeGroupVersion) { + if k == "Scale" { + internalTypes[k] = t + break + } + } + Groups[autoscaling.GroupName] = TestGroup{ + externalGroupVersion: unversioned.GroupVersion{Group: autoscaling.GroupName, Version: registered.GroupOrDie(autoscaling.GroupName).GroupVersion.Version}, + internalGroupVersion: autoscaling.SchemeGroupVersion, + internalTypes: internalTypes, } } if _, ok := Groups[batch.GroupName]; !ok { Groups[batch.GroupName] = TestGroup{ externalGroupVersion: unversioned.GroupVersion{Group: batch.GroupName, Version: registered.GroupOrDie(batch.GroupName).GroupVersion.Version}, internalGroupVersion: extensions.SchemeGroupVersion, + internalTypes: api.Scheme.KnownTypes(extensions.SchemeGroupVersion), } } @@ -115,6 +144,11 @@ func (g TestGroup) InternalGroupVersion() unversioned.GroupVersion { return g.internalGroupVersion } +// InternalTypes returns a map of internal API types' kind names to their Go types. +func (g TestGroup) InternalTypes() map[string]reflect.Type { + return g.internalTypes +} + // Codec returns the codec for the API version to test against, as set by the // KUBE_TEST_API env var. func (g TestGroup) Codec() runtime.Codec { @@ -228,6 +262,6 @@ func GetCodecForObject(obj runtime.Object) (runtime.Codec, error) { return nil, fmt.Errorf("unexpected kind: %v", kind) } -func NewTestGroup(external, internal unversioned.GroupVersion) TestGroup { - return TestGroup{external, internal} +func NewTestGroup(external, internal unversioned.GroupVersion, internalTypes map[string]reflect.Type) TestGroup { + return TestGroup{external, internal, internalTypes} }