From de97dfa28bf122c3012ae7c1571cc6cfff0ee5e9 Mon Sep 17 00:00:00 2001 From: Josh Humphries Date: Mon, 25 Mar 2019 10:01:30 -0400 Subject: [PATCH] flaky test now sees different error message --- tls_settings_test.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/tls_settings_test.go b/tls_settings_test.go index e520c27..84fb954 100644 --- a/tls_settings_test.go +++ b/tls_settings_test.go @@ -111,17 +111,19 @@ func TestBrokenTLS_ClientPlainText(t *testing.T) { // client connection (usually) succeeds since client is not waiting for TLS handshake e, err := createTestServerAndClient(serverCreds, nil) if err != nil { - if strings.Contains(err.Error(), "deadline exceeded") { - // It is possible that connection never becomes healthy: + if strings.Contains(err.Error(), "deadline exceeded") || + strings.Contains(err.Error(), "use of closed network connection") { + // It is possible that the connection never becomes healthy: // 1) grpc connects successfully // 2) grpc client tries to send HTTP/2 preface and settings frame // 3) server, expecting handshake, closes the connection // 4) in the client, the write fails, so the connection never // becomes ready - // More often than not, the connection becomes ready (presumably - // the write to the socket succeeds before the server closes the - // connection). But when it does not, it is possible to observe - // timeouts when setting up the connection. + // The client will attempt to reconnect on transient errors, so + // may eventually bump into the connect time limit. This used to + // result in a "deadline exceeded" error, but more recent versions + // of the grpc library report any underlying I/O error instead, so + // we also check for "use of closed network connection". return } t.Fatalf("failed to setup server and client: %v", err)