This is an automated email from the ASF dual-hosted git repository.

bonampak pushed a commit to branch feature/jakarta-jetty-upgrade
in repository https://gitbox.apache.org/repos/asf/knox.git

commit 5a3067554237ea6b5691db118d74124916f668c6
Author: bonampak <[email protected]>
AuthorDate: Mon Apr 27 14:40:20 2026 +0200

    KNOX-3238: fix some websocket tests.
---
 .../websockets/GatewayWebsocketHandler.java        |  2 --
 .../gateway/websockets/KnoxWebSocketCreator.java   | 21 +++++++++++++++++++--
 .../knox/gateway/websockets/BadBackendTest.java    |  1 +
 .../apache/knox/gateway/websockets/BadUrlTest.java | 16 +++++++---------
 .../gateway/websockets/MessageFailureTest.java     |  3 +++
 .../gateway/websockets/ProxyInboundClientTest.java |  9 +++++----
 .../gateway/websockets/WebsocketEchoTestBase.java  | 17 ++++++++---------
 .../WebsocketMultipleConnectionTest.java           | 22 +++++++++++-----------
 8 files changed, 54 insertions(+), 37 deletions(-)

diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/websockets/GatewayWebsocketHandler.java
 
b/gateway-server/src/main/java/org/apache/knox/gateway/websockets/GatewayWebsocketHandler.java
index 5ac866c84..14e983a52 100644
--- 
a/gateway-server/src/main/java/org/apache/knox/gateway/websockets/GatewayWebsocketHandler.java
+++ 
b/gateway-server/src/main/java/org/apache/knox/gateway/websockets/GatewayWebsocketHandler.java
@@ -48,8 +48,6 @@ public class GatewayWebsocketHandler extends Handler.Wrapper {
     super();
     this.config = config;
     this.services = services;
-    // Set the internal handler as the one we are wrapping
-    setHandler(wsHandler);
   }
 
   @Override
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/websockets/KnoxWebSocketCreator.java
 
b/gateway-server/src/main/java/org/apache/knox/gateway/websockets/KnoxWebSocketCreator.java
index 51af8778c..d7e65f658 100644
--- 
a/gateway-server/src/main/java/org/apache/knox/gateway/websockets/KnoxWebSocketCreator.java
+++ 
b/gateway-server/src/main/java/org/apache/knox/gateway/websockets/KnoxWebSocketCreator.java
@@ -42,10 +42,13 @@ import java.net.URISyntaxException;
 import java.net.URL;
 import java.security.KeyStore;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -65,6 +68,17 @@ public class KnoxWebSocketCreator implements 
