-
-
Notifications
You must be signed in to change notification settings - Fork 51
/
Copy pathredispub_test.go
92 lines (79 loc) · 1.94 KB
/
redispub_test.go
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package workers
import (
"bufio"
"net"
"regexp"
"testing"
"time"
"github.com/dmachard/go-dnscollector/dnsutils"
"github.com/dmachard/go-dnscollector/pkgconfig"
"github.com/dmachard/go-logger"
"github.com/dmachard/go-netutils"
)
func Test_RedisPubRun(t *testing.T) {
testcases := []struct {
mode string
pattern string
}{
{
mode: pkgconfig.ModeText,
pattern: " dns.collector ",
},
{
mode: pkgconfig.ModeJSON,
pattern: `\\\"qname\\\":\\\"dns.collector\\\"`,
},
{
mode: pkgconfig.ModeFlatJSON,
pattern: `\\\"dns.qname\\\":\\\"dns.collector\\\"`,
},
}
for _, tc := range testcases {
t.Run(tc.mode, func(t *testing.T) {
// init logger
cfg := pkgconfig.GetDefaultConfig()
cfg.Loggers.RedisPub.FlushInterval = 1
cfg.Loggers.RedisPub.BufferSize = 0
cfg.Loggers.RedisPub.Mode = tc.mode
cfg.Loggers.RedisPub.RedisChannel = "testons"
g := NewRedisPub(cfg, logger.New(false), "test")
// fake json receiver
fakeRcvr, err := net.Listen(netutils.SocketTCP, ":6379")
if err != nil {
t.Fatal(err)
}
defer fakeRcvr.Close()
// start the logger
go g.StartCollect()
// accept conn from logger
conn, err := fakeRcvr.Accept()
if err != nil {
return
}
defer conn.Close()
// wait connection on logger
time.Sleep(time.Second)
// send fake dns message to logger
dm := dnsutils.GetFakeDNSMessage()
g.GetInputChannel() <- dm
// read data on server side and decode-it
reader := bufio.NewReader(conn)
line, err := reader.ReadString('\n')
if err != nil {
t.Error(err)
return
}
pattern := regexp.MustCompile(tc.pattern)
if !pattern.MatchString(line) {
t.Errorf("redis error want %s, got: %s", tc.pattern, line)
}
pattern2 := regexp.MustCompile("PUBLISH \"testons\"")
if !pattern2.MatchString(line) {
t.Errorf("redis error want %s, got: %s", pattern2, line)
}
// stop all
fakeRcvr.Close()
g.Stop()
})
}
}