@@ -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,30 @@ 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 {})
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
+ msg <- struct {}{}
527
526
continue
528
527
}
529
528
numOpened ++
@@ -539,30 +538,32 @@ var _ = Describe("Stream Cancelations", func() {
539
538
sess , err := quic .DialAddr (
540
539
fmt .Sprintf ("localhost:%d" , server .Addr ().(* net.UDPAddr ).Port ),
541
540
getTLSClientConfig (),
542
- getQuicConfig (& quic.Config {MaxIncomingUniStreams : 5 }),
541
+ getQuicConfig (& quic.Config {MaxIncomingUniStreams : maxIncomingStreams }),
543
542
)
544
543
Expect (err ).ToNot (HaveOccurred ())
545
544
546
545
var wg sync.WaitGroup
547
546
wg .Add (numStreams )
548
- ticker := time .NewTicker (10 * time .Millisecond )
549
547
for i := 0 ; i < numStreams ; i ++ {
550
- <- ticker .C
551
- go func () {
548
+ <- msg
549
+ str , err := sess .AcceptUniStream (context .Background ())
550
+ Expect (err ).ToNot (HaveOccurred ())
551
+ go func (str quic.ReceiveStream ) {
552
552
defer GinkgoRecover ()
553
- str , err := sess .AcceptUniStream (context .Background ())
554
- Expect (err ).ToNot (HaveOccurred ())
555
553
data , err := ioutil .ReadAll (str )
556
554
Expect (err ).ToNot (HaveOccurred ())
557
555
Expect (data ).To (Equal (PRData ))
558
556
wg .Done ()
559
- }()
557
+ }(str )
560
558
}
561
559
wg .Wait ()
562
560
563
561
count := atomic .LoadInt32 (& numCanceled )
564
562
fmt .Fprintf (GinkgoWriter , "Canceled OpenStreamSync %d times\n " , count )
565
- Expect (count ).To (BeNumerically (">" , numStreams / 5 ))
563
+ Expect (count ).To (And (
564
+ BeNumerically (">=" , numStreams - maxIncomingStreams ),
565
+ BeNumerically ("<" , numStreams ),
566
+ ))
566
567
Expect (sess .CloseWithError (0 , "" )).To (Succeed ())
567
568
Expect (server .Close ()).To (Succeed ())
568
569
})
0 commit comments