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(); } /**
