Ver código fonte

event/filter: fix data race in the test

Péter Szilágyi 10 anos atrás
pai
commit
8e2bf42c46
1 arquivos alterados com 17 adições e 12 exclusões
  1. 17 12
      event/filter/filter_test.go

+ 17 - 12
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):
 	}
 }