Skip to content

Commit 4f95c69

Browse files
make the OpenStreamSync cancelation test less flaky
1 parent d9c7467 commit 4f95c69

File tree

1 file changed

+21
-20
lines changed

1 file changed

+21
-20
lines changed

integrationtests/self/cancelation_test.go

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ var _ = Describe("Stream Cancelations", func() {
432432

433433
Context("canceling the context", func() {
434434
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))
436436
Expect(err).ToNot(HaveOccurred())
437437

438438
go func() {
@@ -499,31 +499,30 @@ var _ = Describe("Stream Cancelations", func() {
499499
})
500500

501501
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))
503507
Expect(err).ToNot(HaveOccurred())
504508

509+
msg := make(chan struct{})
505510
var numCanceled int32
506511
go func() {
507512
defer GinkgoRecover()
513+
defer close(msg)
508514
sess, err := server.Accept(context.Background())
509515
Expect(err).ToNot(HaveOccurred())
510516

511517
var numOpened int
512-
ticker := time.NewTicker(250 * time.Microsecond)
513518
for numOpened < numStreams {
514-
<-ticker.C
515-
ctx, cancel := context.WithCancel(context.Background())
519+
ctx, cancel := context.WithTimeout(context.Background(), scaleDuration(20*time.Millisecond))
516520
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-
}
523521
str, err := sess.OpenUniStreamSync(ctx)
524522
if err != nil {
523+
Expect(err).To(MatchError(context.DeadlineExceeded))
525524
atomic.AddInt32(&numCanceled, 1)
526-
Expect(err).To(MatchError("context canceled"))
525+
msg <- struct{}{}
527526
continue
528527
}
529528
numOpened++
@@ -539,30 +538,32 @@ var _ = Describe("Stream Cancelations", func() {
539538
sess, err := quic.DialAddr(
540539
fmt.Sprintf("localhost:%d", server.Addr().(*net.UDPAddr).Port),
541540
getTLSClientConfig(),
542-
getQuicConfig(&quic.Config{MaxIncomingUniStreams: 5}),
541+
getQuicConfig(&quic.Config{MaxIncomingUniStreams: maxIncomingStreams}),
543542
)
544543
Expect(err).ToNot(HaveOccurred())
545544

546545
var wg sync.WaitGroup
547546
wg.Add(numStreams)
548-
ticker := time.NewTicker(10 * time.Millisecond)
549547
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) {
552552
defer GinkgoRecover()
553-
str, err := sess.AcceptUniStream(context.Background())
554-
Expect(err).ToNot(HaveOccurred())
555553
data, err := ioutil.ReadAll(str)
556554
Expect(err).ToNot(HaveOccurred())
557555
Expect(data).To(Equal(PRData))
558556
wg.Done()
559-
}()
557+
}(str)
560558
}
561559
wg.Wait()
562560

563561
count := atomic.LoadInt32(&numCanceled)
564562
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+
))
566567
Expect(sess.CloseWithError(0, "")).To(Succeed())
567568
Expect(server.Close()).To(Succeed())
568569
})

0 commit comments

Comments
 (0)