From e3e6f6b04342a4134f206a856ff27f52d19991b1 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Fri, 8 Mar 2019 18:37:13 +0900 Subject: [PATCH] fix flaky handshake integration test --- integrationtests/self/handshake_test.go | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/integrationtests/self/handshake_test.go b/integrationtests/self/handshake_test.go index 73767c9dc..216caf4aa 100644 --- a/integrationtests/self/handshake_test.go +++ b/integrationtests/self/handshake_test.go @@ -148,15 +148,19 @@ var _ = Describe("Handshake tests", func() { tlsConf, clientConfig, ) - Expect(err).ToNot(HaveOccurred()) - // The error will occur after the client already finished the handshake. - errChan := make(chan error) - go func() { - defer GinkgoRecover() - _, err := sess.AcceptStream() - errChan <- err - }() - Eventually(errChan).Should(Receive(MatchError("CRYPTO_ERROR: tls: bad certificate"))) + // Usually, the error will occur after the client already finished the handshake. + // However, there's a race condition here. The server's CONNECTION_CLOSE might be + // received before the session is returned, so we might already get the error while dialing. + if err == nil { + errChan := make(chan error) + go func() { + defer GinkgoRecover() + _, err := sess.AcceptStream() + errChan <- err + }() + Eventually(errChan).Should(Receive(&err)) + } + Expect(err).To(MatchError("CRYPTO_ERROR: tls: bad certificate")) }) It("uses the ServerName in the tls.Config", func() {