You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@knox.apache.org by mo...@apache.org on 2023/02/07 11:45:14 UTC
[knox] branch master updated: KNOX-2872 - Make sure webshell WS connections work when used with LB (#728)
This is an automated email from the ASF dual-hosted git repository.
more pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git
The following commit(s) were added to refs/heads/master by this push:
new c55902826 KNOX-2872 - Make sure webshell WS connections work when used with LB (#728)
c55902826 is described below
commit c5590282608ab185808f5a45bba21c07500361e6
Author: Sandeep Moré <mo...@gmail.com>
AuthorDate: Tue Feb 7 06:45:08 2023 -0500
KNOX-2872 - Make sure webshell WS connections work when used with LB (#728)
---
.../websockets/GatewayWebsocketHandler.java | 2 +-
.../websockets/GatewayWebsocketHandlerTest.java | 27 ++++++++++++++++++++++
2 files changed, 28 insertions(+), 1 deletion(-)
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 f36f97f8d..f275ee9ee 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
@@ -69,7 +69,7 @@ public class GatewayWebsocketHandler extends WebSocketHandler
static final String REGEX_SPLIT_SERVICE_PATH = "^((?:[^/]*/){3}[^/]*)";
static final String REGEX_WEBSHELL_REQUEST_PATH =
- "^(" + SECURE_WEBSOCKET_PROTOCOL_STRING+"|"+WEBSOCKET_PROTOCOL_STRING + ")[^/]+:[0-9]+/[^/]+/webshell$";
+ "^(" + SECURE_WEBSOCKET_PROTOCOL_STRING+"|"+WEBSOCKET_PROTOCOL_STRING + ")[^/]+/[^/]+/webshell$";
private static final int POOL_SIZE = 10;
private final AtomicInteger concurrentWebshells;
diff --git a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/GatewayWebsocketHandlerTest.java b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/GatewayWebsocketHandlerTest.java
index 7cd3f6408..0edb07e0e 100644
--- a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/GatewayWebsocketHandlerTest.java
+++ b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/GatewayWebsocketHandlerTest.java
@@ -95,6 +95,33 @@ public class GatewayWebsocketHandlerTest {
Assert.assertTrue(gatewayWebsocketHandler.createWebSocket(req,resp) instanceof WebshellWebSocketAdapter);
}
+ @Test
+ public void testValidWebShellRequestThroughLB() throws Exception{
+ // mock GatewayConfig and GatewayServices
+ GatewayConfig gatewayConfig = EasyMock.createNiceMock(GatewayConfig.class);
+ EasyMock.expect(gatewayConfig.isWebShellEnabled()).andReturn(true).anyTimes();
+ EasyMock.expect(gatewayConfig.getMaximumConcurrentWebshells()).andReturn(3).anyTimes();
+ GatewayServices gatewayServices = EasyMock.createNiceMock(GatewayServices.class);
+ // mock ServletUpgradeRequest and ServletUpgradeResponse
+ ServletUpgradeRequest req = EasyMock.createNiceMock(ServletUpgradeRequest.class);
+ URI requestURI = new URI("wss://www.local.com/gateway/webshell");
+ EasyMock.expect(req.getRequestURI()).andReturn(requestURI).anyTimes();
+ ServletUpgradeResponse resp = EasyMock.createNiceMock(ServletUpgradeResponse.class);
+
+ JWTValidator jwtValidator = EasyMock.createNiceMock(JWTValidator.class);
+ EasyMock.expect(jwtValidator.validate()).andReturn(true).anyTimes();
+ PowerMock.mockStatic(JWTValidatorFactory.class);
+ EasyMock.expect(JWTValidatorFactory.create(req, gatewayServices, gatewayConfig)).andReturn(jwtValidator).anyTimes();
+
+ WebshellWebSocketAdapter webshellWebSocketAdapter = PowerMock.createMock(WebshellWebSocketAdapter.class);
+ PowerMock.expectNew(WebshellWebSocketAdapter.class,isA(ExecutorService.class) , isA(GatewayConfig.class), isA(JWTValidator.class), isA(AtomicInteger.class)).andReturn(webshellWebSocketAdapter);
+ EasyMock.replay(req,resp,gatewayServices,gatewayConfig,jwtValidator);
+ PowerMock.replayAll();
+
+ GatewayWebsocketHandler gatewayWebsocketHandler = new GatewayWebsocketHandler(gatewayConfig,gatewayServices);
+ Assert.assertTrue(gatewayWebsocketHandler.createWebSocket(req,resp) instanceof WebshellWebSocketAdapter);
+ }
+
@Rule
public ExpectedException thrown = ExpectedException.none();