Converted TestKubeletSendsEvent to native ginkgo syntax #4220

This commit is contained in:
Robert Rati 2015-02-06 15:54:17 -05:00
parent cfe96c08b9
commit 5013375242

View File

@ -17,6 +17,7 @@ limitations under the License.
package e2e package e2e
import ( import (
"fmt"
"strconv" "strconv"
"time" "time"
@ -24,108 +25,106 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/client" "github.com/GoogleCloudPlatform/kubernetes/pkg/client"
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels" "github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util" "github.com/GoogleCloudPlatform/kubernetes/pkg/util"
"github.com/golang/glog"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
// TestKubeletSendsEvent checks that kubelets and scheduler send events about pods scheduling and running. var _ = Describe("Events", func() {
func TestKubeletSendsEvent(c *client.Client) bool { var c *client.Client
provider := testContext.provider
if len(provider) > 0 && provider != "gce" && provider != "gke" && provider != "aws" {
glog.Infof("skipping TestKubeletSendsEvent on cloud provider %s", provider)
return true
}
podClient := c.Pods(api.NamespaceDefault) BeforeEach(func() {
c = loadClientOrDie()
})
name := "send-events-" + string(util.NewUUID()) It("should be sent by kubelets and the scheduler about pods scheduling and running", func() {
value := strconv.Itoa(time.Now().Nanosecond()) provider := testContext.provider
pod := &api.Pod{ if len(provider) > 0 && provider != "gce" && provider != "gke" && provider != "aws" {
ObjectMeta: api.ObjectMeta{ By(fmt.Sprintf("skipping TestKubeletSendsEvent on cloud provider %s", provider))
Name: name, return
Labels: map[string]string{ }
"name": "foo",
"time": value, podClient := c.Pods(api.NamespaceDefault)
},
}, By("creating the pod")
Spec: api.PodSpec{ name := "send-events-" + string(util.NewUUID())
Containers: []api.Container{ value := strconv.Itoa(time.Now().Nanosecond())
{ pod := &api.Pod{
Name: "p", ObjectMeta: api.ObjectMeta{
Image: "kubernetes/serve_hostname", Name: name,
Ports: []api.Port{{ContainerPort: 80, HostPort: 8080}}, Labels: map[string]string{
"name": "foo",
"time": value,
}, },
}, },
}, Spec: api.PodSpec{
} Containers: []api.Container{
_, err := podClient.Create(pod) {
if err != nil { Name: "p",
glog.Errorf("Failed to create pod: %v", err) Image: "kubernetes/serve_hostname",
return false Ports: []api.Port{{ContainerPort: 80, HostPort: 8080}},
} },
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
}
podWithUid, err := podClient.Get(pod.Name) By("submitting the pod to kubernetes")
if err != nil { _, err := podClient.Create(pod)
glog.Errorf("Failed to get pod: %v", err) if err != nil {
return false 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. By("waiting for the pod to start running")
glog.Infof("%+v", podWithUid) waitForPodRunning(c, pod.Name)
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.")
// Check for kubelet event about the pod. By("verifying the pod is in kubernetes")
events, err = c.Events(api.NamespaceDefault).List( pods, err := podClient.List(labels.SelectorFromSet(labels.Set(map[string]string{"time": value})))
labels.Everything(), Expect(len(pods.Items)).To(Equal(1))
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
}
var _ = Describe("TestKubeletSendsEvent", func() { By("retrieving the pod")
It("should pass", func() { podWithUid, err := podClient.Get(pod.Name)
// TODO: Instead of OrDie, client should Fail the test if there's a problem. if err != nil {
// In general tests should Fail() instead of glog.Fatalf(). Fail(fmt.Sprintf("Failed to get pod: %v", err))
Expect(TestKubeletSendsEvent(loadClientOrDie())).To(BeTrue()) }
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.")
}) })
}) })