From 1a6572fc6c6431a62f7b346f41a55dbf85e4b82f Mon Sep 17 00:00:00 2001 From: David Ashpole Date: Wed, 24 May 2017 13:27:57 -0700 Subject: [PATCH] summary test now tests a pod that has containers that have restarted --- test/e2e_node/garbage_collector_test.go | 33 ++++++++++++++----------- test/e2e_node/summary_test.go | 27 +++++++++++--------- 2 files changed, 34 insertions(+), 26 deletions(-) diff --git a/test/e2e_node/garbage_collector_test.go b/test/e2e_node/garbage_collector_test.go index 1f5aecd38d..09695019d8 100644 --- a/test/e2e_node/garbage_collector_test.go +++ b/test/e2e_node/garbage_collector_test.go @@ -18,6 +18,7 @@ package e2e_node import ( "fmt" + "strconv" "strings" "time" @@ -289,20 +290,9 @@ func getPods(specs []*testPodSpec) (pods []*v1.Pod) { containers := []v1.Container{} for i := 0; i < spec.numContainers; i++ { containers = append(containers, v1.Container{ - Image: "gcr.io/google_containers/busybox:1.24", - Name: spec.getContainerName(i), - Command: []string{ - "sh", - "-c", - fmt.Sprintf(` - f=/test-empty-dir-mnt/countfile%d - count=$(echo 'hello' >> $f ; wc -l $f | awk {'print $1'}) - if [ $count -lt %d ]; then - exit 0 - fi - while true; do sleep 1; done - `, i, spec.restartCount+1), - }, + Image: "gcr.io/google_containers/busybox:1.24", + Name: spec.getContainerName(i), + Command: getRestartingContainerCommand("/test-empty-dir-mnt", i, int(spec.restartCount), ""), VolumeMounts: []v1.VolumeMount{ {MountPath: "/test-empty-dir-mnt", Name: "test-empty-dir"}, }, @@ -321,3 +311,18 @@ func getPods(specs []*testPodSpec) (pods []*v1.Pod) { } return } + +func getRestartingContainerCommand(path string, containerNum, restarts int, loopingCommand string) []string { + return []string{ + "sh", + "-c", + fmt.Sprintf(` + f=%s/countfile%s + count=$(echo 'hello' >> $f ; wc -l $f | awk {'print $1'}) + if [ $count -lt %d ]; then + exit 0 + fi + while true; do %s sleep 10; done`, + path, strconv.Itoa(containerNum), restarts+1, loopingCommand), + } +} diff --git a/test/e2e_node/summary_test.go b/test/e2e_node/summary_test.go index 227512efc4..33a2e7fe91 100644 --- a/test/e2e_node/summary_test.go +++ b/test/e2e_node/summary_test.go @@ -35,6 +35,8 @@ import ( "github.com/onsi/gomega/types" ) +const restartCount = 3 + var _ = framework.KubeDescribe("Summary API", func() { f := framework.NewDefaultFramework("summary-test") Context("when querying /stats/summary", func() { @@ -53,9 +55,10 @@ var _ = framework.KubeDescribe("Summary API", func() { const pod1 = "stats-busybox-1" By("Creating test pods") - createSummaryTestPods(f, pod0, pod1) - // Wait for cAdvisor to collect 2 stats points - time.Sleep(15 * time.Second) + pods := getSummaryTestPods(f, pod0, pod1) + f.PodClient().CreateBatch(pods) + // Wait for cAdvisor to collect 2 stats points, and for pods to restart + time.Sleep(45 * time.Second) // Setup expectations. const ( @@ -131,16 +134,16 @@ var _ = framework.KubeDescribe("Summary API", func() { "StartTime": recent(maxStartAge), "CPU": ptrMatchAllFields(gstruct.Fields{ "Time": recent(maxStatsAge), - "UsageNanoCores": bounded(100000, 100000000), - "UsageCoreNanoSeconds": bounded(10000000, 1000000000), + "UsageNanoCores": bounded(100000, 1000000000), + "UsageCoreNanoSeconds": bounded(10000000, 100000000000), }), "Memory": ptrMatchAllFields(gstruct.Fields{ "Time": recent(maxStatsAge), - "AvailableBytes": bounded(1*mb, 10*mb), - "UsageBytes": bounded(10*kb, 5*mb), - "WorkingSetBytes": bounded(10*kb, 2*mb), + "AvailableBytes": bounded(10*kb, 10*mb), + "UsageBytes": bounded(10*kb, 20*mb), + "WorkingSetBytes": bounded(10*kb, 20*mb), "RSSBytes": bounded(1*kb, mb), - "PageFaults": bounded(100, 100000), + "PageFaults": bounded(100, 1000000), "MajorPageFaults": bounded(0, 10), }), "Rootfs": ptrMatchAllFields(gstruct.Fields{ @@ -259,7 +262,7 @@ var _ = framework.KubeDescribe("Summary API", func() { }) }) -func createSummaryTestPods(f *framework.Framework, names ...string) { +func getSummaryTestPods(f *framework.Framework, names ...string) []*v1.Pod { pods := make([]*v1.Pod, 0, len(names)) for _, name := range names { pods = append(pods, &v1.Pod{ @@ -272,7 +275,7 @@ func createSummaryTestPods(f *framework.Framework, names ...string) { { Name: "busybox-container", Image: "gcr.io/google_containers/busybox:1.24", - Command: []string{"sh", "-c", "ping -c 1 google.com; while true; do echo 'hello world' >> /test-empty-dir-mnt/file ; sleep 1; done"}, + Command: getRestartingContainerCommand("/test-empty-dir-mnt", 0, restartCount, "ping -c 1 google.com; echo 'hello world' >> /test-empty-dir-mnt/file"), Resources: v1.ResourceRequirements{ Limits: v1.ResourceList{ // Must set memory limit to get MemoryStats.AvailableBytes @@ -297,7 +300,7 @@ func createSummaryTestPods(f *framework.Framework, names ...string) { }, }) } - f.PodClient().CreateBatch(pods) + return pods } // Mapping function for gstruct.MatchAllElements