From cfe96c08b9a4bf2020816f2bc201780614369ed0 Mon Sep 17 00:00:00 2001 From: Robert Rati Date: Fri, 6 Feb 2015 15:20:14 -0500 Subject: [PATCH 1/2] Moved kubelet_sends_events to create new events test suite #4220 --- test/e2e/{kubelet_sends_events.go => events.go} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/e2e/{kubelet_sends_events.go => events.go} (100%) diff --git a/test/e2e/kubelet_sends_events.go b/test/e2e/events.go similarity index 100% rename from test/e2e/kubelet_sends_events.go rename to test/e2e/events.go From 50133752426bdb14571a8972b3c41df8e3567be3 Mon Sep 17 00:00:00 2001 From: Robert Rati Date: Fri, 6 Feb 2015 15:54:17 -0500 Subject: [PATCH 2/2] Converted TestKubeletSendsEvent to native ginkgo syntax #4220 --- test/e2e/events.go | 179 ++++++++++++++++++++++----------------------- 1 file changed, 89 insertions(+), 90 deletions(-) diff --git a/test/e2e/events.go b/test/e2e/events.go index b0eb0c47ca..dae21c8df5 100644 --- a/test/e2e/events.go +++ b/test/e2e/events.go @@ -17,6 +17,7 @@ limitations under the License. package e2e import ( + "fmt" "strconv" "time" @@ -24,108 +25,106 @@ import ( "github.com/GoogleCloudPlatform/kubernetes/pkg/client" "github.com/GoogleCloudPlatform/kubernetes/pkg/labels" "github.com/GoogleCloudPlatform/kubernetes/pkg/util" - "github.com/golang/glog" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) -// TestKubeletSendsEvent checks that kubelets and scheduler send events about pods scheduling and running. -func TestKubeletSendsEvent(c *client.Client) bool { - provider := testContext.provider - if len(provider) > 0 && provider != "gce" && provider != "gke" && provider != "aws" { - glog.Infof("skipping TestKubeletSendsEvent on cloud provider %s", provider) - return true - } +var _ = Describe("Events", func() { + var c *client.Client - podClient := c.Pods(api.NamespaceDefault) + BeforeEach(func() { + c = loadClientOrDie() + }) - name := "send-events-" + string(util.NewUUID()) - value := strconv.Itoa(time.Now().Nanosecond()) - pod := &api.Pod{ - ObjectMeta: api.ObjectMeta{ - Name: name, - Labels: map[string]string{ - "name": "foo", - "time": value, - }, - }, - Spec: api.PodSpec{ - Containers: []api.Container{ - { - Name: "p", - Image: "kubernetes/serve_hostname", - Ports: []api.Port{{ContainerPort: 80, HostPort: 8080}}, + It("should be sent by kubelets and the scheduler about pods scheduling and running", func() { + provider := testContext.provider + if len(provider) > 0 && provider != "gce" && provider != "gke" && provider != "aws" { + By(fmt.Sprintf("skipping TestKubeletSendsEvent on cloud provider %s", provider)) + return + } + + podClient := c.Pods(api.NamespaceDefault) + + By("creating the pod") + name := "send-events-" + string(util.NewUUID()) + value := strconv.Itoa(time.Now().Nanosecond()) + pod := &api.Pod{ + ObjectMeta: api.ObjectMeta{ + Name: name, + Labels: map[string]string{ + "name": "foo", + "time": value, }, }, - }, - } - _, err := podClient.Create(pod) - if err != nil { - glog.Errorf("Failed to create pod: %v", err) - return false - } - defer podClient.Delete(pod.Name) - waitForPodRunning(c, pod.Name) - pods, err := podClient.List(labels.SelectorFromSet(labels.Set(map[string]string{"time": value}))) - if len(pods.Items) != 1 { - glog.Errorf("Failed to find the correct pod") - return false - } + Spec: api.PodSpec{ + Containers: []api.Container{ + { + Name: "p", + Image: "kubernetes/serve_hostname", + Ports: []api.Port{{ContainerPort: 80, HostPort: 8080}}, + }, + }, + }, + } - podWithUid, err := podClient.Get(pod.Name) - if err != nil { - glog.Errorf("Failed to get pod: %v", err) - return false - } + By("submitting the pod to kubernetes") + _, err := podClient.Create(pod) + if err != nil { + Fail(fmt.Sprintf("Failed to create pod: %v", err)) + } + defer func() { + By("deleting the pod") + defer GinkgoRecover() + podClient.Delete(pod.Name) + }() - // Check for scheduler event about the pod. - glog.Infof("%+v", podWithUid) - events, err := c.Events(api.NamespaceDefault).List( - labels.Everything(), - labels.Set{ - "involvedObject.kind": "Pod", - "involvedObject.uid": string(podWithUid.UID), - "involvedObject.namespace": api.NamespaceDefault, - "source": "scheduler", - }.AsSelector(), - ) - if err != nil { - glog.Error("Error while listing events:", err) - return false - } - if len(events.Items) == 0 { - glog.Error("Didn't see any scheduler events even though pod was running.") - return false - } - glog.Info("Saw scheduler event for our pod.") + By("waiting for the pod to start running") + waitForPodRunning(c, pod.Name) - // Check for kubelet event about the pod. - events, err = c.Events(api.NamespaceDefault).List( - labels.Everything(), - labels.Set{ - "involvedObject.uid": string(podWithUid.UID), - "involvedObject.kind": "BoundPod", - "involvedObject.namespace": api.NamespaceDefault, - "source": "kubelet", - }.AsSelector(), - ) - if err != nil { - glog.Error("Error while listing events:", err) - return false - } - if len(events.Items) == 0 { - glog.Error("Didn't see any kubelet events even though pod was running.") - return false - } - glog.Info("Saw kubelet event for our pod.") - return true -} + By("verifying the pod is in kubernetes") + pods, err := podClient.List(labels.SelectorFromSet(labels.Set(map[string]string{"time": value}))) + Expect(len(pods.Items)).To(Equal(1)) -var _ = Describe("TestKubeletSendsEvent", func() { - It("should pass", func() { - // TODO: Instead of OrDie, client should Fail the test if there's a problem. - // In general tests should Fail() instead of glog.Fatalf(). - Expect(TestKubeletSendsEvent(loadClientOrDie())).To(BeTrue()) + By("retrieving the pod") + podWithUid, err := podClient.Get(pod.Name) + if err != nil { + Fail(fmt.Sprintf("Failed to get pod: %v", err)) + } + fmt.Printf("%+v\n", podWithUid) + + // Check for scheduler event about the pod. + By("checking for scheduler event about the pod") + events, err := c.Events(api.NamespaceDefault).List( + labels.Everything(), + labels.Set{ + "involvedObject.kind": "Pod", + "involvedObject.uid": string(podWithUid.UID), + "involvedObject.namespace": api.NamespaceDefault, + "source": "scheduler", + }.AsSelector(), + ) + if err != nil { + Fail(fmt.Sprintf("Error while listing events:", err)) + } + Expect(len(events.Items)).ToNot(BeZero(), "scheduler events from running pod") + fmt.Println("Saw scheduler event for our pod.") + + // Check for kubelet event about the pod. + By("checking for kubelet event about the pod") + events, err = c.Events(api.NamespaceDefault).List( + labels.Everything(), + labels.Set{ + "involvedObject.uid": string(podWithUid.UID), + "involvedObject.kind": "BoundPod", + "involvedObject.namespace": api.NamespaceDefault, + "source": "kubelet", + }.AsSelector(), + ) + if err != nil { + Fail(fmt.Sprintf("Error while listing events:", err)) + } + Expect(len(events.Items)).ToNot(BeZero(), "kubelet events from running pod") + fmt.Println("Saw kubelet event for our pod.") }) })