diff --git a/handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java b/handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java index 5b55709ea6..ea1bbe2429 100644 --- a/handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java +++ b/handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java @@ -1493,6 +1493,9 @@ public abstract class SSLEngineTest { boolean clientHandshakeFinished = false; boolean serverHandshakeFinished = false; + boolean cTOsHasRemaining; + boolean sTOcHasRemaining; + do { int cTOsPos = cTOs.position(); int sTOcPos = sTOc.position(); @@ -1557,9 +1560,16 @@ public abstract class SSLEngineTest { assertFalse(cTOs.hasRemaining()); } + cTOsHasRemaining = cTOs.hasRemaining(); + sTOcHasRemaining = sTOc.hasRemaining(); + sTOc.compact(); cTOs.compact(); - } while (!clientHandshakeFinished || !serverHandshakeFinished); + } while (!clientHandshakeFinished || !serverHandshakeFinished || + // We need to ensure we feed all the data to the engine to not end up with a corrupted state. + // This is especially important with TLS1.3 which may produce sessions after the "main handshake" is + // done + cTOsHasRemaining || sTOcHasRemaining); } private static boolean isHandshakeFinished(SSLEngineResult result) {