@@ -47,27 +47,24 @@ func TestLocker(t *testing.T) {
47
47
func testLocker (t * testing.T , locker Locker ) {
48
48
t .Run ("lock" , func (t * testing.T ) {
49
49
parentCtx := context .Background ()
50
- ctx , release , err := locker .Lock (parentCtx , "test" )
50
+ release , err := locker .Lock (parentCtx , "test" )
51
51
defer release ()
52
52
53
- assert .NotEqual (t , parentCtx , ctx ) // new context should be returned
54
53
assert .NoError (t , err )
55
54
56
55
func () {
57
- parentCtx , cancel := context .WithTimeout (context .Background (), time .Second )
56
+ ctx , cancel := context .WithTimeout (context .Background (), time .Second )
58
57
defer cancel ()
59
- ctx , release , err := locker .Lock (parentCtx , "test" )
58
+ release , err := locker .Lock (ctx , "test" )
60
59
defer release ()
61
60
62
61
assert .Error (t , err )
63
- assert .Equal (t , parentCtx , ctx ) // should return the same context
64
62
}()
65
63
66
64
release ()
67
- assert .Error (t , ctx .Err ())
68
65
69
66
func () {
70
- _ , release , err := locker .Lock (context .Background (), "test" )
67
+ release , err := locker .Lock (context .Background (), "test" )
71
68
defer release ()
72
69
73
70
assert .NoError (t , err )
@@ -76,29 +73,26 @@ func testLocker(t *testing.T, locker Locker) {
76
73
77
74
t .Run ("try lock" , func (t * testing.T ) {
78
75
parentCtx := context .Background ()
79
- ok , ctx , release , err := locker .TryLock (parentCtx , "test" )
76
+ ok , release , err := locker .TryLock (parentCtx , "test" )
80
77
defer release ()
81
78
82
79
assert .True (t , ok )
83
- assert .NotEqual (t , parentCtx , ctx ) // new context should be returned
84
80
assert .NoError (t , err )
85
81
86
82
func () {
87
- parentCtx , cancel := context .WithTimeout (context .Background (), time .Second )
83
+ ctx , cancel := context .WithTimeout (context .Background (), time .Second )
88
84
defer cancel ()
89
- ok , ctx , release , err := locker .TryLock (parentCtx , "test" )
85
+ ok , release , err := locker .TryLock (ctx , "test" )
90
86
defer release ()
91
87
92
88
assert .False (t , ok )
93
89
assert .NoError (t , err )
94
- assert .Equal (t , parentCtx , ctx ) // should return the same context
95
90
}()
96
91
97
92
release ()
98
- assert .Error (t , ctx .Err ())
99
93
100
94
func () {
101
- ok , _ , release , _ := locker .TryLock (context .Background (), "test" )
95
+ ok , release , _ := locker .TryLock (context .Background (), "test" )
102
96
defer release ()
103
97
104
98
assert .True (t , ok )
@@ -107,15 +101,15 @@ func testLocker(t *testing.T, locker Locker) {
107
101
108
102
t .Run ("wait and acquired" , func (t * testing.T ) {
109
103
ctx := context .Background ()
110
- _ , release , err := locker .Lock (ctx , "test" )
104
+ release , err := locker .Lock (ctx , "test" )
111
105
require .NoError (t , err )
112
106
113
107
wg := & sync.WaitGroup {}
114
108
wg .Add (1 )
115
109
go func () {
116
110
defer wg .Done ()
117
111
started := time .Now ()
118
- _ , release , err := locker .Lock (context .Background (), "test" ) // should be blocked for seconds
112
+ release , err := locker .Lock (context .Background (), "test" ) // should be blocked for seconds
119
113
defer release ()
120
114
assert .Greater (t , time .Since (started ), time .Second )
121
115
assert .NoError (t , err )
@@ -127,34 +121,15 @@ func testLocker(t *testing.T, locker Locker) {
127
121
wg .Wait ()
128
122
})
129
123
130
- t .Run ("continue after release" , func (t * testing.T ) {
131
- ctx := context .Background ()
132
-
133
- ctxBeforeLock := ctx
134
- ctx , release , err := locker .Lock (ctx , "test" )
135
-
136
- require .NoError (t , err )
137
- assert .NoError (t , ctx .Err ())
138
- assert .NotEqual (t , ctxBeforeLock , ctx )
139
-
140
- ctxBeforeRelease := ctx
141
- ctx = release ()
142
-
143
- assert .NoError (t , ctx .Err ())
144
- assert .Error (t , ctxBeforeRelease .Err ())
145
-
146
- // so it can continue with ctx to do more work
147
- })
148
-
149
124
t .Run ("multiple release" , func (t * testing.T ) {
150
125
ctx := context .Background ()
151
126
152
- _ , release1 , err := locker .Lock (ctx , "test" )
127
+ release1 , err := locker .Lock (ctx , "test" )
153
128
require .NoError (t , err )
154
129
155
130
release1 ()
156
131
157
- _ , release2 , err := locker .Lock (ctx , "test" )
132
+ release2 , err := locker .Lock (ctx , "test" )
158
133
defer release2 ()
159
134
require .NoError (t , err )
160
135
@@ -163,7 +138,7 @@ func testLocker(t *testing.T, locker Locker) {
163
138
// and it shouldn't affect the other lock
164
139
release1 ()
165
140
166
- ok , _ , release3 , err := locker .TryLock (ctx , "test" )
141
+ ok , release3 , err := locker .TryLock (ctx , "test" )
167
142
defer release3 ()
168
143
require .NoError (t , err )
169
144
// It should be able to acquire the lock;
@@ -184,28 +159,23 @@ func testRedisLocker(t *testing.T, locker *redisLocker) {
184
159
// Otherwise, it will affect other tests.
185
160
t .Run ("close" , func (t * testing.T ) {
186
161
assert .NoError (t , locker .Close ())
187
- _ , _ , err := locker .Lock (context .Background (), "test" )
162
+ _ , err := locker .Lock (context .Background (), "test" )
188
163
assert .Error (t , err )
189
164
})
190
165
}()
191
166
192
167
t .Run ("failed extend" , func (t * testing.T ) {
193
- ctx , release , err := locker .Lock (context .Background (), "test" )
168
+ release , err := locker .Lock (context .Background (), "test" )
194
169
defer release ()
195
170
require .NoError (t , err )
196
171
197
172
// It simulates that there are some problems with extending like network issues or redis server down.
198
173
v , ok := locker .mutexM .Load ("test" )
199
174
require .True (t , ok )
200
- m := v .(* redisMutex )
201
- _ , _ = m .mutex .Unlock () // release it to make it impossible to extend
202
-
203
- select {
204
- case <- time .After (redisLockExpiry + time .Second ):
205
- t .Errorf ("lock should be expired" )
206
- case <- ctx .Done ():
207
- var errTaken * redsync.ErrTaken
208
- assert .ErrorAs (t , context .Cause (ctx ), & errTaken )
209
- }
175
+ m := v .(* redsync.Mutex )
176
+ _ , _ = m .Unlock () // release it to make it impossible to extend
177
+
178
+ // In current design, callers can't know the lock can't be extended.
179
+ // Just keep this case to improve the test coverage.
210
180
})
211
181
}
0 commit comments