-
Notifications
You must be signed in to change notification settings - Fork 0
/
redis_test.go
130 lines (124 loc) · 3.23 KB
/
redis_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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package gcache
import (
"context"
"fmt"
"github.com/NotFound1911/gcache/mocks"
"github.com/golang/mock/gomock"
"github.com/redis/go-redis/v9"
"github.com/stretchr/testify/assert"
"testing"
"time"
)
func TestRedisCache_Set(t *testing.T) {
testCases := []struct {
name string
mock func(controller *gomock.Controller) redis.Cmdable
key string
val string
expiration time.Duration
wantErr error
}{
{
name: "set value",
mock: func(controller *gomock.Controller) redis.Cmdable {
cmd := mocks.NewMockCmdable(controller)
status := redis.NewStatusCmd(context.Background())
status.SetVal("OK")
cmd.EXPECT().
Set(context.Background(), "key", "val", time.Second).Return(status)
return cmd
},
key: "key",
val: "val",
expiration: time.Second,
},
{
name: "timeout",
mock: func(controller *gomock.Controller) redis.Cmdable {
cmd := mocks.NewMockCmdable(controller)
status := redis.NewStatusCmd(context.Background())
status.SetErr(context.DeadlineExceeded)
cmd.EXPECT().
Set(context.Background(), "key", "val", time.Second).Return(status)
return cmd
},
key: "key",
val: "val",
expiration: time.Second,
wantErr: context.DeadlineExceeded,
},
{
name: "unexpected name",
mock: func(controller *gomock.Controller) redis.Cmdable {
cmd := mocks.NewMockCmdable(controller)
status := redis.NewStatusCmd(context.Background())
status.SetVal("NO OK")
cmd.EXPECT().
Set(context.Background(), "key", "val", time.Second).Return(status)
return cmd
},
key: "key",
val: "val",
expiration: time.Second,
wantErr: fmt.Errorf("%w, 返回信息: %s", errFailedToSetCache, "NO OK"),
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
c := NewRedisCache(tc.mock(ctrl))
err := c.Set(context.Background(), tc.key, tc.val, tc.expiration)
assert.Equal(t, tc.wantErr, err)
})
}
}
func TestRedisCache_Get(t *testing.T) {
testCases := []struct {
name string
mock func(controller *gomock.Controller) redis.Cmdable
key string
wantErr error
wantVal string
}{
{
name: "get value",
mock: func(controller *gomock.Controller) redis.Cmdable {
cmd := mocks.NewMockCmdable(controller)
str := redis.NewStringCmd(context.Background())
str.SetVal("val")
cmd.EXPECT().
Get(context.Background(), "key").Return(str)
return cmd
},
key: "key",
wantVal: "val",
},
{
name: "timeout",
mock: func(controller *gomock.Controller) redis.Cmdable {
cmd := mocks.NewMockCmdable(controller)
str := redis.NewStringCmd(context.Background())
str.SetErr(context.DeadlineExceeded)
cmd.EXPECT().
Get(context.Background(), "key").Return(str)
return cmd
},
key: "key",
wantErr: context.DeadlineExceeded,
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
c := NewRedisCache(tc.mock(ctrl))
val, err := c.Get(context.Background(), tc.key)
assert.Equal(t, tc.wantErr, err)
if err != nil {
return
}
assert.Equal(t, tc.wantVal, val)
})
}
}