9
9
"testing"
10
10
"time"
11
11
12
+ "code.gitea.io/gitea/modules/log"
12
13
"github.com/stretchr/testify/assert"
13
14
)
14
15
@@ -111,7 +112,6 @@ func TestChannelQueue_Pause(t *testing.T) {
111
112
if pausable , ok := queue .(Pausable ); ok {
112
113
pausable .Pause ()
113
114
}
114
- pushBack = false
115
115
lock .Unlock ()
116
116
return data
117
117
}
@@ -123,7 +123,9 @@ func TestChannelQueue_Pause(t *testing.T) {
123
123
}
124
124
return nil
125
125
}
126
- nilFn := func (_ func ()) {}
126
+
127
+ queueShutdown := []func (){}
128
+ queueTerminate := []func (){}
127
129
128
130
queue , err = NewChannelQueue (handle ,
129
131
ChannelQueueConfiguration {
@@ -139,7 +141,34 @@ func TestChannelQueue_Pause(t *testing.T) {
139
141
}, & testData {})
140
142
assert .NoError (t , err )
141
143
142
- go queue .Run (nilFn , nilFn )
144
+ go queue .Run (func (shutdown func ()) {
145
+ lock .Lock ()
146
+ defer lock .Unlock ()
147
+ queueShutdown = append (queueShutdown , shutdown )
148
+ }, func (terminate func ()) {
149
+ lock .Lock ()
150
+ defer lock .Unlock ()
151
+ queueTerminate = append (queueTerminate , terminate )
152
+ })
153
+
154
+ // Shutdown and Terminate in defer
155
+ defer func () {
156
+ lock .Lock ()
157
+ callbacks := make ([]func (), len (queueShutdown ))
158
+ copy (callbacks , queueShutdown )
159
+ lock .Unlock ()
160
+ for _ , callback := range callbacks {
161
+ callback ()
162
+ }
163
+ lock .Lock ()
164
+ log .Info ("Finally terminating" )
165
+ callbacks = make ([]func (), len (queueTerminate ))
166
+ copy (callbacks , queueTerminate )
167
+ lock .Unlock ()
168
+ for _ , callback := range callbacks {
169
+ callback ()
170
+ }
171
+ }()
143
172
144
173
test1 := testData {"A" , 1 }
145
174
test2 := testData {"B" , 2 }
@@ -155,14 +184,11 @@ func TestChannelQueue_Pause(t *testing.T) {
155
184
156
185
pausable .Pause ()
157
186
158
- paused , resumed := pausable .IsPausedIsResumed ()
187
+ paused , _ := pausable .IsPausedIsResumed ()
159
188
160
189
select {
161
190
case <- paused :
162
- case <- resumed :
163
- assert .Fail (t , "Queue should not be resumed" )
164
- return
165
- default :
191
+ case <- time .After (100 * time .Millisecond ):
166
192
assert .Fail (t , "Queue is not paused" )
167
193
return
168
194
}
@@ -179,10 +205,11 @@ func TestChannelQueue_Pause(t *testing.T) {
179
205
assert .Nil (t , result2 )
180
206
181
207
pausable .Resume ()
208
+ _ , resumed := pausable .IsPausedIsResumed ()
182
209
183
210
select {
184
211
case <- resumed :
185
- default :
212
+ case <- time . After ( 100 * time . Millisecond ) :
186
213
assert .Fail (t , "Queue should be resumed" )
187
214
}
188
215
@@ -199,47 +226,47 @@ func TestChannelQueue_Pause(t *testing.T) {
199
226
pushBack = true
200
227
lock .Unlock ()
201
228
202
- paused , resumed = pausable .IsPausedIsResumed ()
229
+ _ , resumed = pausable .IsPausedIsResumed ()
203
230
204
231
select {
205
- case <- paused :
206
- assert .Fail (t , "Queue should not be paused" )
207
- return
208
232
case <- resumed :
209
- default :
233
+ case <- time . After ( 100 * time . Millisecond ) :
210
234
assert .Fail (t , "Queue is not resumed" )
211
235
return
212
236
}
213
237
214
238
queue .Push (& test1 )
239
+ paused , _ = pausable .IsPausedIsResumed ()
215
240
216
241
select {
217
242
case <- paused :
218
243
case <- handleChan :
219
244
assert .Fail (t , "handler chan should not contain test1" )
220
245
return
221
- case <- time .After (500 * time .Millisecond ):
246
+ case <- time .After (100 * time .Millisecond ):
222
247
assert .Fail (t , "queue should be paused" )
223
248
return
224
249
}
225
250
226
- paused , resumed = pausable .IsPausedIsResumed ()
251
+ lock .Lock ()
252
+ pushBack = false
253
+ lock .Unlock ()
254
+
255
+ paused , _ = pausable .IsPausedIsResumed ()
227
256
228
257
select {
229
258
case <- paused :
230
- case <- resumed :
231
- assert .Fail (t , "Queue should not be resumed" )
232
- return
233
- default :
259
+ case <- time .After (100 * time .Millisecond ):
234
260
assert .Fail (t , "Queue is not paused" )
235
261
return
236
262
}
237
263
238
264
pausable .Resume ()
265
+ _ , resumed = pausable .IsPausedIsResumed ()
239
266
240
267
select {
241
268
case <- resumed :
242
- default :
269
+ case <- time . After ( 100 * time . Millisecond ) :
243
270
assert .Fail (t , "Queue should be resumed" )
244
271
}
245
272
0 commit comments