This is an automated email from the ASF dual-hosted git repository.
smolnar 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 213cd32da KNOX-3151: Refactored the test websocketclient awaitClose
method (#1046)
213cd32da is described below
commit 213cd32da1c209db3a13d7629f34007d4b75a278
Author: hanicz <[email protected]>
AuthorDate: Mon May 19 14:44:00 2025 +0200
KNOX-3151: Refactored the test websocketclient awaitClose method (#1046)
Fixed related tests, fixed an issue caused by a race condition that
resulted in intermittent MessageFailureTest.testMessageTooBig test failures
---
.../gateway/websockets/ProxyWebSocketAdapter.java | 4 ++--
.../knox/gateway/websockets/BadBackendTest.java | 10 +++------
.../apache/knox/gateway/websockets/BadUrlTest.java | 9 ++------
.../gateway/websockets/MessageFailureTest.java | 12 ++++-------
.../knox/gateway/websockets/WebsocketClient.java | 25 +++++-----------------
5 files changed, 16 insertions(+), 44 deletions(-)
diff --git
a/gateway-server/src/main/java/org/apache/knox/gateway/websockets/ProxyWebSocketAdapter.java
b/gateway-server/src/main/java/org/apache/knox/gateway/websockets/ProxyWebSocketAdapter.java
index a3beab610..37c94a6ac 100644
---
a/gateway-server/src/main/java/org/apache/knox/gateway/websockets/ProxyWebSocketAdapter.java
+++
b/gateway-server/src/main/java/org/apache/knox/gateway/websockets/ProxyWebSocketAdapter.java
@@ -206,13 +206,13 @@ public class ProxyWebSocketAdapter extends
WebSocketAdapter {
LOG.onError(t.toString());
if (t.toString().contains("exceeds maximum size")) {
- if(frontendSession != null && !frontendSession.isOpen()) {
+ if(frontendSession != null && frontendSession.isOpen()) {
frontendSession.close(StatusCode.MESSAGE_TOO_LARGE, t.getMessage());
}
}
else {
- if(frontendSession != null && !frontendSession.isOpen()) {
+ if(frontendSession != null && frontendSession.isOpen()) {
frontendSession.close(StatusCode.SERVER_ERROR, t.getMessage());
}
cleanup();
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 0874f526a..4366ae732 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
@@ -21,7 +21,6 @@ import org.apache.knox.gateway.config.GatewayConfig;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.ContextHandler;
-import org.hamcrest.CoreMatchers;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
@@ -31,7 +30,6 @@ import org.easymock.EasyMock;
import javax.websocket.CloseReason;
import javax.websocket.ContainerProvider;
import javax.websocket.WebSocketContainer;
-import java.io.IOException;
import java.net.URI;
import java.util.Locale;
import java.util.concurrent.Executors;
@@ -62,7 +60,7 @@ public class BadBackendTest {
* Test for a message within limit.
*/
@Test(timeout = 8000)
- public void testBadBackEnd() throws IOException, Exception {
+ public void testBadBackEnd() throws Exception {
final String message = "Echo";
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
@@ -72,10 +70,8 @@ public class BadBackendTest {
proxyUri);
session.getBasicRemote().sendText(message);
- client.awaitClose(CloseReason.CloseCodes.UNEXPECTED_CONDITION.getCode(),
5000,
- TimeUnit.MILLISECONDS);
-
- Assert.assertThat(client.close.getCloseCode().getCode(),
CoreMatchers.is(CloseReason.CloseCodes.UNEXPECTED_CONDITION.getCode()));
+
Assert.assertTrue(client.awaitExpectedClose(CloseReason.CloseCodes.UNEXPECTED_CONDITION.getCode(),
5000L,
+ TimeUnit.MILLISECONDS));
}
private static void startProxy() throws Exception {
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 fdc71aa59..09402a0ea 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
@@ -44,7 +44,6 @@ import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.HandlerCollection;
-import org.hamcrest.CoreMatchers;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
@@ -145,12 +144,8 @@ public class BadUrlTest {
container.connectToServer(client,
new URI(serverUri.toString() + "gateway/websocket/ws"));
- client.awaitClose(CloseReason.CloseCodes.UNEXPECTED_CONDITION.getCode(),
- 5000, TimeUnit.MILLISECONDS);
-
- Assert.assertThat(client.close.getCloseCode().getCode(),
-
CoreMatchers.is(CloseReason.CloseCodes.UNEXPECTED_CONDITION.getCode()));
-
+
Assert.assertTrue(client.awaitExpectedClose(CloseReason.CloseCodes.UNEXPECTED_CONDITION.getCode(),
5000L,
+ TimeUnit.MILLISECONDS));
}
private static void startGatewayServer() throws Exception {
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 e855f8279..3bde19e6e 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
@@ -81,10 +81,8 @@ public class MessageFailureTest {
proxyUri);
session.getBasicRemote().sendText(bigMessage);
- client.awaitClose(CloseReason.CloseCodes.TOO_BIG.getCode(), 1000,
- TimeUnit.MILLISECONDS);
-
- Assert.assertThat(client.close.getCloseCode().getCode(),
CoreMatchers.is(CloseReason.CloseCodes.TOO_BIG.getCode()));
+
Assert.assertTrue(client.awaitExpectedClose(CloseReason.CloseCodes.TOO_BIG.getCode(),
1000L,
+ TimeUnit.MILLISECONDS));
}
/**
@@ -102,10 +100,8 @@ public class MessageFailureTest {
proxyUri);
session.getBasicRemote().sendText(bigMessage);
- client.awaitClose(CloseReason.CloseCodes.TOO_BIG.getCode(), 1000,
- TimeUnit.MILLISECONDS);
-
- Assert.assertThat(client.close.getCloseCode().getCode(),
CoreMatchers.is(CloseReason.CloseCodes.TOO_BIG.getCode()));
+
Assert.assertTrue(client.awaitExpectedClose(CloseReason.CloseCodes.TOO_BIG.getCode(),
1000L,
+ TimeUnit.MILLISECONDS));
}
diff --git
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketClient.java
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketClient.java
index 364f2c414..287331543 100644
---
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketClient.java
+++
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketClient.java
@@ -95,27 +95,12 @@ public class WebsocketClient {
* @param expectedCloseCode code to expect on close
* @param timeoutDuration duration to wait
* @param timeoutUnit duration unit
- * @throws TimeoutException if waiting too long to close
+ * @throws InterruptedException if waiting is interrupted
*/
- public void awaitClose(int expectedCloseCode, int timeoutDuration, TimeUnit
timeoutUnit)
- throws TimeoutException {
-
- long msDur = TimeUnit.MILLISECONDS.convert(timeoutDuration, timeoutUnit);
- long now = System.currentTimeMillis();
- long expireOn = now + msDur;
-
- while (close == null) {
- try {
- TimeUnit.MILLISECONDS.sleep(10);
- } catch (InterruptedException ignore) {
- /* ignore */
- }
- if ((System.currentTimeMillis() > expireOn)) {
- throw new TimeoutException("Timed out reading message from queue");
- }
-
- }
-
+ public boolean awaitExpectedClose(int expectedCloseCode, long
timeoutDuration, TimeUnit timeoutUnit)
+ throws InterruptedException {
+ return closeLatch.await(timeoutDuration, timeoutUnit) &&
+ (close != null && close.getCloseCode().getCode() ==
expectedCloseCode);
}
public class MessageQueue extends BlockingArrayQueue<String> {