Teach serde test to deal with autoscaling group's duality.

This commit is contained in:
Madhusudan.C.S 2016-02-25 15:05:28 -08:00
parent 312a7f36e2
commit b69ec9faff
3 changed files with 40 additions and 5 deletions

View File

@ -41,7 +41,8 @@ func init() {
} }
testapi.Groups[testgroup.SchemeGroupVersion.Group] = testapi.NewTestGroup( testapi.Groups[testgroup.SchemeGroupVersion.Group] = testapi.NewTestGroup(
registered.GroupOrDie(testgroup.SchemeGroupVersion.Group).GroupVersion, registered.GroupOrDie(testgroup.SchemeGroupVersion.Group).GroupVersion,
testgroup.SchemeGroupVersion) testgroup.SchemeGroupVersion,
api.Scheme.KnownTypes(testgroup.SchemeGroupVersion))
testHelper = testapi.Groups[testgroup.SchemeGroupVersion.Group] testHelper = testapi.Groups[testgroup.SchemeGroupVersion.Group]
} }

View File

@ -153,7 +153,7 @@ func TestRoundTripTypes(t *testing.T) {
// defer api.Scheme.Log(nil) // defer api.Scheme.Log(nil)
for groupKey, group := range testapi.Groups { 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) t.Logf("working on %v in %v", kind, groupKey)
if nonRoundTrippableTypes.Has(kind) { if nonRoundTrippableTypes.Has(kind) {
continue continue

View File

@ -20,6 +20,7 @@ package testapi
import ( import (
"fmt" "fmt"
"os" "os"
"reflect"
"strings" "strings"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
@ -50,6 +51,7 @@ var (
type TestGroup struct { type TestGroup struct {
externalGroupVersion unversioned.GroupVersion externalGroupVersion unversioned.GroupVersion
internalGroupVersion unversioned.GroupVersion internalGroupVersion unversioned.GroupVersion
internalTypes map[string]reflect.Type
} }
func init() { func init() {
@ -62,9 +64,11 @@ func init() {
panic(fmt.Sprintf("Error parsing groupversion %v: %v", gvString, err)) panic(fmt.Sprintf("Error parsing groupversion %v: %v", gvString, err))
} }
internalGroupVersion := unversioned.GroupVersion{Group: groupVersion.Group, Version: runtime.APIVersionInternal}
Groups[groupVersion.Group] = TestGroup{ Groups[groupVersion.Group] = TestGroup{
externalGroupVersion: groupVersion, 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{ Groups[api.GroupName] = TestGroup{
externalGroupVersion: unversioned.GroupVersion{Group: api.GroupName, Version: registered.GroupOrDie(api.GroupName).GroupVersion.Version}, externalGroupVersion: unversioned.GroupVersion{Group: api.GroupName, Version: registered.GroupOrDie(api.GroupName).GroupVersion.Version},
internalGroupVersion: api.SchemeGroupVersion, internalGroupVersion: api.SchemeGroupVersion,
internalTypes: api.Scheme.KnownTypes(api.SchemeGroupVersion),
} }
} }
if _, ok := Groups[extensions.GroupName]; !ok { if _, ok := Groups[extensions.GroupName]; !ok {
Groups[extensions.GroupName] = TestGroup{ Groups[extensions.GroupName] = TestGroup{
externalGroupVersion: unversioned.GroupVersion{Group: extensions.GroupName, Version: registered.GroupOrDie(extensions.GroupName).GroupVersion.Version}, externalGroupVersion: unversioned.GroupVersion{Group: extensions.GroupName, Version: registered.GroupOrDie(extensions.GroupName).GroupVersion.Version},
internalGroupVersion: extensions.SchemeGroupVersion, internalGroupVersion: extensions.SchemeGroupVersion,
internalTypes: api.Scheme.KnownTypes(extensions.SchemeGroupVersion),
} }
} }
if _, ok := Groups[autoscaling.GroupName]; !ok { 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{ Groups[autoscaling.GroupName] = TestGroup{
externalGroupVersion: unversioned.GroupVersion{Group: autoscaling.GroupName, Version: registered.GroupOrDie(autoscaling.GroupName).GroupVersion.Version}, externalGroupVersion: unversioned.GroupVersion{Group: autoscaling.GroupName, Version: registered.GroupOrDie(autoscaling.GroupName).GroupVersion.Version},
internalGroupVersion: extensions.SchemeGroupVersion, 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 { if _, ok := Groups[batch.GroupName]; !ok {
Groups[batch.GroupName] = TestGroup{ Groups[batch.GroupName] = TestGroup{
externalGroupVersion: unversioned.GroupVersion{Group: batch.GroupName, Version: registered.GroupOrDie(batch.GroupName).GroupVersion.Version}, externalGroupVersion: unversioned.GroupVersion{Group: batch.GroupName, Version: registered.GroupOrDie(batch.GroupName).GroupVersion.Version},
internalGroupVersion: extensions.SchemeGroupVersion, internalGroupVersion: extensions.SchemeGroupVersion,
internalTypes: api.Scheme.KnownTypes(extensions.SchemeGroupVersion),
} }
} }
@ -115,6 +144,11 @@ func (g TestGroup) InternalGroupVersion() unversioned.GroupVersion {
return g.internalGroupVersion 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 // Codec returns the codec for the API version to test against, as set by the
// KUBE_TEST_API env var. // KUBE_TEST_API env var.
func (g TestGroup) Codec() runtime.Codec { 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) return nil, fmt.Errorf("unexpected kind: %v", kind)
} }
func NewTestGroup(external, internal unversioned.GroupVersion) TestGroup { func NewTestGroup(external, internal unversioned.GroupVersion, internalTypes map[string]reflect.Type) TestGroup {
return TestGroup{external, internal} return TestGroup{external, internal, internalTypes}
} }