diff --git a/test/e2e/common/container_probe.go b/test/e2e/common/container_probe.go index 585e6fff4bf..fea24588cd8 100644 --- a/test/e2e/common/container_probe.go +++ b/test/e2e/common/container_probe.go @@ -259,8 +259,8 @@ var _ = framework.KubeDescribe("Probing container", func() { "involvedObject.namespace": f.Namespace.Name, "reason": events.ContainerProbeWarning, }.AsSelector().String() - framework.ExpectNoError(e2epod.WaitTimeoutForPodEvent( - f.ClientSet, pod.Name, f.Namespace.Name, expectedEvent, "0.0.0.0", framework.PodEventTimeout)) + framework.ExpectNoError(WaitTimeoutForEvent( + f.ClientSet, f.Namespace.Name, expectedEvent, "0.0.0.0", framework.PodEventTimeout)) }) }) diff --git a/test/e2e/common/events.go b/test/e2e/common/events.go index 8fd5833ef45..1d3b7f45a0e 100644 --- a/test/e2e/common/events.go +++ b/test/e2e/common/events.go @@ -18,6 +18,7 @@ package common import ( "fmt" + "strings" "sync" "time" @@ -27,6 +28,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" + clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/cache" "k8s.io/kubernetes/test/e2e/framework" @@ -149,3 +151,25 @@ func ObserveEventAfterAction(f *framework.Framework, eventPredicate func(*v1.Eve }) return err == nil, err } + +// 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 + return wait.PollImmediate(interval, timeout, eventOccurred(c, namespace, eventSelector, msg)) +} + +func eventOccurred(c clientset.Interface, namespace, eventSelector, msg string) wait.ConditionFunc { + options := metav1.ListOptions{FieldSelector: eventSelector} + return func() (bool, error) { + events, err := c.CoreV1().Events(namespace).List(options) + if err != nil { + return false, fmt.Errorf("got error while getting events: %v", err) + } + for _, event := range events.Items { + if strings.Contains(event.Message, msg) { + return true, nil + } + } + return false, nil + } +} diff --git a/test/e2e/common/runtimeclass.go b/test/e2e/common/runtimeclass.go index 6182985019a..f400a48863e 100644 --- a/test/e2e/common/runtimeclass.go +++ b/test/e2e/common/runtimeclass.go @@ -144,6 +144,6 @@ func expectSandboxFailureEvent(f *framework.Framework, pod *v1.Pod, msg string) "involvedObject.namespace": f.Namespace.Name, "reason": events.FailedCreatePodSandBox, }.AsSelector().String() - framework.ExpectNoError(e2epod.WaitTimeoutForPodEvent( - f.ClientSet, pod.Name, f.Namespace.Name, eventSelector, msg, framework.PodEventTimeout)) + framework.ExpectNoError(WaitTimeoutForEvent( + f.ClientSet, f.Namespace.Name, eventSelector, msg, framework.PodEventTimeout)) } diff --git a/test/e2e/framework/pod/wait.go b/test/e2e/framework/pod/wait.go index 8650f763cdf..36503d88b55 100644 --- a/test/e2e/framework/pod/wait.go +++ b/test/e2e/framework/pod/wait.go @@ -20,7 +20,6 @@ import ( "bytes" "errors" "fmt" - "strings" "sync" "text/tabwriter" "time" @@ -348,27 +347,6 @@ func WaitForPodRunningInNamespace(c clientset.Interface, pod *v1.Pod) error { return WaitTimeoutForPodRunningInNamespace(c, pod.Name, pod.Namespace, podStartTimeout) } -// WaitTimeoutForPodEvent waits the given timeout duration for a pod event to occur. -func WaitTimeoutForPodEvent(c clientset.Interface, podName, namespace, eventSelector, msg string, timeout time.Duration) error { - return wait.PollImmediate(poll, timeout, eventOccurred(c, podName, namespace, eventSelector, msg)) -} - -func eventOccurred(c clientset.Interface, podName, namespace, eventSelector, msg string) wait.ConditionFunc { - options := metav1.ListOptions{FieldSelector: eventSelector} - return func() (bool, error) { - events, err := c.CoreV1().Events(namespace).List(options) - if err != nil { - return false, fmt.Errorf("got error while getting pod events: %s", err) - } - for _, event := range events.Items { - if strings.Contains(event.Message, msg) { - return true, nil - } - } - return false, nil - } -} - // WaitTimeoutForPodNoLongerRunningInNamespace waits the given timeout duration for the specified pod to stop. func WaitTimeoutForPodNoLongerRunningInNamespace(c clientset.Interface, podName, namespace string, timeout time.Duration) error { return wait.PollImmediate(poll, timeout, podCompleted(c, podName, namespace)) diff --git a/test/e2e/storage/testsuites/BUILD b/test/e2e/storage/testsuites/BUILD index 59483bfac09..156107edc39 100644 --- a/test/e2e/storage/testsuites/BUILD +++ b/test/e2e/storage/testsuites/BUILD @@ -38,6 +38,7 @@ go_library( "//staging/src/k8s.io/client-go/dynamic:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/csi-translation-lib:go_default_library", + "//test/e2e/common:go_default_library", "//test/e2e/framework:go_default_library", "//test/e2e/framework/log:go_default_library", "//test/e2e/framework/metrics:go_default_library", diff --git a/test/e2e/storage/testsuites/volumemode.go b/test/e2e/storage/testsuites/volumemode.go index be837832f0d..ac94dff7a66 100644 --- a/test/e2e/storage/testsuites/volumemode.go +++ b/test/e2e/storage/testsuites/volumemode.go @@ -29,9 +29,9 @@ import ( "k8s.io/apimachinery/pkg/fields" clientset "k8s.io/client-go/kubernetes" "k8s.io/kubernetes/pkg/kubelet/events" + "k8s.io/kubernetes/test/e2e/common" "k8s.io/kubernetes/test/e2e/framework" e2elog "k8s.io/kubernetes/test/e2e/framework/log" - e2epod "k8s.io/kubernetes/test/e2e/framework/pod" "k8s.io/kubernetes/test/e2e/storage/testpatterns" "k8s.io/kubernetes/test/e2e/storage/utils" ) @@ -270,7 +270,7 @@ func (t *volumeModeTestSuite) defineTests(driver TestDriver, pattern testpattern } else { msg = "has volumeMode Filesystem, but is specified in volumeDevices" } - err = e2epod.WaitTimeoutForPodEvent(l.cs, pod.Name, l.ns.Name, eventSelector, msg, framework.PodStartTimeout) + err = common.WaitTimeoutForEvent(l.cs, l.ns.Name, eventSelector, msg, framework.PodStartTimeout) // Events are unreliable, don't depend on them. They're used only to speed up the test. if err != nil { e2elog.Logf("Warning: did not get event about mismatched volume use")