forked from mimuret/dtap
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconfig_test.go
114 lines (102 loc) · 3.26 KB
/
config_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
/*
* Copyright (c) 2018 Manabu Sonoda
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package dtap_test
import (
"bytes"
"context"
"net"
"os"
"testing"
"time"
"github.com/mikiT/dtap"
"github.com/stretchr/testify/assert"
)
func TestOutputNatsConfig(t *testing.T) {
cfg := `[[InputUnix]]
Path="/var/log/unbound/dnstap.sock"
User="unbound"
[[OutputNats]]
Host = "nats://host1:4242, nats://host2:4242, nats://host3:4242"
User = "cns"
Password = "hogehoge"
Subject = "query"
[OutputNats.flat]
IPv4Mask = 22
IPv6Mask = 40
EnableECS = true
EnableHashIP = true
IPHashSalt = "bb"
`
b := bytes.NewBufferString(cfg)
c, err := dtap.NewConfigFromReader(b)
assert.NoError(t, err)
assert.Equal(t, c.InputUnix[0].GetPath(), "/var/log/unbound/dnstap.sock")
assert.Equal(t, c.InputUnix[0].GetUser(), "unbound")
assert.Nil(t, c.InputUnix[0].Validate())
assert.Equal(t, c.OutputNats[0].GetHost(), "nats://host1:4242, nats://host2:4242, nats://host3:4242")
assert.Equal(t, c.OutputNats[0].GetUser(), "cns")
assert.Equal(t, c.OutputNats[0].GetPassword(), "hogehoge")
assert.Equal(t, c.OutputNats[0].GetSubject(), "query")
assert.Equal(t, c.OutputNats[0].Flat.GetEnableEcs(), true)
assert.Equal(t, c.OutputNats[0].Flat.GetIPv4Mask(), net.CIDRMask(22, 32))
assert.Equal(t, c.OutputNats[0].Flat.GetIPv6Mask(), net.CIDRMask(40, 128))
assert.Equal(t, c.OutputNats[0].Flat.GetEnableHashIP(), true)
}
func TestFlatConfig(t *testing.T) {
cfg := `[[InputUnix]]
Path="/var/log/unbound/dnstap.sock"
User="unbound"
[[OutputNats]]
Host = "nats://host1:4242, nats://host2:4242, nats://host3:4242"
User = "cns"
Password = "hogehoge"
Subject = "query"
[OutputNats.flat]
IPv4Mask = 22
IPv6Mask = 40
EnableECS = true
EnableHashIP = true
IPHashSaltPath = "/tmp/salt.test"
`
f, err := os.Create("/tmp/salt.test")
if err != nil {
t.Fatal("failed to create salt")
}
defer os.Remove("/tmp/salt.test")
f.Write([]byte{10, 20, 30, 40})
f.Close()
b := bytes.NewBufferString(cfg)
c, err := dtap.NewConfigFromReader(b)
assert.NoError(t, err)
ctx, cancel := context.WithCancel(context.TODO())
defer cancel()
ready := make(chan struct{})
go c.OutputNats[0].Flat.WatchSalt(ctx, ready)
<-ready
assert.Equal(t, c.OutputNats[0].Flat.GetEnableEcs(), true)
assert.Equal(t, c.OutputNats[0].Flat.GetIPv4Mask(), net.CIDRMask(22, 32))
assert.Equal(t, c.OutputNats[0].Flat.GetIPv6Mask(), net.CIDRMask(40, 128))
assert.Equal(t, c.OutputNats[0].Flat.GetEnableHashIP(), true)
assert.Equal(t, c.OutputNats[0].Flat.GetIPHashSalt(), []byte{10, 20, 30, 40})
f, _ = os.Create("/tmp/salt.test")
if err != nil {
t.Fatal("failed to create salt")
}
f.Write([]byte{20, 30, 40, 50})
f.Close()
time.Sleep(10 * time.Second)
assert.Equal(t, c.OutputNats[0].Flat.GetIPHashSalt(), []byte{20, 30, 40, 50})
}