File tree Expand file tree Collapse file tree 2 files changed +77
-0
lines changed Expand file tree Collapse file tree 2 files changed +77
-0
lines changed Original file line number Diff line number Diff line change
1
+ package feed
2
+
3
+ import (
4
+ "sync"
5
+
6
+ "github.com/pkg/errors"
7
+ )
8
+
9
+ type KeyProvider interface {
10
+ Get () string
11
+ }
12
+
13
+ type FixedKeyProvider struct {
14
+ key string
15
+ }
16
+
17
+ func NewFixedKey (key string ) (KeyProvider , error ) {
18
+ if key == "" {
19
+ return nil , errors .New ("key can't be empty" )
20
+ }
21
+
22
+ return & FixedKeyProvider {key : key }, nil
23
+ }
24
+
25
+ func (p FixedKeyProvider ) Get () string {
26
+ return p .key
27
+ }
28
+
29
+ type RotatedKeyProvider struct {
30
+ keys []string
31
+ lock sync.Mutex
32
+ index int
33
+ }
34
+
35
+ func NewRotatedKeys (keys []string ) (KeyProvider , error ) {
36
+ if len (keys ) < 2 {
37
+ return nil , errors .Errorf ("at least 2 keys required (got %d)" , len (keys ))
38
+ }
39
+
40
+ return & RotatedKeyProvider {keys : keys , index : 0 }, nil
41
+ }
42
+
43
+ func (p * RotatedKeyProvider ) Get () string {
44
+ p .lock .Lock ()
45
+ defer p .lock .Unlock ()
46
+
47
+ current := p .index % len (p .keys )
48
+ p .index ++
49
+
50
+ return p .keys [current ]
51
+ }
Original file line number Diff line number Diff line change
1
+ package feed
2
+
3
+ import (
4
+ "testing"
5
+
6
+ "github.com/stretchr/testify/assert"
7
+ )
8
+
9
+ func TestNewFixedKey (t * testing.T ) {
10
+ key , err := NewFixedKey ("123" )
11
+ assert .NoError (t , err )
12
+
13
+ assert .EqualValues (t , "123" , key .Get ())
14
+ assert .EqualValues (t , "123" , key .Get ())
15
+ }
16
+
17
+ func TestNewRotatedKeys (t * testing.T ) {
18
+ key , err := NewRotatedKeys ([]string {"123" , "456" })
19
+ assert .NoError (t , err )
20
+
21
+ assert .EqualValues (t , "123" , key .Get ())
22
+ assert .EqualValues (t , "456" , key .Get ())
23
+
24
+ assert .EqualValues (t , "123" , key .Get ())
25
+ assert .EqualValues (t , "456" , key .Get ())
26
+ }
You can’t perform that action at this time.
0 commit comments