-
-
Notifications
You must be signed in to change notification settings - Fork 52
/
Copy pathdnsprocessor_test.go
136 lines (111 loc) · 3.57 KB
/
dnsprocessor_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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package workers
import (
"bytes"
"fmt"
"regexp"
"testing"
"time"
"github.com/dmachard/go-dnscollector/dnsutils"
"github.com/dmachard/go-dnscollector/pkgconfig"
"github.com/dmachard/go-logger"
)
func Test_DnsProcessor(t *testing.T) {
logger := logger.New(true)
var o bytes.Buffer
logger.SetOutput(&o)
// init and run the dns processor
fl := GetWorkerForTest(pkgconfig.DefaultBufferSize)
consumer := NewDNSProcessor(pkgconfig.GetDefaultConfig(), logger, "test", 512)
consumer.AddDefaultRoute(fl)
consumer.AddDroppedRoute(fl)
go consumer.StartCollect()
dm := dnsutils.GetFakeDNSMessageWithPayload()
consumer.GetInputChannel() <- dm
// read dns message from dnstap consumer
dmOut := <-fl.GetInputChannel()
if dmOut.DNS.Qname != pkgconfig.ExpectedQname {
t.Errorf("invalid qname in dns message: %s", dm.DNS.Qname)
}
}
func Test_DnsProcessor_DecodeCounters(t *testing.T) {
logger := logger.New(true)
var o bytes.Buffer
logger.SetOutput(&o)
// init and run the dns processor
fl := GetWorkerForTest(pkgconfig.DefaultBufferSize)
consumer := NewDNSProcessor(pkgconfig.GetDefaultConfig(), logger, "test", 512)
consumer.AddDefaultRoute(fl)
consumer.AddDroppedRoute(fl)
go consumer.StartCollect()
// get dns packet
responsePacket, _ := dnsutils.GetDNSResponsePacket()
// prepare dns message
dm := dnsutils.GetFakeDNSMessage()
dm.DNS.Payload = responsePacket
dm.DNS.Length = len(responsePacket)
// send dm to consumer
consumer.GetInputChannel() <- dm
// read dns message from dnstap consumer
dmOut := <-fl.GetInputChannel()
if dmOut.DNS.QdCount != 1 {
t.Errorf("invalid number of questions in dns message: got %d expect 1", dmOut.DNS.QdCount)
}
if dmOut.DNS.NsCount != 1 {
t.Errorf("invalid number of nscount in dns message: got %d expect 1", dmOut.DNS.NsCount)
}
if dmOut.DNS.AnCount != 1 {
t.Errorf("invalid number of ancount in dns message: got %d expect 1", dmOut.DNS.AnCount)
}
if dmOut.DNS.ArCount != 1 {
t.Errorf("invalid number of arcount in dns message: got %d expect 1", dmOut.DNS.ArCount)
}
}
func Test_DnsProcessor_BufferLoggerIsFull(t *testing.T) {
// redirect stdout output to bytes buffer
logsChan := make(chan logger.LogEntry, 10)
lg := logger.New(true)
lg.SetOutputChannel((logsChan))
// init and run the dns processor
fl := GetWorkerForTest(pkgconfig.DefaultBufferOne)
consumer := NewDNSProcessor(pkgconfig.GetDefaultConfig(), lg, "test", 512)
consumer.AddDefaultRoute(fl)
consumer.AddDroppedRoute(fl)
go consumer.StartCollect()
dm := dnsutils.GetFakeDNSMessageWithPayload()
// add packets to consumer
for i := 0; i < 512; i++ {
consumer.GetInputChannel() <- dm
}
// waiting monitor to run in consumer
time.Sleep(12 * time.Second)
for entry := range logsChan {
fmt.Println(entry)
pattern := regexp.MustCompile(pkgconfig.ExpectedBufferMsg511)
if pattern.MatchString(entry.Message) {
break
}
}
// read dns message from dnstap consumer
dmOut := <-fl.GetInputChannel()
if dmOut.DNS.Qname != pkgconfig.ExpectedQname {
t.Errorf("invalid qname in dns message: %s", dmOut.DNS.Qname)
}
// send second shot of packets to consumer
for i := 0; i < 1024; i++ {
consumer.GetInputChannel() <- dm
}
// waiting monitor to run in consumer
time.Sleep(12 * time.Second)
for entry := range logsChan {
fmt.Println(entry)
pattern := regexp.MustCompile(pkgconfig.ExpectedBufferMsg1023)
if pattern.MatchString(entry.Message) {
break
}
}
// read dns message from dnstap consumer
dm2 := <-fl.GetInputChannel()
if dm2.DNS.Qname != pkgconfig.ExpectedQname {
t.Errorf("invalid qname in second dns message: %s", dm2.DNS.Qname)
}
}