This is an automated email from the ASF dual-hosted git repository. tabish pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/qpid-protonj2.git
commit 111459142486399a9a36e177e0304693ea0651b1 Author: Timothy Bish <[email protected]> AuthorDate: Thu Jul 10 14:09:42 2025 -0400 PROTON-2899 Updates ahead of move to Netty 4.2.x Account for some difference in netty 4.2.x that can cause the client to behave inconsistently between versions. --- .../client/transport/netty4/SslSupport.java | 24 ++++++++++++---------- .../client/transport/netty4/NettyServer.java | 12 ++++++++++- .../client/transport/netty4/SslSupportTest.java | 2 -- .../client/transport/netty4/TcpTransportTest.java | 5 ++++- 4 files changed, 28 insertions(+), 15 deletions(-) diff --git a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/SslSupport.java b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/SslSupport.java index 02f4e868..dba4d25f 100644 --- a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/SslSupport.java +++ b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/SslSupport.java @@ -188,12 +188,7 @@ public final class SslSupport { engine.setEnabledProtocols(buildEnabledProtocols(engine, options)); engine.setEnabledCipherSuites(buildEnabledCipherSuites(engine, options)); engine.setUseClientMode(true); - - if (options.verifyHost()) { - SSLParameters sslParameters = engine.getSSLParameters(); - sslParameters.setEndpointIdentificationAlgorithm("HTTPS"); - engine.setSSLParameters(sslParameters); - } + engine.setSSLParameters(createSSLParameters(engine, options)); return engine; } @@ -273,18 +268,25 @@ public final class SslSupport { engine.setEnabledProtocols(buildEnabledProtocols(engine, options)); engine.setEnabledCipherSuites(buildEnabledCipherSuites(engine, options)); engine.setUseClientMode(true); + engine.setSSLParameters(createSSLParameters(engine, options)); + + return engine; + } + + //----- Internal support methods -----------------------------------------// + + private static SSLParameters createSSLParameters(SSLEngine engine, SslOptions options) { + final SSLParameters sslParameters = engine.getSSLParameters(); if (options.verifyHost()) { - SSLParameters sslParameters = engine.getSSLParameters(); sslParameters.setEndpointIdentificationAlgorithm("HTTPS"); - engine.setSSLParameters(sslParameters); + } else { + sslParameters.setEndpointIdentificationAlgorithm(null); } - return engine; + return sslParameters; } - //----- Internal support methods -----------------------------------------// - private static String[] buildEnabledProtocols(SSLEngine engine, SslOptions options) { List<String> enabledProtocols = new ArrayList<String>(); diff --git a/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/NettyServer.java b/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/NettyServer.java index 5c6b0fe5..87fbaac3 100644 --- a/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/NettyServer.java +++ b/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/NettyServer.java @@ -25,6 +25,7 @@ import java.nio.charset.StandardCharsets; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLEngine; @@ -92,7 +93,7 @@ public abstract class NettyServer implements AutoCloseable { private volatile SslHandler sslHandler; private volatile HandshakeComplete handshakeComplete; private final CountDownLatch handshakeCompletion = new CountDownLatch(1); - + private final AtomicInteger totalConnections = new AtomicInteger(); private final AtomicBoolean started = new AtomicBoolean(); public NettyServer(TransportOptions options, SslOptions sslOptions) { @@ -248,6 +249,7 @@ public abstract class NettyServer implements AutoCloseable { LOG.info("Syncing channel close"); serverChannel.close().sync(); } catch (InterruptedException e) { + LOG.trace("Error on server channel close:", e); } // Shut down all event loops to terminate all threads. @@ -275,6 +277,10 @@ public abstract class NettyServer implements AutoCloseable { return serverPort; } + public int getTotalConnections() { + return totalConnections.get(); + } + private class NettyServerOutboundHandler extends ChannelOutboundHandlerAdapter { @Override @@ -326,9 +332,13 @@ public abstract class NettyServer implements AutoCloseable { LOG.info("Server -> SSL handshake completed. Succeeded: {}", future.isSuccess()); if (!future.isSuccess()) { ctx.close(); + } else { + totalConnections.incrementAndGet(); } } }); + } else { + totalConnections.incrementAndGet(); } } diff --git a/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/SslSupportTest.java b/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/SslSupportTest.java index 52dab6c7..33630e4e 100644 --- a/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/SslSupportTest.java +++ b/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/SslSupportTest.java @@ -791,7 +791,6 @@ public class SslSupportTest extends ImperativeClientTestCase { public void testCreateSslEngineWithVerifyHostOpenSSL() throws Exception { assumeTrue(OpenSsl.isAvailable()); assumeTrue(OpenSsl.supportsKeyManagerFactory()); - assumeTrue(OpenSsl.supportsHostnameValidation()); SslOptions options = createJksSslOptions(); options.verifyHost(true); @@ -823,7 +822,6 @@ public class SslSupportTest extends ImperativeClientTestCase { public void testCreateSslEngineWithoutVerifyHostOpenSSL() throws Exception { assumeTrue(OpenSsl.isAvailable()); assumeTrue(OpenSsl.supportsKeyManagerFactory()); - assumeTrue(OpenSsl.supportsHostnameValidation()); SslOptions options = createJksSslOptions(); options.verifyHost(false); diff --git a/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/TcpTransportTest.java b/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/TcpTransportTest.java index 229e553a..b7e2b669 100644 --- a/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/TcpTransportTest.java +++ b/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/transport/netty4/TcpTransportTest.java @@ -20,6 +20,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.fail; @@ -388,8 +389,10 @@ public class TcpTransportTest extends ImperativeClientTestCase { } assertTrue(transport.isConnected()); + assertSame(testListener, transport.getTransportListener()); + assertEquals(HOSTNAME, transport.getHost()); - server.close(); + assertTrue(Wait.waitFor(() -> server.getTotalConnections() == 1)); } final Transport connectedTransport = transport; --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
