1
1
package pool
2
2
3
3
import (
4
+ "sync"
4
5
"testing"
5
6
"time"
6
7
@@ -20,12 +21,16 @@ func TestSchedule(t *testing.T) {
20
21
worker = newTestWorker (t , ctx , node )
21
22
d = 10 * time .Millisecond
22
23
iter = 0
24
+ lock sync.Mutex
23
25
)
24
26
defer cleanup (t , rdb , false , testName )
25
27
28
+ inc := func () { lock .Lock (); iter ++ ; lock .Unlock () }
29
+ it := func () int { lock .Lock (); defer lock .Unlock (); return iter }
30
+
26
31
producer := newTestProducer (testName , func () (* JobPlan , error ) {
27
- iter ++
28
- switch iter {
32
+ inc ()
33
+ switch it () {
29
34
case 1 :
30
35
assert .Equal (t , 0 , numJobs (t , worker ), "unexpected number of jobs" )
31
36
// First iteration: start a job
@@ -60,17 +65,19 @@ func TestSchedule(t *testing.T) {
60
65
// Seventh iteration: stop schedule
61
66
return nil , ErrScheduleStop
62
67
}
63
- t .Errorf ("unexpected iteration %d" , iter )
68
+ t .Errorf ("unexpected iteration %d" , it () )
64
69
return nil , nil
65
70
})
66
71
67
72
// Observe call to reset
68
- jobMap , err := rmap .Join (ctx , testName , rdb )
73
+ jobMap , err := rmap .Join (ctx , testName + ":" + testName , rdb )
69
74
require .NoError (t , err )
70
75
var reset bool
71
76
c := jobMap .Subscribe ()
72
77
defer jobMap .Unsubscribe (c )
78
+ done := make (chan struct {})
73
79
go func () {
80
+ defer close (done )
74
81
for ev := range c {
75
82
if ev == rmap .EventReset {
76
83
reset = true
@@ -82,9 +89,14 @@ func TestSchedule(t *testing.T) {
82
89
err = node .Schedule (ctx , producer , d )
83
90
require .NoError (t , err )
84
91
85
- jobMap .Subscribe ()
86
- assert .Eventually (t , func () bool { return iter == 7 }, max , delay , "schedule should have stopped" )
87
- assert .Eventually (t , func () bool { return reset }, max , delay , "job map should have been reset" )
92
+ assert .Eventually (t , func () bool { return it () == 7 }, max , delay , "schedule should have stopped" )
93
+ select {
94
+ case <- done :
95
+ reset = true
96
+ case <- time .After (time .Second ):
97
+ break
98
+ }
99
+ assert .True (t , reset , "job map should have been reset" )
88
100
assert .NotContains (t , buf .String (), "level=error" , "unexpected logged error" )
89
101
}
90
102
0 commit comments