diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/capmanagers_test.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/capmanagers_test.go index 0fa20913886..b0ee5a0259d 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/capmanagers_test.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/capmanagers_test.go @@ -48,7 +48,7 @@ func (*fakeManager) Apply(_, _ runtime.Object, _ fieldmanager.Managed, _ string, } func TestCapManagersManagerMergesEntries(t *testing.T) { - f := fieldmanagertest.NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"), + f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"), "", func(m fieldmanager.Manager) fieldmanager.Manager { return fieldmanager.NewCapManagersManager(m, 3) @@ -114,7 +114,7 @@ func TestCapManagersManagerMergesEntries(t *testing.T) { } func TestCapUpdateManagers(t *testing.T) { - f := fieldmanagertest.NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"), + f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"), "", func(m fieldmanager.Manager) fieldmanager.Manager { return fieldmanager.NewCapManagersManager(m, 3) diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanager_test.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanager_test.go index b4b0ad88b35..e31556ba335 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanager_test.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanager_test.go @@ -17,9 +17,11 @@ limitations under the License. package fieldmanager_test import ( + "encoding/json" "fmt" "io/ioutil" "net/http" + "path/filepath" "reflect" "strings" "testing" @@ -34,15 +36,34 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer" yamlutil "k8s.io/apimachinery/pkg/util/yaml" + "k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager" "k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanagertest" "k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal" + "k8s.io/kube-openapi/pkg/validation/spec" "sigs.k8s.io/yaml" ) +var fakeTypeConverter = func() fieldmanager.TypeConverter { + data, err := ioutil.ReadFile(filepath.Join(strings.Repeat(".."+string(filepath.Separator), 8), + "api", "openapi-spec", "swagger.json")) + if err != nil { + panic(err) + } + spec := spec.Swagger{} + if err := json.Unmarshal(data, &spec); err != nil { + panic(err) + } + typeConverter, err := fieldmanager.NewTypeConverter(&spec, false) + if err != nil { + panic(err) + } + return typeConverter +}() + // TestUpdateApplyConflict tests that applying to an object, which // wasn't created by apply, will give conflicts func TestUpdateApplyConflict(t *testing.T) { - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment")) patch := []byte(`{ "apiVersion": "apps/v1", @@ -103,7 +124,7 @@ func TestUpdateApplyConflict(t *testing.T) { } func TestApplyStripsFields(t *testing.T) { - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment")) newObj := &unstructured.Unstructured{ Object: map[string]interface{}{ @@ -135,7 +156,7 @@ func TestApplyStripsFields(t *testing.T) { } func TestVersionCheck(t *testing.T) { - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment")) appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}} if err := yaml.Unmarshal([]byte(`{ @@ -175,7 +196,7 @@ func TestVersionCheck(t *testing.T) { } } func TestVersionCheckDoesNotPanic(t *testing.T) { - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment")) appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}} if err := yaml.Unmarshal([]byte(`{ @@ -214,7 +235,7 @@ func TestVersionCheckDoesNotPanic(t *testing.T) { } func TestApplyDoesNotStripLabels(t *testing.T) { - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod")) appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}} if err := yaml.Unmarshal([]byte(`{ @@ -268,7 +289,7 @@ func TestApplyNewObject(t *testing.T) { for _, test := range tests { t.Run(test.gvk.String(), func(t *testing.T) { - f := fieldmanagertest.NewDefaultTestFieldManager(test.gvk) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, test.gvk) appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}} if err := yaml.Unmarshal(test.obj, &appliedObj.Object); err != nil { @@ -306,7 +327,7 @@ func BenchmarkNewObject(b *testing.B) { } for _, test := range tests { b.Run(test.gvk.Kind, func(b *testing.B) { - f := fieldmanagertest.NewDefaultTestFieldManager(test.gvk) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, test.gvk) decoder := serializer.NewCodecFactory(scheme).UniversalDecoder(test.gvk.GroupVersion()) newObj, err := runtime.Decode(decoder, test.obj) @@ -412,8 +433,6 @@ func BenchmarkConvertObjectToTyped(b *testing.B) { for _, test := range tests { b.Run(test.gvk.Kind, func(b *testing.B) { decoder := serializer.NewCodecFactory(scheme).UniversalDecoder(test.gvk.GroupVersion()) - typeConverter := fieldmanagertest.NewBuiltinTypeConverter() - structured, err := runtime.Decode(decoder, test.obj) if err != nil { b.Fatalf("Failed to parse yaml object: %v", err) @@ -422,7 +441,7 @@ func BenchmarkConvertObjectToTyped(b *testing.B) { b.ReportAllocs() b.RunParallel(func(pb *testing.PB) { for pb.Next() { - _, err := typeConverter.ObjectToTyped(structured) + _, err := fakeTypeConverter.ObjectToTyped(structured) if err != nil { b.Errorf("Error in ObjectToTyped: %v", err) } @@ -435,7 +454,7 @@ func BenchmarkConvertObjectToTyped(b *testing.B) { b.ReportAllocs() b.RunParallel(func(pb *testing.PB) { for pb.Next() { - _, err := typeConverter.ObjectToTyped(unstructured) + _, err := fakeTypeConverter.ObjectToTyped(unstructured) if err != nil { b.Errorf("Error in ObjectToTyped: %v", err) } @@ -473,17 +492,15 @@ func BenchmarkCompare(b *testing.B) { for _, test := range tests { b.Run(test.gvk.Kind, func(b *testing.B) { decoder := serializer.NewCodecFactory(scheme).UniversalDecoder(test.gvk.GroupVersion()) - typeConverter := fieldmanagertest.NewBuiltinTypeConverter() - structured, err := runtime.Decode(decoder, test.obj) if err != nil { b.Fatal(err) } - tv1, err := typeConverter.ObjectToTyped(structured) + tv1, err := fakeTypeConverter.ObjectToTyped(structured) if err != nil { b.Errorf("Error in ObjectToTyped: %v", err) } - tv2, err := typeConverter.ObjectToTyped(structured) + tv2, err := fakeTypeConverter.ObjectToTyped(structured) if err != nil { b.Errorf("Error in ObjectToTyped: %v", err) } @@ -499,11 +516,11 @@ func BenchmarkCompare(b *testing.B) { }) unstructured := toUnstructured(b, structured) - utv1, err := typeConverter.ObjectToTyped(unstructured) + utv1, err := fakeTypeConverter.ObjectToTyped(unstructured) if err != nil { b.Errorf("Error in ObjectToTyped: %v", err) } - utv2, err := typeConverter.ObjectToTyped(unstructured) + utv2, err := fakeTypeConverter.ObjectToTyped(unstructured) if err != nil { b.Errorf("Error in ObjectToTyped: %v", err) } @@ -523,7 +540,7 @@ func BenchmarkCompare(b *testing.B) { } func BenchmarkRepeatedUpdate(b *testing.B) { - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod")) podBytes := getObjectBytes("pod.yaml") var obj *corev1.Pod @@ -562,7 +579,7 @@ func BenchmarkRepeatedUpdate(b *testing.B) { } func TestApplyFailsWithManagedFields(t *testing.T) { - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod")) appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}} if err := yaml.Unmarshal([]byte(`{ @@ -587,7 +604,7 @@ func TestApplyFailsWithManagedFields(t *testing.T) { } func TestApplySuccessWithNoManagedFields(t *testing.T) { - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod")) appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}} if err := yaml.Unmarshal([]byte(`{ @@ -610,7 +627,7 @@ func TestApplySuccessWithNoManagedFields(t *testing.T) { // Run an update and apply, and make sure that nothing has changed. func TestNoOpChanges(t *testing.T) { - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod")) obj := &unstructured.Unstructured{Object: map[string]interface{}{}} if err := yaml.Unmarshal([]byte(`{ @@ -661,7 +678,7 @@ func TestNoOpChanges(t *testing.T) { // Tests that one can reset the managedFields by sending either an empty // list func TestResetManagedFieldsEmptyList(t *testing.T) { - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod")) obj := &unstructured.Unstructured{Object: map[string]interface{}{}} if err := yaml.Unmarshal([]byte(`{ @@ -702,7 +719,7 @@ func TestResetManagedFieldsEmptyList(t *testing.T) { // Tests that one can reset the managedFields by sending either a list with one empty item. func TestResetManagedFieldsEmptyItem(t *testing.T) { - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod")) obj := &unstructured.Unstructured{Object: map[string]interface{}{}} if err := yaml.Unmarshal([]byte(`{ @@ -742,7 +759,7 @@ func TestResetManagedFieldsEmptyItem(t *testing.T) { } func TestServerSideApplyWithInvalidLastApplied(t *testing.T) { - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment")) // create object with client-side apply newObj := &unstructured.Unstructured{Object: map[string]interface{}{}} @@ -821,7 +838,7 @@ spec: } func TestInteropForClientSideApplyAndServerSideApply(t *testing.T) { - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment")) // create object with client-side apply newObj := &unstructured.Unstructured{Object: map[string]interface{}{}} @@ -905,7 +922,7 @@ spec: } func TestNoTrackManagedFieldsForClientSideApply(t *testing.T) { - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment")) // create object newObj := &unstructured.Unstructured{Object: map[string]interface{}{}} @@ -1085,7 +1102,7 @@ func getLastApplied(obj runtime.Object) (string, error) { } func TestUpdateViaSubresources(t *testing.T) { - f := fieldmanagertest.NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"), "scale", nil) + f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"), "scale", nil) obj := &unstructured.Unstructured{Object: map[string]interface{}{}} if err := yaml.Unmarshal([]byte(`{ @@ -1140,7 +1157,7 @@ func TestUpdateViaSubresources(t *testing.T) { // Ensures that a no-op Apply does not mutate managed fields func TestApplyDoesNotChangeManagedFields(t *testing.T) { originalManagedFields := []metav1.ManagedFieldsEntry{} - f := fieldmanagertest.NewDefaultTestFieldManager( + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment")) newObj := &unstructured.Unstructured{ Object: map[string]interface{}{}, @@ -1234,7 +1251,7 @@ func TestApplyDoesNotChangeManagedFields(t *testing.T) { // Ensures that a no-op Update does not mutate managed fields func TestUpdateDoesNotChangeManagedFields(t *testing.T) { originalManagedFields := []metav1.ManagedFieldsEntry{} - f := fieldmanagertest.NewDefaultTestFieldManager( + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment")) newObj := &unstructured.Unstructured{ Object: map[string]interface{}{}, @@ -1306,7 +1323,7 @@ func TestUpdateDoesNotChangeManagedFields(t *testing.T) { // This test makes sure that the liveObject during a patch does not mutate // its managed fields. func TestLiveObjectManagedFieldsNotRemoved(t *testing.T) { - f := fieldmanagertest.NewDefaultTestFieldManager( + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment")) newObj := &unstructured.Unstructured{ Object: map[string]interface{}{}, diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanagertest/testfieldmanager.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanagertest/testfieldmanager.go index 5538f793bfd..53d0154f01d 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanagertest/testfieldmanager.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanagertest/testfieldmanager.go @@ -17,12 +17,8 @@ limitations under the License. package fieldmanagertest import ( - "encoding/json" "errors" "fmt" - "io/ioutil" - "path/filepath" - "strings" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -30,36 +26,11 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager" - "k8s.io/kube-openapi/pkg/validation/spec" "sigs.k8s.io/structured-merge-diff/v4/fieldpath" "sigs.k8s.io/structured-merge-diff/v4/merge" "sigs.k8s.io/structured-merge-diff/v4/typed" ) -var builtinConverter = func() fieldmanager.TypeConverter { - data, err := ioutil.ReadFile(filepath.Join( - strings.Repeat(".."+string(filepath.Separator), 8), - "api", "openapi-spec", "swagger.json")) - if err != nil { - panic(err) - } - spec := spec.Swagger{} - if err := json.Unmarshal(data, &spec); err != nil { - panic(err) - } - tc, err := fieldmanager.NewTypeConverter(&spec, false) - if err != nil { - panic(fmt.Errorf("Failed to build TypeConverter: %v", err)) - } - return tc -}() - -// NewBuiltinTypeConverter creates a TypeConverter with all the built-in -// types defined, given the committed kubernetes swagger.json. -func NewBuiltinTypeConverter() fieldmanager.TypeConverter { - return builtinConverter -} - type fakeObjectConvertor struct { converter merge.Converter apiVersion fieldpath.APIVersion @@ -132,13 +103,12 @@ type TestFieldManager struct { // NewDefaultTestFieldManager returns a new TestFieldManager built for // the given gvk, on the main resource. -func NewDefaultTestFieldManager(gvk schema.GroupVersionKind) TestFieldManager { - return NewTestFieldManager(gvk, "", nil) +func NewDefaultTestFieldManager(typeConverter fieldmanager.TypeConverter, gvk schema.GroupVersionKind) TestFieldManager { + return NewTestFieldManager(typeConverter, gvk, "", nil) } // NewTestFieldManager creates a new manager for the given GVK. -func NewTestFieldManager(gvk schema.GroupVersionKind, subresource string, chainFieldManager func(fieldmanager.Manager) fieldmanager.Manager) TestFieldManager { - typeConverter := NewBuiltinTypeConverter() +func NewTestFieldManager(typeConverter fieldmanager.TypeConverter, gvk schema.GroupVersionKind, subresource string, chainFieldManager func(fieldmanager.Manager) fieldmanager.Manager) TestFieldManager { apiVersion := fieldpath.APIVersion(gvk.GroupVersion().String()) objectConverter := &fakeObjectConvertor{sameVersionConverter{}, apiVersion} f, err := fieldmanager.NewStructuredMergeManager( diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/lastappliedmanager_test.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/lastappliedmanager_test.go index 9c49b9c19c3..cc7cf935100 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/lastappliedmanager_test.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/lastappliedmanager_test.go @@ -44,7 +44,7 @@ type testArgs struct { // created with the client-side apply last-applied annotation // will not give conflicts func TestApplyUsingLastAppliedAnnotation(t *testing.T) { - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment")) tests := []testArgs{ { @@ -564,7 +564,7 @@ spec: } func TestServiceApply(t *testing.T) { - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "Service")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Service")) tests := []testArgs{ { @@ -675,7 +675,7 @@ spec: } func TestReplicationControllerApply(t *testing.T) { - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "ReplicationController")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ReplicationController")) tests := []testArgs{ { @@ -738,7 +738,7 @@ spec: } func TestPodApply(t *testing.T) { - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod")) tests := []testArgs{ { diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/lastappliedupdater_test.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/lastappliedupdater_test.go index 8b7d6160583..dc9e7ff2455 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/lastappliedupdater_test.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/lastappliedupdater_test.go @@ -32,7 +32,7 @@ import ( ) func TestLastAppliedUpdater(t *testing.T) { - f := fieldmanagertest.NewTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment"), + f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"), "", func(m fieldmanager.Manager) fieldmanager.Manager { return fieldmanager.NewLastAppliedUpdater(m) @@ -189,7 +189,7 @@ func TestLargeLastApplied(t *testing.T) { } for _, test := range tests { t.Run(test.name, func(t *testing.T) { - f := fieldmanagertest.NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap"), + f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"), "", func(m fieldmanager.Manager) fieldmanager.Manager { return fieldmanager.NewLastAppliedUpdater(m) diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/managedfieldsupdater_test.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/managedfieldsupdater_test.go index b0c717a70a5..27b5a1f23cb 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/managedfieldsupdater_test.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/managedfieldsupdater_test.go @@ -36,7 +36,7 @@ import ( func TestManagedFieldsUpdateDoesModifyTime(t *testing.T) { var err error - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap")) err = updateObject(&f, "fieldmanager_test", []byte(`{ "apiVersion": "v1", @@ -77,7 +77,7 @@ func TestManagedFieldsUpdateDoesModifyTime(t *testing.T) { func TestManagedFieldsApplyDoesModifyTime(t *testing.T) { var err error - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap")) err = applyObject(&f, "fieldmanager_test", []byte(`{ "apiVersion": "v1", @@ -118,7 +118,7 @@ func TestManagedFieldsApplyDoesModifyTime(t *testing.T) { func TestManagedFieldsUpdateWithoutChangesDoesNotModifyTime(t *testing.T) { var err error - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap")) err = updateObject(&f, "fieldmanager_test", []byte(`{ "apiVersion": "v1", @@ -159,7 +159,7 @@ func TestManagedFieldsUpdateWithoutChangesDoesNotModifyTime(t *testing.T) { func TestManagedFieldsApplyWithoutChangesDoesNotModifyTime(t *testing.T) { var err error - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap")) err = applyObject(&f, "fieldmanager_test", []byte(`{ "apiVersion": "v1", @@ -200,7 +200,7 @@ func TestManagedFieldsApplyWithoutChangesDoesNotModifyTime(t *testing.T) { func TestNonManagedFieldsUpdateDoesNotModifyTime(t *testing.T) { var err error - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap")) err = updateObject(&f, "fieldmanager_a_test", []byte(`{ "apiVersion": "v1", @@ -263,7 +263,7 @@ func TestNonManagedFieldsUpdateDoesNotModifyTime(t *testing.T) { func TestNonManagedFieldsApplyDoesNotModifyTime(t *testing.T) { var err error - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap")) err = applyObject(&f, "fieldmanager_a_test", []byte(`{ "apiVersion": "v1", @@ -326,7 +326,7 @@ func TestNonManagedFieldsApplyDoesNotModifyTime(t *testing.T) { func TestTakingOverManagedFieldsDuringUpdateDoesNotModifyPreviousManagerTime(t *testing.T) { var err error - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap")) err = updateObject(&f, "fieldmanager_a_test", []byte(`{ "apiVersion": "v1", @@ -377,7 +377,7 @@ func TestTakingOverManagedFieldsDuringUpdateDoesNotModifyPreviousManagerTime(t * func TestTakingOverManagedFieldsDuringApplyDoesNotModifyPreviousManagerTime(t *testing.T) { var err error - f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap")) + f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap")) err = applyObject(&f, "fieldmanager_a_test", []byte(`{ "apiVersion": "v1", diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/skipnonapplied_test.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/skipnonapplied_test.go index fc99a9b2fc2..1373676706f 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/skipnonapplied_test.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/skipnonapplied_test.go @@ -30,7 +30,7 @@ import ( ) func TestNoUpdateBeforeFirstApply(t *testing.T) { - f := fieldmanagertest.NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"), "", func(m fieldmanager.Manager) fieldmanager.Manager { + f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"), "", func(m fieldmanager.Manager) fieldmanager.Manager { return fieldmanager.NewSkipNonAppliedManager( m, fieldmanagertest.NewFakeObjectCreater(), @@ -70,7 +70,7 @@ func TestNoUpdateBeforeFirstApply(t *testing.T) { } func TestUpdateBeforeFirstApply(t *testing.T) { - f := fieldmanagertest.NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"), "", func(m fieldmanager.Manager) fieldmanager.Manager { + f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"), "", func(m fieldmanager.Manager) fieldmanager.Manager { return fieldmanager.NewSkipNonAppliedManager( m, fieldmanagertest.NewFakeObjectCreater(), diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/typeconverter_test.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/typeconverter_test.go index 58c0cf5abf0..a51abd8cc95 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/typeconverter_test.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/typeconverter_test.go @@ -32,7 +32,7 @@ import ( "k8s.io/kube-openapi/pkg/validation/spec" ) -var testSchema = func() *spec.Swagger { +var testTypeConverter = func() fieldmanager.TypeConverter { data, err := ioutil.ReadFile(filepath.Join("testdata", "swagger.json")) if err != nil { panic(err) @@ -41,15 +41,14 @@ var testSchema = func() *spec.Swagger { if err := json.Unmarshal(data, &spec); err != nil { panic(err) } - return &spec + typeConverter, err := fieldmanager.NewTypeConverter(&spec, false) + if err != nil { + panic(err) + } + return typeConverter }() func TestTypeConverter(t *testing.T) { - tc, err := fieldmanager.NewTypeConverter(testSchema, false) - if err != nil { - t.Fatalf("Failed to build TypeConverter: %v", err) - } - dtc := fieldmanager.DeducedTypeConverter{} testCases := []struct { @@ -119,7 +118,7 @@ spec: for _, testCase := range testCases { t.Run(fmt.Sprintf("%v ObjectToTyped with TypeConverter", testCase.name), func(t *testing.T) { - testObjectToTyped(t, tc, testCase.yaml) + testObjectToTyped(t, testTypeConverter, testCase.yaml) }) t.Run(fmt.Sprintf("%v ObjectToTyped with DeducedTypeConverter", testCase.name), func(t *testing.T) { testObjectToTyped(t, dtc, testCase.yaml) @@ -177,18 +176,13 @@ spec: b.Fatalf("Failed to parse yaml object: %v", err) } - tc, err := fieldmanager.NewTypeConverter(testSchema, false) - if err != nil { - b.Fatalf("Failed to build TypeConverter: %v", err) - } - b.ResetTimer() b.ReportAllocs() var r *typed.TypedValue for i := 0; i < b.N; i++ { var err error - r, err = tc.ObjectToTyped(obj) + r, err = testTypeConverter.ObjectToTyped(obj) if err != nil { b.Fatalf("Failed to convert object to typed: %v", err) }