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é <[email protected]>
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();