-
Notifications
You must be signed in to change notification settings - Fork 0
/
config_test.go
135 lines (114 loc) · 3.51 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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package rrl_test
import (
"fmt"
"strings"
"testing"
"github.com/markdingo/rrl"
)
func TestConfigDefault(t *testing.T) {
cfg := rrl.NewConfig()
if cfg == nil {
t.Fatal("Should have a *config")
}
got := cfg.String()
exp := "15000000000 24-56 0/0/0/0/0/0 2/100000 false/false/false/false"
if exp != got {
t.Error("Default Config is", got, "but expected", exp)
}
// Cause the config to be finalized and thus some internal values change
r := rrl.NewRRL(cfg)
if r == nil {
t.Fatal("Should have a *RRL")
}
got = cfg.String()
exp = "15000000000 24-56 0/0/0/0/0/0 2/100000 false/false/false/false"
if exp != got {
t.Error("Finalized zero Config is", got, "but expected", exp)
}
// Change one value just to ensure it propagates thru finalize
cfg.SetValue("responses-per-second", "7")
r = rrl.NewRRL(cfg)
got = cfg.String()
exp = "15000000000 24-56 142857142/142857142/142857142/142857142/142857142/0 2/100000 false/false/false/false"
if exp != got {
t.Error("Finalized non-zero Config is", got, "but expected", exp)
}
newR := rrl.RRL{}
_ = newR
}
func TestConfigSet(t *testing.T) {
cfg := rrl.NewConfig()
testCases := []struct {
w string
arg string
emsg string
}{
// Bad settings
{"windox", "", "unknown"},
{"window", "x23", "invalid syntax"},
{"window", "-1", "between"},
{"window", "1", ""},
{"ipv4-prefix-length", "-1", "be between"},
{"ipv4-prefix-length", "33", "be between"},
{"ipv4-prefix-length", "24", ""},
{"ipv4-prefix-length", "x24", "invalid syntax"},
{"ipv6-prefix-length", "-1", "be between"},
{"ipv6-prefix-length", "129", "be between"},
{"ipv6-prefix-length", "xx129", "syntax"},
{"ipv6-prefix-length", "64", ""},
{"responses-per-second", "-1", "negative"},
{"responses-per-second", "xxy", "invalid syntax"},
{"responses-per-second", "0", ""},
{"responses-per-second", "2", ""},
{"nodata-per-second", "-1", "negative"},
{"nodata-per-second", "abc", "syntax"},
{"nodata-per-second", "3", ""},
{"nxdomains-per-second", "-1", "negative"},
{"nxdomains-per-second", "xyz", "syntax"},
{"nxdomains-per-second", "4", ""},
{"referrals-per-second", "-1", "negative"},
{"referrals-per-second", "xyz", "syntax"},
{"referrals-per-second", "5.55", ""},
{"referrals-per-second", "5", ""},
{"errors-per-second", "-1", "negative"},
{"errors-per-second", "xyz", "syntax"},
{"errors-per-second", "6.001", ""},
{"errors-per-second", "6", ""},
{"requests-per-second", "-1", "negative"},
{"requests-per-second", "xx", "syntax"},
{"requests-per-second", "7", ""},
{"slip-ratio", "-1", "be between"},
{"slip-ratio", "ccc", "syntax"},
{"slip-ratio", "8", ""},
{"max-table-size", "-1", "negative"},
{"max-table-size", "xx", "syntax"},
{"max-table-size", "9", ""},
}
for ix, tc := range testCases {
t.Run(fmt.Sprintf("%d-%s", ix, tc.w),
func(tt *testing.T) {
err := cfg.SetValue(tc.w, tc.arg)
if err != nil {
if len(tc.emsg) == 0 {
tt.Error("Didn't expect error of", err.Error())
return
}
if !strings.Contains(err.Error(), tc.emsg) {
tt.Errorf("Expected '%s' in %s\n", tc.emsg, err.Error())
return
}
return
}
if len(tc.emsg) > 0 {
tt.Error("Expected an error return containing", tc.emsg)
return
}
})
}
// Look at the internal values of config to see if they were all set
got := cfg.String()
exp := "1000000000 24-64 500000000/333333333/250000000/200000000/166666666/142857142 8/9 true/true/true/true"
if got != exp {
t.Error("Config is", got, "but expected", exp)
}
}