diff --git a/testing/fixture.go b/testing/fixture.go index 15b3e533..3e749782 100644 --- a/testing/fixture.go +++ b/testing/fixture.go @@ -19,7 +19,6 @@ package testing import ( "fmt" "reflect" - "sigs.k8s.io/structured-merge-diff/v4/typed" "sigs.k8s.io/yaml" "sort" "strings" @@ -945,62 +944,3 @@ func assertOptionalSingleArgument[T any](arguments []T) (T, error) { return a, fmt.Errorf("expected only one option argument but got %d", len(arguments)) } } - -type TypeResolver interface { - Type(openAPIName string) typed.ParseableType -} - -type TypeConverter struct { - Scheme *runtime.Scheme - TypeResolver TypeResolver -} - -func (tc TypeConverter) ObjectToTyped(obj runtime.Object, opts ...typed.ValidationOptions) (*typed.TypedValue, error) { - gvk := obj.GetObjectKind().GroupVersionKind() - name, err := tc.openAPIName(gvk) - if err != nil { - return nil, err - } - t := tc.TypeResolver.Type(name) - switch o := obj.(type) { - case *unstructured.Unstructured: - return t.FromUnstructured(o.UnstructuredContent(), opts...) - default: - return t.FromStructured(obj, opts...) - } -} - -func (tc TypeConverter) TypedToObject(value *typed.TypedValue) (runtime.Object, error) { - vu := value.AsValue().Unstructured() - switch o := vu.(type) { - case map[string]interface{}: - return &unstructured.Unstructured{Object: o}, nil - default: - return nil, fmt.Errorf("failed to convert value to unstructured for type %T", vu) - } -} - -func (tc TypeConverter) openAPIName(kind schema.GroupVersionKind) (string, error) { - example, err := tc.Scheme.New(kind) - if err != nil { - return "", err - } - rtype := reflect.TypeOf(example).Elem() - name := friendlyName(rtype.PkgPath() + "." + rtype.Name()) - return name, nil -} - -// This is a copy of openapi.friendlyName. -// TODO: consider introducing a shared version of this function in apimachinery. -func friendlyName(name string) string { - nameParts := strings.Split(name, "/") - // Reverse first part. e.g., io.k8s... instead of k8s.io... - if len(nameParts) > 0 && strings.Contains(nameParts[0], ".") { - parts := strings.Split(nameParts[0], ".") - for i, j := 0, len(parts)-1; i < j; i, j = i+1, j-1 { - parts[i], parts[j] = parts[j], parts[i] - } - nameParts[0] = strings.Join(parts, ".") - } - return strings.Join(nameParts, ".") -} diff --git a/testing/fixture_test.go b/testing/fixture_test.go index 0954edc5..2fa67cd6 100644 --- a/testing/fixture_test.go +++ b/testing/fixture_test.go @@ -572,7 +572,7 @@ func configMapTypeConverter(scheme *runtime.Scheme) managedfields.TypeConverter panic(fmt.Sprintf("Failed to parse schema: %v", err)) } - return TypeConverter{Scheme: scheme, TypeResolver: parser} + return managedfields.NewSchemeTypeConverter(scheme, parser) } var configMapTypedSchema = typed.YAMLObject(`types: