func doRoundTripTest(group testapi.TestGroup, kind string, t *testing.T) { item, err := api.Scheme.New(group.InternalGroupVersion().WithKind(kind)) if err != nil { t.Fatalf("Couldn't make a %v? %v", kind, err) } if _, err := meta.TypeAccessor(item); err != nil { t.Fatalf("%q is not a TypeMeta and cannot be tested - add it to nonRoundTrippableTypes: %v", kind, err) } if api.Scheme.Recognizes(group.GroupVersion().WithKind(kind)) { roundTripSame(t, group, item, nonRoundTrippableTypesByVersion[kind]...) } if !nonInternalRoundTrippableTypes.Has(kind) && api.Scheme.Recognizes(group.GroupVersion().WithKind(kind)) { roundTrip(t, group.Codec(), fuzzInternalObject(t, group.InternalGroupVersion(), item, rand.Int63())) } }
// roundTripSame verifies the same source object is tested in all API versions. func roundTripSame(t *testing.T, group testapi.TestGroup, item runtime.Object, except ...string) { set := sets.NewString(except...) seed := rand.Int63() fuzzInternalObject(t, group.InternalGroupVersion(), item, seed) version := *group.GroupVersion() codecs := []runtime.Codec{} for _, fn := range codecsToTest { codec, err := fn(version, item) if err != nil { t.Errorf("unable to get codec: %v", err) return } codecs = append(codecs, codec) } if !set.Has(version.String()) { fuzzInternalObject(t, version, item, seed) for _, codec := range codecs { roundTrip(t, codec, item) } } }
func readSwaggerApiFile(group testapi.TestGroup) ([]byte, error) { // TODO: Figure out a better way of finding these files var pathToSwaggerSpec string if group.GroupVersion().Group == "" { pathToSwaggerSpec = "../../../api/swagger-spec/" + group.GroupVersion().Version + ".json" } else { pathToSwaggerSpec = "../../../api/swagger-spec/" + group.GroupVersion().Group + "_" + group.GroupVersion().Version + ".json" } return ioutil.ReadFile(pathToSwaggerSpec) }