From 7a6afe798913ae31ab546e697e158e81a8dfb13a Mon Sep 17 00:00:00 2001 From: Haowei Cai Date: Wed, 18 Nov 2020 19:21:25 -0800 Subject: [PATCH] make sure managedFields are written --- test/integration/apiserver/apiserver_test.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/integration/apiserver/apiserver_test.go b/test/integration/apiserver/apiserver_test.go index 0845898ec41..267e8bb0ef6 100644 --- a/test/integration/apiserver/apiserver_test.go +++ b/test/integration/apiserver/apiserver_test.go @@ -2216,6 +2216,7 @@ func TestDedupOwnerReferences(t *testing.T) { } klog.Infof("creating dependent with duplicate owner references") dependent := c.createDependentWithOwners([]metav1.OwnerReference{fakeRefA, fakeRefA}) + assertManagedFields(t, dependent) expectedWarning := fmt.Sprintf(handlers.DuplicateOwnerReferencesWarningFormat, fakeRefA.UID) assertOwnerReferences(t, dependent, []metav1.OwnerReference{fakeRefA}) assertWarningCount(t, warningWriter, previousWarningCount+1) @@ -2223,12 +2224,18 @@ func TestDedupOwnerReferences(t *testing.T) { klog.Infof("updating dependent with duplicate owner references") dependent = c.updateDependentWithOwners(dependent, []metav1.OwnerReference{fakeRefA, fakeRefA}) + assertManagedFields(t, dependent) assertOwnerReferences(t, dependent, []metav1.OwnerReference{fakeRefA}) assertWarningCount(t, warningWriter, previousWarningCount+2) assertWarningMessage(t, b, expectedWarning) klog.Infof("patching dependent with duplicate owner reference") dependent = c.patchDependentWithOwner(dependent, fakeRefA) + // TODO: currently a patch request that duplicates owner references can still + // wipe out managed fields. Note that this happens to built-in resources but + // not custom resources. In future we should either dedup before writing manage + // fields, or stop deduping and reject the request. + // assertManagedFields(t, dependent) expectedPatchWarning := fmt.Sprintf(handlers.DuplicateOwnerReferencesAfterMutatingAdmissionWarningFormat, fakeRefA.UID) assertOwnerReferences(t, dependent, []metav1.OwnerReference{fakeRefA}) assertWarningCount(t, warningWriter, previousWarningCount+3) @@ -2332,3 +2339,9 @@ func assertWarningMessage(t *testing.T, b *bytes.Buffer, expected string) { t.Errorf("unexpected warning message, expected: %v, got: %v", expected, actual) } } + +func assertManagedFields(t *testing.T, obj *unstructured.Unstructured) { + if len(obj.GetManagedFields()) == 0 { + t.Errorf("unexpected empty managed fields in object: %v", obj) + } +}