tls: fix flaky handshake cancellation test
@@ -188,7 +188,7 @@ func (c *delayedConn) Read(b []byte) (int, error) {
return c.Conn.Read(b)
}
-func TestHandshakeConnectionCancelations(t *testing.T) {
+func TestHandshakeConnectionCancellations(t *testing.T) {
_, clientKey := createPeer(t)
serverID, serverKey := createPeer(t)
@@ -202,7 +202,13 @@ func TestHandshakeConnectionCancelations(t *testing.T) {
errChan := make(chan error)
go func() {
- _, err := serverTransport.SecureInbound(context.Background(), serverInsecureConn, "")
+ conn, err := serverTransport.SecureInbound(context.Background(), serverInsecureConn, "")
+ // 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
}()
ctx, cancel := context.WithCancel(context.Background())
