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();