@@ -17,6 +17,19 @@ type listenerCall struct {
17
17
err error
18
18
}
19
19
20
+ func testListenerClose (t * testing.T , l * Listener , calls <- chan * listenerCall ) {
21
+ if err := l .Close (); err != nil {
22
+ t .Error ("Listener Close error:" , err )
23
+ }
24
+ for call := range calls {
25
+ if call .err != nil {
26
+ t .Error ("unexpected Listener error:" , call .err )
27
+ } else {
28
+ t .Errorf ("unexpected message %q on %q" , call .message , call .channel )
29
+ }
30
+ }
31
+ }
32
+
20
33
// newTestListener closes the channel upon ErrClosed, or test-time-out.
21
34
func newTestListener (t * testing.T ) (* Listener , <- chan * listenerCall ) {
22
35
record := make (chan * listenerCall , 99 )
@@ -43,32 +56,19 @@ func newTestListener(t *testing.T) (*Listener, <-chan *listenerCall) {
43
56
for {
44
57
select {
45
58
case <- timeout .C :
46
- t .Fatal ("Listener recording time-out" )
59
+ t .Error ("Listener recording time-out" )
60
+ return
61
+
47
62
case call := <- record :
48
63
if call .err == ErrClosed {
49
- t .Log ("Listener recording stop on ErrClosed" )
50
- go func () {
51
- for call := range record {
52
- if call .err != nil {
53
- t .Error ("Listener error after ErrClosed:" , call .err )
54
- } else {
55
- t .Errorf ("Listener message %q on %q after ErrClosed" , call .message , call .channel )
56
- }
57
- }
58
- }()
64
+ time .Sleep (10 * time .Millisecond )
65
+ if len (record ) != 0 {
66
+ t .Errorf ("got %d Listener invocations after ErrClosed" , len (record ))
67
+ }
59
68
return
60
69
}
61
70
62
- select {
63
- case <- timeout .C :
64
- if call .err != nil {
65
- t .Fatal ("Unwanted Listener error:" , call .err )
66
- } else {
67
- t .Fatalf ("Unwanted Listener message %q on %q" , call .message , call .channel )
68
- }
69
- case out <- call :
70
- break
71
- }
71
+ out <- call
72
72
}
73
73
}
74
74
}()
@@ -111,7 +111,7 @@ func TestSubscribe(t *testing.T) {
111
111
}()
112
112
113
113
l , calls := newTestListener (t )
114
- defer l . Close ( )
114
+ defer testListenerClose ( t , l , calls )
115
115
116
116
l .SUBSCRIBE (channel )
117
117
call1 := <- calls
@@ -131,8 +131,8 @@ func TestSubscribe(t *testing.T) {
131
131
func TestUnsubscribe (t * testing.T ) {
132
132
t .Parallel ()
133
133
134
- l , _ := newTestListener (t )
135
- defer l . Close ( )
134
+ l , calls := newTestListener (t )
135
+ defer testListenerClose ( t , l , calls )
136
136
137
137
channel := randomKey ("channel" )
138
138
l .SUBSCRIBE (channel )
@@ -153,8 +153,8 @@ func TestUnsubscribe(t *testing.T) {
153
153
func TestUnsubscribeRace (t * testing.T ) {
154
154
t .Parallel ()
155
155
156
- l , _ := newTestListener (t )
157
- defer l . Close ( )
156
+ l , calls := newTestListener (t )
157
+ defer testListenerClose ( t , l , calls )
158
158
159
159
channel := randomKey ("channel" )
160
160
l .SUBSCRIBE (channel )
@@ -174,8 +174,8 @@ func TestUnsubscribeRace(t *testing.T) {
174
174
func TestSubscriptionConcurrency (t * testing.T ) {
175
175
t .Parallel ()
176
176
177
- l , _ := newTestListener (t )
178
- defer l . Close ( )
177
+ l , calls := newTestListener (t )
178
+ defer testListenerClose ( t , l , calls )
179
179
180
180
channels := make ([]string , 9 )
181
181
for i := range channels {
@@ -204,7 +204,8 @@ func TestSubscriptionConcurrency(t *testing.T) {
204
204
func TestListenerClose (t * testing.T ) {
205
205
t .Parallel ()
206
206
207
- l , _ := newTestListener (t )
207
+ l , calls := newTestListener (t )
208
+ defer testListenerClose (t , l , calls )
208
209
209
210
channel1 := randomKey ("channel" )
210
211
channel2 := randomKey ("channel" )
@@ -238,7 +239,7 @@ func TestListenerBufferLimit(t *testing.T) {
238
239
t .Parallel ()
239
240
240
241
l , calls := newTestListener (t )
241
- defer l . Close ( )
242
+ defer testListenerClose ( t , l , calls )
242
243
243
244
channel := randomKey ("channel" )
244
245
l .SUBSCRIBE (channel )
0 commit comments