Author: markt
Date: Sat Sep 19 07:36:27 2015
New Revision: 1703948

URL: http://svn.apache.org/viewvc?rev=1703948&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=58414
Don't try and compress zero length messages
Expand the unit test to cover this case

Modified:
    tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java
    tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java?rev=1703948&r1=1703947&r2=1703948&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java Sat 
Sep 19 07:36:27 2015
@@ -321,6 +321,10 @@ public class PerMessageDeflate implement
                 // Control messages can appear in the middle of other messages
                 // and must not be compressed. Pass it straight through
                 allCompressedParts.add(uncompressedPart);
+            } else if (uncompressedPart.getPayload().limit() == 0) {
+                // Zero length messages can't be compressed so pass them
+                // straight through.
+                allCompressedParts.add(uncompressedPart);
             } else {
                 List<MessagePart> compressedParts = new ArrayList<>();
                 ByteBuffer uncompressedPayload = uncompressedPart.getPayload();

Modified: 
tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java?rev=1703948&r1=1703947&r2=1703948&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java 
(original)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java 
Sat Sep 19 07:36:27 2015
@@ -939,17 +939,29 @@ public class TestWsWebSocketContainer ex
 
     @Test
     public void testPerMessageDefalteClient01() throws Exception {
-        doTestPerMessageDefalteClient01(MESSAGE_STRING_1);
+        doTestPerMessageDefalteClient(MESSAGE_STRING_1, 1);
     }
 
 
     @Test
     public void testPerMessageDefalteClient02() throws Exception {
-        doTestPerMessageDefalteClient01(MESSAGE_EMPTY);
+        doTestPerMessageDefalteClient(MESSAGE_EMPTY, 1);
     }
 
 
-    private void doTestPerMessageDefalteClient01(String msg) throws Exception {
+    @Test
+    public void testPerMessageDefalteClient03() throws Exception {
+        doTestPerMessageDefalteClient(MESSAGE_STRING_1, 2);
+    }
+
+
+    @Test
+    public void testPerMessageDefalteClient04() throws Exception {
+        doTestPerMessageDefalteClient(MESSAGE_EMPTY, 2);
+    }
+
+
+    private void doTestPerMessageDefalteClient(String msg, int count) throws 
Exception {
         Tomcat tomcat = getTomcatInstance();
         // No file system docBase required
         Context ctx = tomcat.addContext("", null);
@@ -973,19 +985,17 @@ public class TestWsWebSocketContainer ex
                 clientConfig,
                 new URI("ws://localhost:" + getPort() +
                         TesterEchoServer.Config.PATH_ASYNC));
-        CountDownLatch latch = new CountDownLatch(1);
-        BasicText handler = new BasicText(latch);
+        CountDownLatch latch = new CountDownLatch(count);
+        BasicText handler = new BasicText(latch, msg);
         wsSession.addMessageHandler(handler);
-        wsSession.getBasicRemote().sendText(msg);
+        for (int i = 0; i < count; i++) {
+            wsSession.getBasicRemote().sendText(msg);
+        }
 
         boolean latchResult = handler.getLatch().await(10, TimeUnit.SECONDS);
 
         Assert.assertTrue(latchResult);
 
-        Queue<String> messages = handler.getMessages();
-        Assert.assertEquals(1, messages.size());
-        Assert.assertEquals(msg, messages.peek());
-
         ((WsWebSocketContainer) wsContainer).destroy();
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to