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]

Reply via email to