From 8e2bf42c46b8dc7d13f976c7b004001cc3d1089a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com>
Date: Thu, 5 Nov 2015 13:16:27 +0200
Subject: [PATCH] event/filter: fix data race in the test

---
 event/filter/filter_test.go | 29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/event/filter/filter_test.go b/event/filter/filter_test.go
index 0cd26bfc9..dcc911245 100644
--- a/event/filter/filter_test.go
+++ b/event/filter/filter_test.go
@@ -21,35 +21,40 @@ import (
 	"time"
 )
 
+// Simple test to check if baseline matching/mismatching filtering works.
 func TestFilters(t *testing.T) {
-	var success bool
-	var failure bool
-
 	fm := New()
 	fm.Start()
+
+	// Register two filters to catch posted data
+	first := make(chan struct{})
 	fm.Install(Generic{
 		Str1: "hello",
 		Fn: func(data interface{}) {
-			success = data.(bool)
+			first <- struct{}{}
 		},
 	})
+	second := make(chan struct{})
 	fm.Install(Generic{
 		Str1: "hello1",
 		Str2: "hello",
 		Fn: func(data interface{}) {
-			failure = true
+			second <- struct{}{}
 		},
 	})
+	// Post an event that should only match the first filter
 	fm.Notify(Generic{Str1: "hello"}, true)
 	fm.Stop()
 
-	time.Sleep(10 * time.Millisecond) // yield to the notifier
-
-	if !success {
-		t.Error("expected 'hello' to be posted")
+	// Ensure only the mathcing filters fire
+	select {
+	case <-first:
+	case <-time.After(100 * time.Millisecond):
+		t.Error("matching filter timed out")
 	}
-
-	if failure {
-		t.Error("hello1 was triggered")
+	select {
+	case <-second:
+		t.Error("mismatching filter fired")
+	case <-time.After(100 * time.Millisecond):
 	}
 }
-- 
GitLab