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 2019/03/19 15:30:07 UTC
[knox] branch master updated: KNOX-1828 Fix Websocket Message Size
(#75)
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 b3963eb KNOX-1828 Fix Websocket Message Size (#75)
b3963eb is described below
commit b3963eb33a3bc664214a16c2c16f04de8d777078
Author: Shawn Weeks <sw...@weeksconsulting.us>
AuthorDate: Tue Mar 19 10:29:59 2019 -0500
KNOX-1828 Fix Websocket Message Size (#75)
Resolves issue with Zeppelin and websocket messages being capped at 65,536 bytes.
---
.../gateway/websockets/ProxyInboundClient.java | 4 --
.../gateway/websockets/ProxyWebSocketAdapter.java | 4 ++
.../gateway/websockets/BigEchoSocketHandler.java | 4 +-
.../gateway/websockets/MessageFailureTest.java | 25 ++++++++++-
.../gateway/websockets/ProxyInboundClientTest.java | 50 ----------------------
5 files changed, 30 insertions(+), 57 deletions(-)
diff --git a/gateway-server/src/main/java/org/apache/knox/gateway/websockets/ProxyInboundClient.java b/gateway-server/src/main/java/org/apache/knox/gateway/websockets/ProxyInboundClient.java
index 8cd4023..7cb1c00 100644
--- a/gateway-server/src/main/java/org/apache/knox/gateway/websockets/ProxyInboundClient.java
+++ b/gateway-server/src/main/java/org/apache/knox/gateway/websockets/ProxyInboundClient.java
@@ -55,10 +55,6 @@ public class ProxyInboundClient extends Endpoint {
this.session = backendSession;
this.config = config;
- /* Set the max message size */
- session.setMaxBinaryMessageBufferSize(Integer.MAX_VALUE);
- session.setMaxTextMessageBufferSize(Integer.MAX_VALUE);
-
/* Add message handler for binary data */
session.addMessageHandler(new MessageHandler.Whole<byte[]>() {
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 82a711f..4c345cb 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
@@ -81,6 +81,10 @@ public class ProxyWebSocketAdapter extends WebSocketAdapter {
* plumbing takes place
*/
container = ContainerProvider.getWebSocketContainer();
+ container.setDefaultMaxTextMessageBufferSize(frontEndSession.getPolicy().getMaxTextMessageBufferSize());
+ container.setDefaultMaxBinaryMessageBufferSize(frontEndSession.getPolicy().getMaxBinaryMessageBufferSize());
+ container.setAsyncSendTimeout(frontEndSession.getPolicy().getAsyncWriteTimeout());
+ container.setDefaultMaxSessionIdleTimeout(frontEndSession.getPolicy().getIdleTimeout());
final ProxyInboundClient backendSocket = new ProxyInboundClient(getMessageCallback());
diff --git a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/BigEchoSocketHandler.java b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/BigEchoSocketHandler.java
index 080a5a1..58ecec0 100644
--- a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/BigEchoSocketHandler.java
+++ b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/BigEchoSocketHandler.java
@@ -36,8 +36,8 @@ class BigEchoSocketHandler extends WebSocketHandler implements WebSocketCreator
@Override
public void configure(WebSocketServletFactory factory) {
- factory.getPolicy().setMaxTextMessageSize(10);
- factory.getPolicy().setMaxBinaryMessageSize(10);
+ factory.getPolicy().setMaxTextMessageSize(66000);
+ factory.getPolicy().setMaxTextMessageBufferSize(66000);
factory.setCreator(this);
}
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 a265f65..bccd359 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
@@ -17,6 +17,7 @@
*/
package org.apache.knox.gateway.websockets;
+import org.apache.commons.lang.RandomStringUtils;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.ContextHandler;
@@ -69,7 +70,7 @@ public class MessageFailureTest {
*/
@Test(timeout = 8000)
public void testMessageTooBig() throws Exception {
- final String bigMessage = "Echooooooooooooo";
+ final String bigMessage = RandomStringUtils.randomAscii(66001);
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
@@ -84,6 +85,28 @@ public class MessageFailureTest {
Assert.assertThat(client.close.getCloseCode().getCode(), CoreMatchers.is(CloseReason.CloseCodes.TOO_BIG.getCode()));
}
+ /**
+ * Test for a message that bigger than Jetty default but smaller than limit
+ * @throws Exception
+ */
+ @Test(timeout = 8000)
+ public void testMessageBiggerThanDefault() throws Exception {
+ final String bigMessage = RandomStringUtils.randomAscii(66000);
+
+ WebSocketContainer container = ContainerProvider.getWebSocketContainer();
+
+ WebsocketClient client = new WebsocketClient();
+ javax.websocket.Session session = container.connectToServer(client,
+ 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()));
+
+ }
+
/*
* Test for a message within limit.
*/
diff --git a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/ProxyInboundClientTest.java b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/ProxyInboundClientTest.java
index e812c13..dd5001f 100644
--- a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/ProxyInboundClientTest.java
+++ b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/ProxyInboundClientTest.java
@@ -16,7 +16,6 @@
*/
package org.apache.knox.gateway.websockets;
-import org.apache.commons.lang.RandomStringUtils;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
@@ -192,53 +191,4 @@ public class ProxyInboundClientTest {
Assert.assertEquals("Binary message does not match", textMessage, new String(receivedBinaryMessage, StandardCharsets.UTF_8));
}
- @Test(timeout = 3000)
- public void testTextMaxBufferLimit() throws IOException, DeploymentException {
- final String longMessage = RandomStringUtils.random(100000);
-
- final AtomicBoolean isTestComplete = new AtomicBoolean(false);
-
- final WebSocketContainer container = ContainerProvider.getWebSocketContainer();
- final ProxyInboundClient client = new ProxyInboundClient( new MessageEventCallback() {
- @Override
- public void doCallback(String message) {
- }
-
- @Override
- public void onConnectionOpen(Object session) {
- }
-
- @Override
- public void onConnectionClose(CloseReason reason) {
- isTestComplete.set(true);
- }
-
- @Override
- public void onError(Throwable cause) {
- isTestComplete.set(true);
- }
-
- @Override
- public void onMessageText(String message, Object session) {
- receivedMessage = message;
- isTestComplete.set(true);
- }
-
- @Override
- public void onMessageBinary(byte[] message, boolean last, Object session) {
- }
- });
-
- Assert.assertThat(client, instanceOf(javax.websocket.Endpoint.class));
-
- Session session = container.connectToServer(client, serverUri);
-
- session.getBasicRemote().sendText(longMessage);
-
- while(!isTestComplete.get()) { // NOPMD
- /* just wait for the test to finish */
- }
-
- Assert.assertEquals(longMessage, receivedMessage);
- }
}