diff --git a/p2p/security/tls/transport_test.go b/p2p/security/tls/transport_test.go index a290ed6fdc..73b755b478 100644 --- a/p2p/security/tls/transport_test.go +++ b/p2p/security/tls/transport_test.go @@ -165,7 +165,13 @@ func TestHandshakeConnectionCancelations(t *testing.T) { go func() { ctx, cancel := context.WithCancel(context.Background()) cancel() - _, err := serverTransport.SecureInbound(ctx, &delayedConn{Conn: serverInsecureConn, delay: 5 * time.Millisecond}, "") + conn, err := serverTransport.SecureInbound(ctx, &delayedConn{Conn: serverInsecureConn, delay: 5 * time.Millisecond}, "") + // crypto/tls' context handling works by spinning up a separate Go routine that watches the context, + // and closes the underlying connection when that context is canceled. + // It is therefore not guaranteed (but very likely) that this happens _during_ the TLS handshake. + if err == nil { + _, err = conn.Read([]byte{0}) + } errChan <- err }() _, err = clientTransport.SecureOutbound(context.Background(), clientInsecureConn, serverID)