WebSocketCreator {
     static final String REGEX_WEBSHELL_REQUEST_PATH =
     "^(" + SECURE_WEBSOCKET_PROTOCOL_STRING+"|"+WEBSOCKET_PROTOCOL_STRING + 
")[^/]+/[^/]+/webshell$";
 
+    private static final Set<String> IGNORED_HEADERS = new 
HashSet<>(Arrays.asList(
+    "sec-websocket-key",
+    "sec-websocket-version",
+    "sec-websocket-extensions",
+    "sec-websocket-accept",
+    "sec-websocket-protocol",
+    "upgrade",
+    "connection",
+    "host" // The Jetty client will automatically set the correct Host for the 
backend
+    ));
+
     private static final int POOL_SIZE = 10;
     private final AtomicInteger concurrentWebshells;
 
@@ -153,8 +167,11 @@ public class KnoxWebSocketCreator implements 
WebSocketCreator {
 
                 // 1. Safely iterate over Jetty 12 HttpFields and copy them to 
the Jakarta map
                 for (HttpField field : req.getHeaders()) {
-                    headers.computeIfAbsent(field.getName(), k -> new 
ArrayList<>())
-                    .add(field.getValue());
+                    String headerName = field.getName();
+                    if 
(!IGNORED_HEADERS.contains(headerName.toLowerCase(Locale.ROOT))) {
+                        headers.computeIfAbsent(headerName, k -> new 
ArrayList<>())
+                        .add(field.getValue());
+                    }
                 }
 
                 // 2. Properly construct and override the Host header
diff --git 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/BadBackendTest.java
 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/BadBackendTest.java
index 33784b5b1..a0b040f15 100644
--- 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/BadBackendTest.java
+++ 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/BadBackendTest.java
@@ -77,6 +77,7 @@ public class BadBackendTest {
 
   private static void startProxy() throws Exception {
     GatewayConfig gatewayConfig = EasyMock.createNiceMock(GatewayConfig.class);
+    EasyMock.replay(gatewayConfig);
     proxy = new Server();
     proxyConnector = new ServerConnector(proxy);
     proxy.addConnector(proxyConnector);
diff --git 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/BadUrlTest.java
 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/BadUrlTest.java
index 5582508e8..7aaff4618 100644
--- 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/BadUrlTest.java
+++ 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/BadUrlTest.java
@@ -149,6 +149,7 @@ public class BadUrlTest {
   }
 
   private static void startGatewayServer() throws Exception {
+    setupGatewayConfig(BACKEND);
     gatewayServer = new Server();
     final ServerConnector connector = new ServerConnector(gatewayServer);
     gatewayServer.addConnector(connector);
@@ -161,7 +162,12 @@ public class BadUrlTest {
     context.setContextPath("/");
     handlers.addHandler(context);
 
-    gatewayServer.setHandler(handlers);
+    /* Setup websocket handler */
+    final GatewayWebsocketHandler gatewayWebsocketHandler = new 
GatewayWebsocketHandler(
+    gatewayConfig, services);
+    gatewayWebsocketHandler.setHandler(handlers);
+
+    gatewayServer.setHandler(gatewayWebsocketHandler);
 
     // Start Server
     gatewayServer.start();
@@ -172,14 +178,6 @@ public class BadUrlTest {
     }
     int port = connector.getLocalPort();
     serverUri = new URI(String.format(Locale.ROOT, "ws://%s:%d/", host, port));
-
-    /* Setup websocket handler */
-    setupGatewayConfig(BACKEND);
-
-    final GatewayWebsocketHandler gatewayWebsocketHandler = new 
GatewayWebsocketHandler(
-        gatewayConfig, services);
-    handlers.addHandler(gatewayWebsocketHandler);
-    gatewayWebsocketHandler.start();
   }
 
   /*
diff --git 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/MessageFailureTest.java
 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/MessageFailureTest.java
index b31201ab5..b2f6eb3d3 100644
--- 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/MessageFailureTest.java
+++ 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/MessageFailureTest.java
@@ -92,6 +92,7 @@ public class MessageFailureTest {
    */
   @Test(timeout = 8000)
   public void testMessageBiggerThanDefault() throws Exception {
+    //Note: default is WebSocketConstants.DEFAULT_MAX_TEXT_MESSAGE_SIZE = 65536
     final String bigMessage = RandomStringUtils.randomAscii(66000);
 
     WebSocketContainer container = ContainerProvider.getWebSocketContainer();
@@ -151,6 +152,8 @@ public class MessageFailureTest {
 
   private static void startProxy() throws Exception {
     GatewayConfig gatewayConfig = EasyMock.createNiceMock(GatewayConfig.class);
+    EasyMock.replay(gatewayConfig);
+
     proxy = new Server();
     proxyConnector = new ServerConnector(proxy);
     proxy.addConnector(proxyConnector);
diff --git 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/ProxyInboundClientTest.java
 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/ProxyInboundClientTest.java
index d10e4c42b..eabae2432 100644
--- 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/ProxyInboundClientTest.java
+++ 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/ProxyInboundClientTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.knox.gateway.websockets;
 
+import jakarta.websocket.ClientEndpointConfig;
 import org.eclipse.jetty.server.Handler;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.ServerConnector;
@@ -131,8 +132,8 @@ public class ProxyInboundClientTest {
     });
 
     Assert.assertThat(client, instanceOf(jakarta.websocket.Endpoint.class));
-
-    Session session = container.connectToServer(client, serverUri);
+    ClientEndpointConfig clientConfig = 
ClientEndpointConfig.Builder.create().build();
+    Session session = container.connectToServer(client, clientConfig, 
serverUri);
 
     session.getBasicRemote().sendText(textMessage);
 
@@ -188,8 +189,8 @@ public class ProxyInboundClientTest {
     });
 
     Assert.assertThat(client, instanceOf(jakarta.websocket.Endpoint.class));
-
-    Session session = container.connectToServer(client, serverUri);
+    ClientEndpointConfig clientConfig = 
ClientEndpointConfig.Builder.create().build();
+    Session session = container.connectToServer(client, clientConfig, 
serverUri);
 
     session.getBasicRemote().sendBinary(binarymessage);
 
diff --git 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketEchoTestBase.java
 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketEchoTestBase.java
index 9f857e0c6..6798bf135 100644
--- 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketEchoTestBase.java
+++ 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketEchoTestBase.java
@@ -184,6 +184,8 @@ public class WebsocketEchoTestBase {
     final ServerConnector connector = new ServerConnector(gatewayServer);
     gatewayServer.addConnector(connector);
 
+    setupGatewayConfig(backendServerUri.toString());
+
     /* workaround so we can add our handler later at runtime */
     ContextHandlerCollection handlers = new ContextHandlerCollection(true);
 
@@ -192,7 +194,12 @@ public class WebsocketEchoTestBase {
     context.setContextPath("/");
     handlers.addHandler(context);
 
-    gatewayServer.setHandler(handlers);
+    /* Setup websocket handler */
+    final GatewayWebsocketHandler gatewayWebsocketHandler = new 
GatewayWebsocketHandler(
+    gatewayConfig, services);
+    gatewayWebsocketHandler.setHandler(handlers);
+
+    gatewayServer.setHandler(gatewayWebsocketHandler);
 
     // Start Server
     gatewayServer.start();
@@ -203,14 +210,6 @@ public class WebsocketEchoTestBase {
     }
     int port = connector.getLocalPort();
     serverUri = new URI(String.format(Locale.ROOT, "ws://%s:%d/", host, port));
-
-    /* Setup websocket handler */
-    setupGatewayConfig(backendServerUri.toString());
-
-    final GatewayWebsocketHandler gatewayWebsocketHandler = new 
GatewayWebsocketHandler(
-        gatewayConfig, services);
-    handlers.addHandler(gatewayWebsocketHandler);
-    gatewayWebsocketHandler.start();
   }
 
   /**
diff --git 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketMultipleConnectionTest.java
 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketMultipleConnectionTest.java
index d104b8bb4..4d7bce00e 100644
--- 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketMultipleConnectionTest.java
+++ 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketMultipleConnectionTest.java
@@ -26,6 +26,7 @@ import static 
org.apache.knox.gateway.config.GatewayConfig.DEFAULT_IDENTITY_KEY_
 
 import com.mycila.xmltool.XMLDoc;
 import com.mycila.xmltool.XMLTag;
+import jakarta.websocket.ClientEndpointConfig;
 import org.apache.commons.io.FileUtils;
 import org.apache.knox.gateway.GatewayServer;
 import org.apache.knox.gateway.config.GatewayConfig;
@@ -164,7 +165,7 @@ public class WebsocketMultipleConnectionTest {
         public void onMessage(String message) {
           latch.countDown();
         }
-      }, new URI(serverUri.toString() + "gateway/websocket/ws"));
+      }, ClientEndpointConfig.Builder.create().build(), new 
URI(serverUri.toString() + "gateway/websocket/ws"));
     }
 
     for (int i = 0; i < MAX_CONNECTIONS; i++) {
@@ -197,8 +198,8 @@ public class WebsocketMultipleConnectionTest {
 
     ContextHandler context = new ContextHandler();
     context.setContextPath("/");
-    context.setHandler(handler);
-    backendServer.setHandler(context);
+    handler.setHandler(context);
+    backendServer.setHandler(handler);
 
     // Start Server
     backendServer.start();
@@ -212,6 +213,7 @@ public class WebsocketMultipleConnectionTest {
   }
 
   private static void startGatewayServer() throws Exception {
+    setupGatewayConfig(backendServerUri.toString());
     /* use default Max threads */
     gatewayServer = new Server(new QueuedThreadPool(254));
     final ServerConnector connector = new ServerConnector(gatewayServer);
@@ -225,7 +227,12 @@ public class WebsocketMultipleConnectionTest {
     context.setContextPath("/");
     handlers.addHandler(context);
 
-    gatewayServer.setHandler(handlers);
+    /* Setup websocket handler */
+    final GatewayWebsocketHandler gatewayWebsocketHandler = new 
GatewayWebsocketHandler(
+    gatewayConfig, services);
+    gatewayWebsocketHandler.setHandler(handlers);
+
+    gatewayServer.setHandler(gatewayWebsocketHandler);
 
     // Start Server
     gatewayServer.start();
@@ -237,13 +244,6 @@ public class WebsocketMultipleConnectionTest {
     int port = connector.getLocalPort();
     serverUri = new URI(String.format(Locale.ROOT, "ws://%s:%d/", host, port));
 
-    /* Setup websocket handler */
-    setupGatewayConfig(backendServerUri.toString());
-
-    final GatewayWebsocketHandler gatewayWebsocketHandler = new 
GatewayWebsocketHandler(
-        gatewayConfig, services);
-    handlers.addHandler(gatewayWebsocketHandler);
-    gatewayWebsocketHandler.start();
   }
 
   /**

Reply via email to