-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathredismemo_test.go
110 lines (96 loc) · 2.59 KB
/
redismemo_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
package redismemo
import (
"context"
"errors"
"testing"
"time"
"github.com/go-redis/redismock/v9"
"github.com/redis/go-redis/v9"
)
func TestGetWhenValueIsSet(t *testing.T) {
rdb, mock := redismock.NewClientMock()
mock.ExpectGet("my_key").SetVal("my_value")
memo := RedisMemo(rdb)
called := false
callback := func() string {
called = true
return "you fail"
}
v, err := memo(context.Background(), "my_key", callback, 0)
if err != nil {
t.Error(err)
}
if v != "my_value" {
t.Errorf("expected memo to return `my_value`, did `%s`", v)
}
if called {
t.Errorf("the compute was called, shouldn't have")
}
}
func TestGetWhenRedisFails(t *testing.T) {
rdb, mock := redismock.NewClientMock()
expectedError := errors.New("handshake error")
mock.ExpectGet("my_key").SetErr(expectedError)
memo := RedisMemo(rdb)
called := false
callback := func() string {
called = true
return "you fail"
}
if _, err := memo(context.Background(), "my_key", callback, 0); err != expectedError {
t.Errorf("expected memo to yield this specific error, did %s", err.Error())
}
if called {
t.Errorf("the compute was called, shouldn't have")
}
}
func TestGetWhenValueIsNotSet(t *testing.T) {
rdb, mock := redismock.NewClientMock()
mock.ExpectGet("my_key").SetErr(redis.Nil)
mock.ExpectSet("my_key", "my_value", 5*time.Minute).SetVal("OK")
memo := RedisMemo(rdb)
called := false
callback := func() string {
called = true
return "my_value"
}
v, err := memo(context.Background(), "my_key", callback, 5*time.Minute)
if err != nil {
t.Error(err)
}
if v != "my_value" {
t.Errorf("Expected value to be set to `my_value`, was `%s`", v)
}
if !called {
t.Errorf("The callback was not called (how?)")
}
if err := mock.ExpectationsWereMet(); err != nil {
t.Error(err)
}
}
func TestGetWhenValueIsNotSetAndSetFails(t *testing.T) {
rdb, mock := redismock.NewClientMock()
mock.ExpectGet("my_key").SetErr(redis.Nil)
expectedSetError := errors.New("handshake error")
mock.ExpectSet("my_key", "my_value", 5*time.Minute).SetErr(expectedSetError)
memo := RedisMemo(rdb)
called := false
callback := func() string {
called = true
return "my_value"
}
v, err := memo(context.Background(), "my_key", callback, 5*time.Minute)
if err != expectedSetError {
t.Errorf("Expected memo() to fail with our error, failed with %s", err.Error())
}
if v != "" {
t.Errorf("unacceptable value response according to the protocol")
}
if !called {
// should have been called since this is a set error
t.Errorf("The callback was not called (how?)")
}
if err := mock.ExpectationsWereMet(); err != nil {
t.Error(err)
}
}