-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathratelimit_var_test.go
93 lines (83 loc) · 2.81 KB
/
ratelimit_var_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
package goflags
import (
"os"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestRateLimitMapVar(t *testing.T) {
t.Run("default-value", func(t *testing.T) {
var rateLimitMap RateLimitMap
flagSet := NewFlagSet()
flagSet.CreateGroup("Config", "Config",
flagSet.RateLimitMapVarP(&rateLimitMap, "rate-limits", "rls", []string{"hackertarget=1/ms"}, "rate limits", CommaSeparatedStringSliceOptions),
)
os.Args = []string{
os.Args[0],
}
err := flagSet.Parse()
assert.Nil(t, err)
assert.Equal(t, RateLimit{MaxCount: 1, Duration: time.Millisecond}, rateLimitMap.AsMap()["hackertarget"])
tearDown(t.Name())
})
t.Run("multiple-default-value", func(t *testing.T) {
var rateLimitMap RateLimitMap
flagSet := NewFlagSet()
flagSet.CreateGroup("Config", "Config",
flagSet.RateLimitMapVarP(&rateLimitMap, "rate-limits", "rls", []string{"hackertarget=1/s,github=1/ms"}, "rate limits", CommaSeparatedStringSliceOptions),
)
os.Args = []string{
os.Args[0],
}
err := flagSet.Parse()
assert.Nil(t, err)
assert.Equal(t, RateLimit{MaxCount: 1, Duration: time.Second}, rateLimitMap.AsMap()["hackertarget"])
assert.Equal(t, RateLimit{MaxCount: 1, Duration: time.Millisecond}, rateLimitMap.AsMap()["github"])
tearDown(t.Name())
})
t.Run("valid-rate-limit", func(t *testing.T) {
var rateLimitMap RateLimitMap
flagSet := NewFlagSet()
flagSet.CreateGroup("Config", "Config",
flagSet.RateLimitMapVarP(&rateLimitMap, "rate-limits", "rls", nil, "rate limits", CommaSeparatedStringSliceOptions),
)
os.Args = []string{
os.Args[0],
"-rls", "hackertarget=10/m",
}
err := flagSet.Parse()
assert.Nil(t, err)
assert.Equal(t, RateLimit{MaxCount: 10, Duration: time.Minute}, rateLimitMap.AsMap()["hackertarget"])
tearDown(t.Name())
})
t.Run("valid-rate-limits", func(t *testing.T) {
var rateLimitMap RateLimitMap
flagSet := NewFlagSet()
flagSet.CreateGroup("Config", "Config",
flagSet.RateLimitMapVarP(&rateLimitMap, "rate-limits", "rls", nil, "rate limits", CommaSeparatedStringSliceOptions),
)
os.Args = []string{
os.Args[0],
"-rls", "hackertarget=1/s,github=1/ms",
}
err := flagSet.Parse()
assert.Nil(t, err)
assert.Equal(t, RateLimit{MaxCount: 1, Duration: time.Second}, rateLimitMap.AsMap()["hackertarget"])
assert.Equal(t, RateLimit{MaxCount: 1, Duration: time.Millisecond}, rateLimitMap.AsMap()["github"])
tearDown(t.Name())
})
t.Run("without-unit", func(t *testing.T) {
var rateLimitMap RateLimitMap
err := rateLimitMap.Set("hackertarget=1")
assert.NotNil(t, err)
assert.ErrorContains(t, err, "parse error")
tearDown(t.Name())
})
t.Run("invalid-unit", func(t *testing.T) {
var rateLimitMap RateLimitMap
err := rateLimitMap.Set("hackertarget=1/x")
assert.NotNil(t, err)
assert.ErrorContains(t, err, "parse error")
tearDown(t.Name())
})
}