event/filter: fix data race in the test
This commit is contained in:
parent
e3f36d9728
commit
8e2bf42c46
|
@ -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):
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue