Skip to content

Commit 7a65e3d

Browse files
committed
Implement key providers
1 parent 2623a30 commit 7a65e3d

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed

pkg/feed/key.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
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+
}

pkg/feed/key_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
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+
}

0 commit comments

Comments
 (0)