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
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.")
})
})