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

Reply via email to