1 package ttlcache
2
3 import (
4 "testing"
5 "time"
6
7 "github.com/stretchr/testify/assert"
8 "github.com/stretchr/testify/require"
9 )
10
11 func Test_newItem(t *testing.T) {
12 item := newItem("key", 123, time.Hour, false)
13 require.NotNil(t, item)
14 assert.Equal(t, "key", item.key)
15 assert.Equal(t, 123, item.value)
16 assert.Equal(t, time.Hour, item.ttl)
17 assert.Equal(t, int64(-1), item.version)
18 assert.WithinDuration(t, time.Now().Add(time.Hour), item.expiresAt, time.Minute)
19 }
20
21 func Test_Item_update(t *testing.T) {
22 item := Item[string, string]{
23 expiresAt: time.Now().Add(-time.Hour),
24 value: "hello",
25 version: 0,
26 }
27
28 item.update("test", time.Hour)
29 assert.Equal(t, "test", item.value)
30 assert.Equal(t, time.Hour, item.ttl)
31 assert.Equal(t, int64(1), item.version)
32 assert.WithinDuration(t, time.Now().Add(time.Hour), item.expiresAt, time.Minute)
33
34 item.update("previous ttl", PreviousOrDefaultTTL)
35 assert.Equal(t, "previous ttl", item.value)
36 assert.Equal(t, time.Hour, item.ttl)
37 assert.Equal(t, int64(2), item.version)
38 assert.WithinDuration(t, time.Now().Add(time.Hour), item.expiresAt, time.Minute)
39
40 item.update("hi", NoTTL)
41 assert.Equal(t, "hi", item.value)
42 assert.Equal(t, NoTTL, item.ttl)
43 assert.Equal(t, int64(3), item.version)
44 assert.Zero(t, item.expiresAt)
45 }
46
47 func Test_Item_touch(t *testing.T) {
48 var item Item[string, string]
49 item.touch()
50 assert.Equal(t, int64(0), item.version)
51 assert.Zero(t, item.expiresAt)
52
53 item.ttl = time.Hour
54 item.touch()
55 assert.Equal(t, int64(0), item.version)
56 assert.WithinDuration(t, time.Now().Add(time.Hour), item.expiresAt, time.Minute)
57 }
58
59 func Test_Item_IsExpired(t *testing.T) {
60
61 item := Item[string, string]{
62 expiresAt: time.Now().Add(-time.Hour),
63 }
64
65 assert.False(t, item.IsExpired())
66
67
68 item.ttl = time.Hour
69 assert.True(t, item.IsExpired())
70
71
72 item.expiresAt = time.Now().Add(time.Hour)
73 assert.False(t, item.IsExpired())
74 }
75
76 func Test_Item_Key(t *testing.T) {
77 item := Item[string, string]{
78 key: "test",
79 }
80
81 assert.Equal(t, "test", item.Key())
82 }
83
84 func Test_Item_Value(t *testing.T) {
85 item := Item[string, string]{
86 value: "test",
87 }
88
89 assert.Equal(t, "test", item.Value())
90 }
91
92 func Test_Item_TTL(t *testing.T) {
93 item := Item[string, string]{
94 ttl: time.Hour,
95 }
96
97 assert.Equal(t, time.Hour, item.TTL())
98 }
99
100 func Test_Item_ExpiresAt(t *testing.T) {
101 now := time.Now()
102 item := Item[string, string]{
103 expiresAt: now,
104 }
105
106 assert.Equal(t, now, item.ExpiresAt())
107 }
108
109 func Test_Item_Version(t *testing.T) {
110 item := Item[string, string]{version: 5}
111 assert.Equal(t, int64(5), item.Version())
112 }
113
View as plain text