From 7314286efd28a6e0c6d05ffc8e7f07b2c3882a63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wojciech=20Tyczy=C5=84ski?= Date: Thu, 10 Feb 2022 15:15:07 +0100 Subject: [PATCH] Fix validation of event updates --- pkg/registry/core/event/strategy.go | 2 +- pkg/registry/core/event/strategy_test.go | 31 ++++++++++++++++++++++++ test/e2e/instrumentation/events.go | 23 ++++++++++++------ 3 files changed, 48 insertions(+), 8 deletions(-) diff --git a/pkg/registry/core/event/strategy.go b/pkg/registry/core/event/strategy.go index af7e3b8e514..94f76598f11 100644 --- a/pkg/registry/core/event/strategy.go +++ b/pkg/registry/core/event/strategy.go @@ -78,7 +78,7 @@ func (eventStrategy) AllowCreateOnUpdate() bool { func (eventStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { groupVersion := requestGroupVersion(ctx) event := obj.(*api.Event) - oldEvent := obj.(*api.Event) + oldEvent := old.(*api.Event) return validation.ValidateEventUpdate(event, oldEvent, groupVersion) } diff --git a/pkg/registry/core/event/strategy_test.go b/pkg/registry/core/event/strategy_test.go index 1f7010e0dc4..dc1dbb7e8bd 100644 --- a/pkg/registry/core/event/strategy_test.go +++ b/pkg/registry/core/event/strategy_test.go @@ -17,6 +17,7 @@ limitations under the License. package event import ( + "context" "reflect" "testing" @@ -117,3 +118,33 @@ func TestSelectableFieldLabelConversions(t *testing.T) { nil, ) } + +func TestValidateUpdate(t *testing.T) { + makeEvent := func(name string) *api.Event { + return &api.Event{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: "default", + ResourceVersion: "123", + }, + InvolvedObject: api.ObjectReference{ + Kind: "Pod", + Name: "foo", + Namespace: "default", + UID: "long uid string", + APIVersion: "v1", + ResourceVersion: "0", + FieldPath: "", + }, + Reason: "ForTesting", + Source: api.EventSource{Component: "test"}, + Type: api.EventTypeNormal, + } + } + eventA := makeEvent("eventA") + eventB := makeEvent("eventB") + errList := Strategy.ValidateUpdate(context.Background(), eventA, eventB) + if len(errList) == 0 { + t.Errorf("ValidateUpdate should fail on name change") + } +} diff --git a/test/e2e/instrumentation/events.go b/test/e2e/instrumentation/events.go index 6bf442e9e22..f0486a35df8 100644 --- a/test/e2e/instrumentation/events.go +++ b/test/e2e/instrumentation/events.go @@ -27,6 +27,7 @@ import ( apiequality "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/diff" + "k8s.io/apimachinery/pkg/util/strategicpatch" corev1 "k8s.io/client-go/kubernetes/typed/core/v1" typedeventsv1 "k8s.io/client-go/kubernetes/typed/events/v1" "k8s.io/kubernetes/test/e2e/framework" @@ -130,13 +131,20 @@ var _ = common.SIGDescribe("Events API", func() { framework.ExpectNoError(err, "failed to get test event") ginkgo.By("patching the test event") - eventPatchNote := "This is a test event - patched" - eventPatch, err := json.Marshal(map[string]interface{}{ - "note": eventPatchNote, - }) - framework.ExpectNoError(err, "failed to marshal the patch JSON payload") + oldData, err := json.Marshal(testEvent) + framework.ExpectNoError(err, "failed to marshal event") + newEvent := testEvent.DeepCopy() + eventSeries := &eventsv1.EventSeries{ + Count: 2, + LastObservedTime: metav1.MicroTime{Time: time.Unix(1505828951, 0)}, + } + newEvent.Series = eventSeries + newData, err := json.Marshal(newEvent) + framework.ExpectNoError(err, "failed to marshal new event") + patchBytes, err := strategicpatch.CreateTwoWayMergePatch(oldData, newData, eventsv1.Event{}) + framework.ExpectNoError(err, "failed to create two-way merge patch") - _, err = client.Patch(context.TODO(), eventName, types.StrategicMergePatchType, []byte(eventPatch), metav1.PatchOptions{}) + _, err = client.Patch(context.TODO(), eventName, types.StrategicMergePatchType, patchBytes, metav1.PatchOptions{}) framework.ExpectNoError(err, "failed to patch the test event") ginkgo.By("getting the test event") @@ -147,7 +155,8 @@ var _ = common.SIGDescribe("Events API", func() { testEvent.ObjectMeta.ResourceVersion = "" event.ObjectMeta.ManagedFields = nil testEvent.ObjectMeta.ManagedFields = nil - testEvent.Note = eventPatchNote + + testEvent.Series = eventSeries if !apiequality.Semantic.DeepEqual(testEvent, event) { framework.Failf("test event wasn't properly patched: %v", diff.ObjectReflectDiff(testEvent, event)) }