@@ -10,7 +10,6 @@ import (
10
10
"io"
11
11
"sync"
12
12
"testing"
13
- "time"
14
13
)
15
14
16
15
func muxPair () (* mux , * mux ) {
@@ -112,7 +111,11 @@ func TestMuxReadWrite(t *testing.T) {
112
111
113
112
magic := "hello world"
114
113
magicExt := "hello stderr"
114
+ var wg sync.WaitGroup
115
+ t .Cleanup (wg .Wait )
116
+ wg .Add (1 )
115
117
go func () {
118
+ defer wg .Done ()
116
119
_ , err := s .Write ([]byte (magic ))
117
120
if err != nil {
118
121
t .Errorf ("Write: %v" , err )
@@ -152,13 +155,15 @@ func TestMuxChannelOverflow(t *testing.T) {
152
155
defer writer .Close ()
153
156
defer mux .Close ()
154
157
155
- wDone := make (chan int , 1 )
158
+ var wg sync.WaitGroup
159
+ t .Cleanup (wg .Wait )
160
+ wg .Add (1 )
156
161
go func () {
162
+ defer wg .Done ()
157
163
if _ , err := writer .Write (make ([]byte , channelWindowSize )); err != nil {
158
164
t .Errorf ("could not fill window: %v" , err )
159
165
}
160
166
writer .Write (make ([]byte , 1 ))
161
- wDone <- 1
162
167
}()
163
168
writer .remoteWin .waitWriterBlocked ()
164
169
@@ -175,7 +180,6 @@ func TestMuxChannelOverflow(t *testing.T) {
175
180
if _ , err := reader .SendRequest ("hello" , true , nil ); err == nil {
176
181
t .Errorf ("SendRequest succeeded." )
177
182
}
178
- <- wDone
179
183
}
180
184
181
185
func TestMuxChannelCloseWriteUnblock (t * testing.T ) {
@@ -184,20 +188,21 @@ func TestMuxChannelCloseWriteUnblock(t *testing.T) {
184
188
defer writer .Close ()
185
189
defer mux .Close ()
186
190
187
- wDone := make (chan int , 1 )
191
+ var wg sync.WaitGroup
192
+ t .Cleanup (wg .Wait )
193
+ wg .Add (1 )
188
194
go func () {
195
+ defer wg .Done ()
189
196
if _ , err := writer .Write (make ([]byte , channelWindowSize )); err != nil {
190
197
t .Errorf ("could not fill window: %v" , err )
191
198
}
192
199
if _ , err := writer .Write (make ([]byte , 1 )); err != io .EOF {
193
200
t .Errorf ("got %v, want EOF for unblock write" , err )
194
201
}
195
- wDone <- 1
196
202
}()
197
203
198
204
writer .remoteWin .waitWriterBlocked ()
199
205
reader .Close ()
200
- <- wDone
201
206
}
202
207
203
208
func TestMuxConnectionCloseWriteUnblock (t * testing.T ) {
@@ -206,28 +211,34 @@ func TestMuxConnectionCloseWriteUnblock(t *testing.T) {
206
211
defer writer .Close ()
207
212
defer mux .Close ()
208
213
209
- wDone := make (chan int , 1 )
214
+ var wg sync.WaitGroup
215
+ t .Cleanup (wg .Wait )
216
+ wg .Add (1 )
210
217
go func () {
218
+ defer wg .Done ()
211
219
if _ , err := writer .Write (make ([]byte , channelWindowSize )); err != nil {
212
220
t .Errorf ("could not fill window: %v" , err )
213
221
}
214
222
if _ , err := writer .Write (make ([]byte , 1 )); err != io .EOF {
215
223
t .Errorf ("got %v, want EOF for unblock write" , err )
216
224
}
217
- wDone <- 1
218
225
}()
219
226
220
227
writer .remoteWin .waitWriterBlocked ()
221
228
mux .Close ()
222
- <- wDone
223
229
}
224
230
225
231
func TestMuxReject (t * testing.T ) {
226
232
client , server := muxPair ()
227
233
defer server .Close ()
228
234
defer client .Close ()
229
235
236
+ var wg sync.WaitGroup
237
+ t .Cleanup (wg .Wait )
238
+ wg .Add (1 )
230
239
go func () {
240
+ defer wg .Done ()
241
+
231
242
ch , ok := <- server .incomingChannels
232
243
if ! ok {
233
244
t .Error ("cannot accept channel" )
@@ -267,6 +278,7 @@ func TestMuxChannelRequest(t *testing.T) {
267
278
268
279
var received int
269
280
var wg sync.WaitGroup
281
+ t .Cleanup (wg .Wait )
270
282
wg .Add (1 )
271
283
go func () {
272
284
for r := range server .incomingRequests {
@@ -295,7 +307,6 @@ func TestMuxChannelRequest(t *testing.T) {
295
307
}
296
308
if ok {
297
309
t .Errorf ("SendRequest(no): %v" , ok )
298
-
299
310
}
300
311
301
312
client .Close ()
@@ -389,27 +400,18 @@ func TestMuxUnknownChannelRequests(t *testing.T) {
389
400
390
401
// Wait for the server to send the keepalive message and receive back a
391
402
// response.
392
- select {
393
- case err := <- kDone :
394
- if err != nil {
395
- t .Fatal (err )
396
- }
397
- case <- time .After (10 * time .Second ):
398
- t .Fatalf ("server never received ack" )
403
+ if err := <- kDone ; err != nil {
404
+ t .Fatal (err )
399
405
}
400
406
401
407
// Confirm client hasn't closed.
402
408
if _ , _ , err := client .SendRequest ("keepalive@golang.org" , true , nil ); err != nil {
403
409
t .Fatalf ("failed to send keepalive: %v" , err )
404
410
}
405
411
406
- select {
407
- case err := <- kDone :
408
- if err != nil {
409
- t .Fatal (err )
410
- }
411
- case <- time .After (10 * time .Second ):
412
- t .Fatalf ("server never shut down" )
412
+ // Wait for the server to shut down.
413
+ if err := <- kDone ; err != nil {
414
+ t .Fatal (err )
413
415
}
414
416
}
415
417
@@ -525,11 +527,7 @@ func TestMuxClosedChannel(t *testing.T) {
525
527
defer ch .Close ()
526
528
527
529
// Wait for the server to close the channel and send the keepalive.
528
- select {
529
- case <- kDone :
530
- case <- time .After (10 * time .Second ):
531
- t .Fatalf ("server never received ack" )
532
- }
530
+ <- kDone
533
531
534
532
// Make sure the channel closed.
535
533
if _ , ok := <- ch .incomingRequests ; ok {
@@ -541,22 +539,29 @@ func TestMuxClosedChannel(t *testing.T) {
541
539
t .Fatalf ("failed to send keepalive: %v" , err )
542
540
}
543
541
544
- select {
545
- case <- kDone :
546
- case <- time .After (10 * time .Second ):
547
- t .Fatalf ("server never shut down" )
548
- }
542
+ // Wait for the server to shut down.
543
+ <- kDone
549
544
}
550
545
551
546
func TestMuxGlobalRequest (t * testing.T ) {
547
+ var sawPeek bool
548
+ var wg sync.WaitGroup
549
+ defer func () {
550
+ wg .Wait ()
551
+ if ! sawPeek {
552
+ t .Errorf ("never saw 'peek' request" )
553
+ }
554
+ }()
555
+
552
556
clientMux , serverMux := muxPair ()
553
557
defer serverMux .Close ()
554
558
defer clientMux .Close ()
555
559
556
- var seen bool
560
+ wg . Add ( 1 )
557
561
go func () {
562
+ defer wg .Done ()
558
563
for r := range serverMux .incomingRequests {
559
- seen = seen || r .Type == "peek"
564
+ sawPeek = sawPeek || r .Type == "peek"
560
565
if r .WantReply {
561
566
err := r .Reply (r .Type == "yes" ,
562
567
append ([]byte (r .Type ), r .Payload ... ))
@@ -586,10 +591,6 @@ func TestMuxGlobalRequest(t *testing.T) {
586
591
t .Errorf ("SendRequest(\" no\" , true, \" a\" ): %v %v %v" ,
587
592
ok , data , err )
588
593
}
589
-
590
- if ! seen {
591
- t .Errorf ("never saw 'peek' request" )
592
- }
593
594
}
594
595
595
596
func TestMuxGlobalRequestUnblock (t * testing.T ) {
@@ -739,7 +740,13 @@ func TestMuxMaxPacketSize(t *testing.T) {
739
740
t .Errorf ("could not send packet" )
740
741
}
741
742
742
- go a .SendRequest ("hello" , false , nil )
743
+ var wg sync.WaitGroup
744
+ t .Cleanup (wg .Wait )
745
+ wg .Add (1 )
746
+ go func () {
747
+ a .SendRequest ("hello" , false , nil )
748
+ wg .Done ()
749
+ }()
743
750
744
751
_ , ok := <- b .incomingRequests
745
752
if ok {
0 commit comments