Skip to content

Commit 4c079b9

Browse files
Merge pull request #2978 from lucas-clemente/fix-openstreamsync-cancelation-test
make the OpenStreamSync cancelation test less flaky
2 parents 6a7f1de + b022d04 commit 4c079b9

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,33 @@ 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{}, 1)
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+
select {
526+
case msg <- struct{}{}:
527+
default:
528+
}
527529
continue
528530
}
529531
numOpened++
@@ -539,30 +541,29 @@ var _ = Describe("Stream Cancelations", func() {
539541
sess, err := quic.DialAddr(
540542
fmt.Sprintf("localhost:%d", server.Addr().(*net.UDPAddr).Port),
541543
getTLSClientConfig(),
542-
getQuicConfig(&quic.Config{MaxIncomingUniStreams: 5}),
544+
getQuicConfig(&quic.Config{MaxIncomingUniStreams: maxIncomingStreams}),
543545
)
544546
Expect(err).ToNot(HaveOccurred())
545547

546548
var wg sync.WaitGroup
547549
wg.Add(numStreams)
548-
ticker := time.NewTicker(10 * time.Millisecond)
549550
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) {
552555
defer GinkgoRecover()
553-
str, err := sess.AcceptUniStream(context.Background())
554-
Expect(err).ToNot(HaveOccurred())
555556
data, err := ioutil.ReadAll(str)
556557
Expect(err).ToNot(HaveOccurred())
557558
Expect(data).To(Equal(PRData))
558559
wg.Done()
559-
}()
560+
}(str)
560561
}
561562
wg.Wait()
562563

563564
count := atomic.LoadInt32(&numCanceled)
564565
fmt.Fprintf(GinkgoWriter, "Canceled OpenStreamSync %d times\n", count)
565-
Expect(count).To(BeNumerically(">", numStreams/5))
566+
Expect(count).To(BeNumerically(">=", numStreams-maxIncomingStreams))
566567
Expect(sess.CloseWithError(0, "")).To(Succeed())
567568
Expect(server.Close()).To(Succeed())
568569
})

0 commit comments

Comments
 (0)