@@ -432,7 +432,7 @@ var _ = Describe("Stream Cancelations", func() {
432
432
433
433
Context ("canceling the context" , func () {
434
434
It ("downloads data when the receiving peer cancels the context for accepting streams" , func () {
435
- server , err := quic .ListenAddr ("localhost:0" , getTLSConfig (), nil )
435
+ server , err := quic .ListenAddr ("localhost:0" , getTLSConfig (), getQuicConfig ( nil ) )
436
436
Expect (err ).ToNot (HaveOccurred ())
437
437
438
438
go func () {
@@ -499,31 +499,33 @@ var _ = Describe("Stream Cancelations", func() {
499
499
})
500
500
501
501
It ("downloads data when the sending peer cancels the context for opening streams" , func () {
502
- server , err := quic .ListenAddr ("localhost:0" , getTLSConfig (), nil )
502
+ const (
503
+ numStreams = 15
504
+ maxIncomingStreams = 5
505
+ )
506
+ server , err := quic .ListenAddr ("localhost:0" , getTLSConfig (), getQuicConfig (nil ))
503
507
Expect (err ).ToNot (HaveOccurred ())
504
508
509
+ msg := make (chan struct {}, 1 )
505
510
var numCanceled int32
506
511
go func () {
507
512
defer GinkgoRecover ()
513
+ defer close (msg )
508
514
sess , err := server .Accept (context .Background ())
509
515
Expect (err ).ToNot (HaveOccurred ())
510
516
511
517
var numOpened int
512
- ticker := time .NewTicker (250 * time .Microsecond )
513
518
for numOpened < numStreams {
514
- <- ticker .C
515
- ctx , cancel := context .WithCancel (context .Background ())
519
+ ctx , cancel := context .WithTimeout (context .Background (), scaleDuration (20 * time .Millisecond ))
516
520
defer cancel ()
517
- // cancel accepting half of the streams
518
- shouldCancel := rand .Int31 ()% 2 == 0
519
-
520
- if shouldCancel {
521
- time .AfterFunc (5 * time .Millisecond , cancel )
522
- }
523
521
str , err := sess .OpenUniStreamSync (ctx )
524
522
if err != nil {
523
+ Expect (err ).To (MatchError (context .DeadlineExceeded ))
525
524
atomic .AddInt32 (& numCanceled , 1 )
526
- Expect (err ).To (MatchError ("context canceled" ))
525
+ select {
526
+ case msg <- struct {}{}:
527
+ default :
528
+ }
527
529
continue
528
530
}
529
531
numOpened ++
@@ -539,30 +541,29 @@ var _ = Describe("Stream Cancelations", func() {
539
541
sess , err := quic .DialAddr (
540
542
fmt .Sprintf ("localhost:%d" , server .Addr ().(* net.UDPAddr ).Port ),
541
543
getTLSClientConfig (),
542
- getQuicConfig (& quic.Config {MaxIncomingUniStreams : 5 }),
544
+ getQuicConfig (& quic.Config {MaxIncomingUniStreams : maxIncomingStreams }),
543
545
)
544
546
Expect (err ).ToNot (HaveOccurred ())
545
547
546
548
var wg sync.WaitGroup
547
549
wg .Add (numStreams )
548
- ticker := time .NewTicker (10 * time .Millisecond )
549
550
for i := 0 ; i < numStreams ; i ++ {
550
- <- ticker .C
551
- go func () {
551
+ <- msg
552
+ str , err := sess .AcceptUniStream (context .Background ())
553
+ Expect (err ).ToNot (HaveOccurred ())
554
+ go func (str quic.ReceiveStream ) {
552
555
defer GinkgoRecover ()
553
- str , err := sess .AcceptUniStream (context .Background ())
554
- Expect (err ).ToNot (HaveOccurred ())
555
556
data , err := ioutil .ReadAll (str )
556
557
Expect (err ).ToNot (HaveOccurred ())
557
558
Expect (data ).To (Equal (PRData ))
558
559
wg .Done ()
559
- }()
560
+ }(str )
560
561
}
561
562
wg .Wait ()
562
563
563
564
count := atomic .LoadInt32 (& numCanceled )
564
565
fmt .Fprintf (GinkgoWriter , "Canceled OpenStreamSync %d times\n " , count )
565
- Expect (count ).To (BeNumerically (">" , numStreams / 5 ))
566
+ Expect (count ).To (BeNumerically (">= " , numStreams - maxIncomingStreams ))
566
567
Expect (sess .CloseWithError (0 , "" )).To (Succeed ())
567
568
Expect (server .Close ()).To (Succeed ())
568
569
})
0 commit comments