From a50931ba7e27aa85d2ea9dda2fc9cb4057f37bd3 Mon Sep 17 00:00:00 2001 From: Ted Yu Date: Fri, 30 Aug 2019 14:47:39 -0700 Subject: [PATCH] Move Update Apply conflict test to field manager test Kubernetes-commit: 9828f986afd4db79a10c78bee1cc2e449faee3a6 --- .../fieldmanager/fieldmanager_test.go | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/pkg/endpoints/handlers/fieldmanager/fieldmanager_test.go b/pkg/endpoints/handlers/fieldmanager/fieldmanager_test.go index 7b747dcb0..added034b 100644 --- a/pkg/endpoints/handlers/fieldmanager/fieldmanager_test.go +++ b/pkg/endpoints/handlers/fieldmanager/fieldmanager_test.go @@ -100,6 +100,67 @@ func TestUpdateOnlyDoesNotTrackManagedFields(t *testing.T) { } } +// TestUpdateApplyConflict tests that applying to an object, which wasn't created by apply, will give conflicts +func TestUpdateApplyConflict(t *testing.T) { + f := NewTestFieldManager() + + obj := &corev1.Pod{} + obj.ObjectMeta.ManagedFields = []metav1.ManagedFieldsEntry{{}} + + patch := []byte(`{ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "deployment", + "labels": {"app": "nginx"} + }, + "spec": { + "replicas": 3, + "selector": { + "matchLabels": { + "app": "nginx" + } + }, + "template": { + "metadata": { + "labels": { + "app": "nginx" + } + }, + "spec": { + "containers": [{ + "name": "nginx", + "image": "nginx:latest" + }] + } + } + } + }`) + newObj := &unstructured.Unstructured{Object: map[string]interface{}{}} + if err := yaml.Unmarshal(patch, &newObj.Object); err != nil { + t.Fatalf("error decoding YAML: %v", err) + } + + savedObject, err := f.Update(obj, newObj, "fieldmanager_test") + if err != nil { + t.Fatalf("failed to apply object: %v", err) + } + + _, err = f.Apply(savedObject, []byte(`{ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "deployment", + }, + "spec": { + "replicas": 101, + } + }`), "fieldmanager_conflict", false) + if err == nil || !apierrors.IsConflict(err) { + t.Fatalf("Expecting to get conflicts but got %v", err) + } +} + func TestApplyStripsFields(t *testing.T) { f := NewTestFieldManager()