-
Notifications
You must be signed in to change notification settings - Fork 22
/
item_test.go
67 lines (60 loc) · 1.47 KB
/
item_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
package cache
import (
"context"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestItemOptions(t *testing.T) {
t.Run("default item options", func(t *testing.T) {
o := newItemOptions(context.TODO(), "key")
assert.Nil(t, o.value)
assert.Nil(t, o.do)
assert.Equal(t, defaultRemoteExpiry, o.getTtl(defaultRemoteExpiry))
assert.False(t, o.setXX)
assert.False(t, o.setNX)
assert.False(t, o.skipLocal)
assert.False(t, o.refresh)
})
t.Run("nil context", func(t *testing.T) {
o := newItemOptions(nil, "key")
assert.Equal(t, context.Background(), o.Context())
})
t.Run("with item options", func(t *testing.T) {
o := newItemOptions(context.TODO(), "key", Value("getValue"),
TTL(time.Minute), SetXX(true), SetNX(true), SkipLocal(true),
Refresh(true), Do(func(context.Context) (any, error) {
return "any", nil
}))
assert.Equal(t, "getValue", o.value)
assert.NotNil(t, o.do)
assert.Equal(t, time.Minute, o.getTtl(defaultRemoteExpiry))
assert.True(t, o.setXX)
assert.True(t, o.setNX)
assert.True(t, o.skipLocal)
assert.True(t, o.refresh)
})
}
func TestItemTTL(t *testing.T) {
tests := []struct {
input time.Duration
expect time.Duration
}{
{
input: -1,
expect: 0,
},
{
input: time.Millisecond,
expect: defaultRemoteExpiry,
},
{
input: time.Minute,
expect: time.Minute,
},
}
for _, v := range tests {
item := &item{ttl: v.input}
assert.Equal(t, v.expect, item.getTtl(defaultRemoteExpiry))
}
}