aboutsummaryrefslogtreecommitdiffstats
path: root/event/filter/filter_test.go
blob: dcc91124537ff1e9a792a13e2e632b2b3641a3ca (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// Copyright 2014 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.

package filter

import (
    "testing"
    "time"
)

// Simple test to check if baseline matching/mismatching filtering works.
func TestFilters(t *testing.T) {
    fm := New()
    fm.Start()

    // Register two filters to catch posted data
    first := make(chan struct{})
    fm.Install(Generic{
        Str1: "hello",
        Fn: func(data interface{}) {
            first <- struct{}{}
        },
    })
    second := make(chan struct{})
    fm.Install(Generic{
        Str1: "hello1",
        Str2: "hello",
        Fn: func(data interface{}) {
            second <- struct{}{}
        },
    })
    // Post an event that should only match the first filter
    fm.Notify(Generic{Str1: "hello"}, true)
    fm.Stop()

    // Ensure only the mathcing filters fire
    select {
    case <-first:
    case <-time.After(100 * time.Millisecond):
        t.Error("matching filter timed out")
    }
    select {
    case <-second:
        t.Error("mismatching filter fired")
    case <-time.After(100 * time.Millisecond):
    }
}