From ee74cc4354d3201b6095fec805e5c5a95700a54f Mon Sep 17 00:00:00 2001 From: Jan Safranek Date: Wed, 1 Jun 2016 10:12:47 +0200 Subject: [PATCH] Fix fake event recorder race Event recorder should wait for some time to get all expected events, the event may be written by another goroutine that just have finished. It should not slow down the test in most cases, only when there is a bug and expected event is not sent. --- pkg/controller/persistentvolume/framework_test.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/pkg/controller/persistentvolume/framework_test.go b/pkg/controller/persistentvolume/framework_test.go index 5a7a2ed7779..06d95e85a10 100644 --- a/pkg/controller/persistentvolume/framework_test.go +++ b/pkg/controller/persistentvolume/framework_test.go @@ -358,11 +358,14 @@ func (r *volumeReactor) checkClaims(t *testing.T, expectedClaims []*api.Persiste func checkEvents(t *testing.T, expectedEvents []string, ctrl *PersistentVolumeController) error { var err error - // Read recorded events + // Read recorded events - wait up to 1 minute to get all the expected ones + // (just in case some goroutines are slower with writing) + timer := time.NewTimer(time.Minute) + fakeRecorder := ctrl.eventRecorder.(*record.FakeRecorder) gotEvents := []string{} finished := false - for !finished { + for len(gotEvents) < len(expectedEvents) && !finished { select { case event, ok := <-fakeRecorder.Events: if ok { @@ -372,8 +375,8 @@ func checkEvents(t *testing.T, expectedEvents []string, ctrl *PersistentVolumeCo glog.V(5).Infof("event recorder finished") finished = true } - default: - glog.V(5).Infof("event recorder finished") + case _, _ = <-timer.C: + glog.V(5).Infof("event recorder timeout") finished = true } }