Merge pull request #86858 from ii/create-event-test-to-ensure-creating-modifying-patching-deleting-and-listing

Create Event lifecycle test - +5 endpoint coverage
This commit is contained in:
Kubernetes Prow Robot 2020-03-31 21:31:27 -07:00 committed by GitHub
commit 53eb7cd733
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 95 additions and 0 deletions

View File

@ -6,9 +6,13 @@ go_library(
importpath = "k8s.io/kubernetes/test/e2e/framework/events",
visibility = ["//visibility:public"],
deps = [
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//test/e2e/framework:go_default_library",
"//vendor/github.com/onsi/ginkgo:go_default_library",
],
)

View File

@ -18,15 +18,106 @@ package events
import (
"context"
"encoding/json"
"fmt"
"strings"
"time"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/wait"
clientset "k8s.io/client-go/kubernetes"
"k8s.io/kubernetes/test/e2e/framework"
"github.com/onsi/ginkgo"
"k8s.io/apimachinery/pkg/types"
)
// Action is a function to be performed by the system.
type Action func() error
var _ = ginkgo.Describe("[sig-api-machinery] Events", func() {
f := framework.NewDefaultFramework("events")
ginkgo.It("should ensure that an event can be fetched, patched, deleted, and listed", func() {
eventTestName := "event-test"
ginkgo.By("creating a test event")
// create a test event in test namespace
_, err := f.ClientSet.CoreV1().Events(f.Namespace.Name).Create(context.TODO(), &v1.Event{
ObjectMeta: metav1.ObjectMeta{
Name: eventTestName,
Labels: map[string]string{
"testevent-constant": "true",
},
},
Message: "This is a test event",
Reason: "Test",
Type: "Normal",
Count: 1,
InvolvedObject: v1.ObjectReference{
Namespace: f.Namespace.Name,
},
}, metav1.CreateOptions{})
framework.ExpectNoError(err, "failed to create test event")
ginkgo.By("listing all events in all namespaces")
// get a list of Events in all namespaces to ensure endpoint coverage
eventsList, err := f.ClientSet.CoreV1().Events("").List(context.TODO(), metav1.ListOptions{
LabelSelector: "testevent-constant=true",
})
framework.ExpectNoError(err, "failed list all events")
foundCreatedEvent := false
var eventCreatedName string
for _, val := range eventsList.Items {
if val.ObjectMeta.Name == eventTestName && val.ObjectMeta.Namespace == f.Namespace.Name {
foundCreatedEvent = true
eventCreatedName = val.ObjectMeta.Name
break
}
}
framework.ExpectEqual(foundCreatedEvent, true, "unable to find the test event")
ginkgo.By("patching the test event")
// patch the event's message
eventPatchMessage := "This is a test event - patched"
eventPatch, err := json.Marshal(map[string]interface{}{
"message": eventPatchMessage,
})
framework.ExpectNoError(err, "failed to marshal the patch JSON payload")
_, err = f.ClientSet.CoreV1().Events(f.Namespace.Name).Patch(context.TODO(), eventTestName, types.StrategicMergePatchType, []byte(eventPatch), metav1.PatchOptions{})
framework.ExpectNoError(err, "failed to patch the test event")
ginkgo.By("fetching the test event")
// get event by name
event, err := f.ClientSet.CoreV1().Events(f.Namespace.Name).Get(context.TODO(), eventCreatedName, metav1.GetOptions{})
framework.ExpectNoError(err, "failed to fetch the test event")
framework.ExpectEqual(event.Message, eventPatchMessage, "test event message does not match patch message")
ginkgo.By("deleting the test event")
// delete original event
err = f.ClientSet.CoreV1().Events(f.Namespace.Name).Delete(context.TODO(), eventCreatedName, metav1.DeleteOptions{})
framework.ExpectNoError(err, "failed to delete the test event")
ginkgo.By("listing all events in all namespaces")
// get a list of Events list namespace
eventsList, err = f.ClientSet.CoreV1().Events("").List(context.TODO(), metav1.ListOptions{
LabelSelector: "testevent-constant=true",
})
framework.ExpectNoError(err, "fail to list all events")
foundCreatedEvent = false
for _, val := range eventsList.Items {
if val.ObjectMeta.Name == eventTestName && val.ObjectMeta.Namespace == f.Namespace.Name {
foundCreatedEvent = true
break
}
}
framework.ExpectEqual(foundCreatedEvent, false, "should not have found test event after deletion")
})
})
// WaitTimeoutForEvent waits the given timeout duration for an event to occur.
func WaitTimeoutForEvent(c clientset.Interface, namespace, eventSelector, msg string, timeout time.Duration) error {
interval := 2 * time.Second