forked from olorin/nagiosplugin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
range_test.go
181 lines (162 loc) · 3.76 KB
/
range_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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
package nagiosplugin
import (
"testing"
)
// see https://www.monitoring-plugins.org/doc/guidelines.html#THRESHOLDFORMAT
// TestInsideRange ensures that an explicitly bounded range only accepts
// values within the range.
func TestInsideRange(t *testing.T) {
var r *Range
var err error
rangeStr := "10:20"
r, err = ParseRange(rangeStr)
if err != nil {
t.Fatalf("Failed to parse %v: %v", rangeStr, err)
}
tests := []struct {
value float64
shouldAlert bool
}{
{-1.0, true},
{0.0, true},
{1.0, true},
{9.0, true},
{10.0, false},
{15.0, false},
{20.0, false},
{21.0, true},
}
for _, test := range tests {
didAlert := r.Check(test.value)
if didAlert != test.shouldAlert {
t.Errorf("Check(%v) should be %v", test.value, test.shouldAlert)
}
}
}
// TestOutsideRange ensures that an explicitly bounded range prefixed
// with the at sign (@) only accepts values outside the range.
func TestOutsideRange(t *testing.T) {
var r *Range
var err error
rangeStr := "@10:20"
r, err = ParseRange(rangeStr)
if err != nil {
t.Fatalf("Failed to parse %v: %v", rangeStr, err)
}
tests := []struct {
value float64
shouldAlert bool
}{
{-1.0, false},
{0.0, false},
{1.0, false},
{9.0, false},
{10.0, true},
{15.0, true},
{20.0, true},
{21.0, false},
}
for _, test := range tests {
didAlert := r.Check(test.value)
if didAlert != test.shouldAlert {
t.Errorf("Check(%v) should be %v", test.value, test.shouldAlert)
}
}
}
// TestImpliedMinimumRange ensures that a range string with no explicit
// minimum defaults to a minimum of 0.
func TestImpliedMinimumRange(t *testing.T) {
var r *Range
var err error
rangeStr := "10"
r, err = ParseRange(rangeStr)
if err != nil {
t.Fatalf("Failed to parse %v: %v", rangeStr, err)
}
tests := []struct {
value float64
shouldAlert bool
}{
{-1.0, true},
{0.0, false},
{5.0, false},
{11.0, true},
}
for _, test := range tests {
didAlert := r.Check(test.value)
if didAlert != test.shouldAlert {
t.Errorf("Check(%v) should be %v", test.value, test.shouldAlert)
}
}
}
// TestImpliedMaximumRange ensures that a range string with no explicit
// maximum defaults to a maximum of +Inf.
func TestImpliedMaximumRange(t *testing.T) {
var r *Range
var err error
rangeStr := "10:"
r, err = ParseRange(rangeStr)
if err != nil {
t.Fatalf("Failed to parse %v: %v", rangeStr, err)
}
tests := []struct {
value float64
shouldAlert bool
}{
{-1.0, true},
{0.0, true},
{1.0, true},
{5.0, true},
{10.0, false},
{11.0, false},
}
for _, test := range tests {
didAlert := r.Check(test.value)
if didAlert != test.shouldAlert {
t.Errorf("Check(%v) should be %v", test.value, test.shouldAlert)
}
}
}
// TestNegInfRange ensures that a range string with a minimum bound of a
// tilde is correctly interpreted to mean -Inf.
func TestNegInfRange(t *testing.T) {
var r *Range
var err error
rangeStr := "~:10"
r, err = ParseRange(rangeStr)
if err != nil {
t.Fatalf("Failed to parse %v: %v", rangeStr, err)
}
tests := []struct {
value float64
shouldAlert bool
}{
{-1.0, false},
{0.0, false},
{1.0, false},
{5.0, false},
{10.0, false},
{11.0, true},
}
for _, test := range tests {
didAlert := r.Check(test.value)
if didAlert != test.shouldAlert {
t.Errorf("Check(%v) should be %v", test.value, test.shouldAlert)
}
}
}
// TestInvalidRanges ensures that ParseRange correctly fails on input
// that is known to be invalid.
func TestInvalidRanges(t *testing.T) {
var err error
badRanges := []string{
"20:10", // Violates min <= max
"10,20", // The comma is non-sensical
}
for _, rangeStr := range badRanges {
_, err = ParseRange(rangeStr)
if err == nil {
t.Errorf("ParseRange(%v) should have returned an error", rangeStr)
}
}
}