Author: markt
Date: Tue Jul  5 16:45:38 2011
New Revision: 1143134

URL: http://svn.apache.org/viewvc?rev=1143134&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=51475
Handle messages larger than the buffer size. Expand test cases to cover this.
Based on a patch by Christian Stöber.

Modified:
    
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/GzipInterceptor.java
    
tomcat/trunk/test/org/apache/catalina/tribes/group/interceptors/TestGzipInterceptor.java

Modified: 
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/GzipInterceptor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/GzipInterceptor.java?rev=1143134&r1=1143133&r2=1143134&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/GzipInterceptor.java
 (original)
+++ 
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/GzipInterceptor.java
 Tue Jul  5 16:45:38 2011
@@ -77,18 +77,20 @@ public class GzipInterceptor extends Cha
     }
     
     /**
-     * TODO Fix to create an automatically growing buffer.
-     * @param data byte[]
-     * @return byte[]
+     * @param data  Data to decompress
+     * @return      Decompressed data
      * @throws IOException
      */
     public static byte[] decompress(byte[] data) throws IOException {
+        ByteArrayOutputStream bout = new ByteArrayOutputStream();
         ByteArrayInputStream bin = new ByteArrayInputStream(data);
         GZIPInputStream gin = new GZIPInputStream(bin);
         byte[] tmp = new byte[DEFAULT_BUFFER_SIZE];
-        int length = gin.read(tmp);
-        byte[] result = new byte[length];
-        System.arraycopy(tmp,0,result,0,length);
-        return result;
+        int length = 0;
+        while (length > -1) {
+            bout.write(tmp, 0, length);
+            length = gin.read(tmp);
+        }
+        return bout.toByteArray();
     }
 }

Modified: 
tomcat/trunk/test/org/apache/catalina/tribes/group/interceptors/TestGzipInterceptor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/tribes/group/interceptors/TestGzipInterceptor.java?rev=1143134&r1=1143133&r2=1143134&view=diff
==============================================================================
--- 
tomcat/trunk/test/org/apache/catalina/tribes/group/interceptors/TestGzipInterceptor.java
 (original)
+++ 
tomcat/trunk/test/org/apache/catalina/tribes/group/interceptors/TestGzipInterceptor.java
 Tue Jul  5 16:45:38 2011
@@ -22,9 +22,37 @@ import junit.framework.TestCase;
 
 public class TestGzipInterceptor extends TestCase {
 
-    public void testBasic() throws Exception {
-        byte[] data = new byte[1024];
-        Arrays.fill(data,(byte)1);
+    public void testSmallerThanBufferSize() throws Exception {
+        doCompressDecompress(GzipInterceptor.DEFAULT_BUFFER_SIZE / 2);
+    }
+
+    public void testJustSmallerThanBufferSize() throws Exception {
+        doCompressDecompress(GzipInterceptor.DEFAULT_BUFFER_SIZE -1);
+    }
+
+    public void testExactBufferSize() throws Exception {
+        doCompressDecompress(GzipInterceptor.DEFAULT_BUFFER_SIZE);
+    }
+
+    public void testJustLargerThanBufferSize() throws Exception {
+        doCompressDecompress(GzipInterceptor.DEFAULT_BUFFER_SIZE + 1);
+    }
+
+    public void testFactor2BufferSize() throws Exception {
+        doCompressDecompress(GzipInterceptor.DEFAULT_BUFFER_SIZE * 2);
+    }
+
+    public void testFactor4BufferSize() throws Exception {
+        doCompressDecompress(GzipInterceptor.DEFAULT_BUFFER_SIZE * 4);
+    }
+
+    public void testMuchLargerThanBufferSize() throws Exception {
+        doCompressDecompress(GzipInterceptor.DEFAULT_BUFFER_SIZE * 10 + 1000);
+    }
+
+    private void doCompressDecompress(int size) throws Exception {
+        byte[] data = new byte[size];
+        Arrays.fill(data, (byte)1);
         byte[] compress = GzipInterceptor.compress(data);
         byte[] result = GzipInterceptor.decompress(compress);
         assertTrue(Arrays.equals(data, result));



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to