From 3f165a742d2e6f56ba68f1cbc4ff20c726735a2e Mon Sep 17 00:00:00 2001 From: Wojciech Tyczynski Date: Tue, 28 Apr 2015 13:58:20 +0200 Subject: [PATCH] Don't fail performance tests on single fail event --- test/e2e/density.go | 18 +++++++++--------- test/e2e/util.go | 27 +++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/test/e2e/density.go b/test/e2e/density.go index 07450357c69..af8246c0ee6 100644 --- a/test/e2e/density.go +++ b/test/e2e/density.go @@ -18,6 +18,7 @@ package e2e import ( "fmt" + "math" "strconv" "sync" "time" @@ -108,7 +109,7 @@ var _ = Describe("Density", func() { nameStr := strconv.Itoa(totalPods) + "-" + string(util.NewUUID()) RCName = "my-hostname-density" + nameStr - // Create a listener for events + // Create a listener for events. events := make([](*api.Event), 0) _, controller := framework.NewInformer( &cache.ListWatch{ @@ -130,8 +131,11 @@ var _ = Describe("Density", func() { stop := make(chan struct{}) go controller.Run(stop) - // Start the replication controller + // Start the replication controller. + startTime := time.Now() expectNoError(RunRC(c, RCName, ns, "gcr.io/google_containers/pause:go", totalPods)) + e2eStartupTime := time.Now().Sub(startTime) + Logf("E2E startup time for %d pods: %v", totalPods, e2eStartupTime) By("Waiting for all events to be recorded") last := -1 @@ -148,13 +152,9 @@ var _ = Describe("Density", func() { } Logf("Found %d events", current) - // Verify there were no pod killings or failures - By("Verifying there were no pod killings or failures") - for _, e := range events { - for _, s := range []string{"kill", "fail"} { - Expect(e.Reason).NotTo(ContainSubstring(s), "event:' %s', reason: '%s', message: '%s', field path: '%s'", e, e.ObjectMeta.Name, e.Message, e.InvolvedObject.FieldPath) - } - } + // Tune the threshold for allowed failures. + badEvents := BadEvents(events) + Expect(badEvents).NotTo(BeNumerically(">", int(math.Floor(0.01*float64(totalPods))))) }) } diff --git a/test/e2e/util.go b/test/e2e/util.go index 30797d88364..19543611ffd 100644 --- a/test/e2e/util.go +++ b/test/e2e/util.go @@ -599,3 +599,30 @@ func VerifyContainersAreNotFailed(pod api.Pod) error { } return nil } + +// Prints the histogram of the events and returns the number of bad events. +func BadEvents(events []*api.Event) int { + type histogramKey struct { + reason string + source string + } + histogram := make(map[histogramKey]int) + for _, e := range events { + histogram[histogramKey{reason: e.Reason, source: e.Source.Component}]++ + } + for key, number := range histogram { + Logf("- reason: %s, source: %s -> %d", key.reason, key.source, number) + } + badPatterns := []string{"kill", "fail"} + badEvents := 0 + for key, number := range histogram { + for _, s := range badPatterns { + if strings.Contains(key.reason, s) { + Logf("WARNING %d events from %s with reason: %s", number, key.source, key.reason) + badEvents += number + break + } + } + } + return badEvents +}