THRIFT-3392:ZLib does not flush wrapper streams on close
Client: Java
Patch: Antonio García
Github Pull Request:
This closes #655
commit e413701b53a4aa0069b5e5d873847c147308581e
Author: Antonio García-Domínguez <nyoescape@gmail.com>
Date: 2015-10-18T13:16:02Z
THRIFT-3392 Java TZlibTransport: ensure inflater/deflater are closed upon close()
diff --git a/lib/java/src/org/apache/thrift/transport/TZlibTransport.java b/lib/java/src/org/apache/thrift/transport/TZlibTransport.java
index df4de13..e755aa5 100644
--- a/lib/java/src/org/apache/thrift/transport/TZlibTransport.java
+++ b/lib/java/src/org/apache/thrift/transport/TZlibTransport.java
@@ -74,11 +74,11 @@
@Override
public void close() {
+ super.close();
if (transport_.isOpen()) {
transport_.close();
}
}
-
}
class TTransportInputStream extends InputStream {
diff --git a/lib/java/test/org/apache/thrift/transport/TestTZlibTransport.java b/lib/java/test/org/apache/thrift/transport/TestTZlibTransport.java
index fe8dd51..3d7f9c1 100644
--- a/lib/java/test/org/apache/thrift/transport/TestTZlibTransport.java
+++ b/lib/java/test/org/apache/thrift/transport/TestTZlibTransport.java
@@ -18,14 +18,19 @@
*/
package org.apache.thrift.transport;
-import junit.framework.TestCase;
-
-import java.io.*;
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
import java.util.Arrays;
import java.util.zip.DataFormatException;
import java.util.zip.DeflaterOutputStream;
import java.util.zip.InflaterInputStream;
+import junit.framework.TestCase;
+
public class TestTZlibTransport extends TestCase {
protected TTransport getTransport(TTransport underlying) {
@@ -50,6 +55,21 @@
trans.close();
}
+ public void testCloseOpen() throws TTransportException {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ TTransport trans = getTransport(new TIOStreamTransport(baos));
+ byte[] uncompressed = byteSequence(0, 245);
+ trans.write(uncompressed);
+ trans.close();
+ final byte[] compressed = baos.toByteArray();
+
+ final byte[] buf = new byte[255];
+ TTransport transRead = getTransport(new TIOStreamTransport(new ByteArrayInputStream(compressed)));
+ int readBytes = transRead.read(buf, 0, buf.length);
+ assertEquals(uncompressed.length, readBytes);
+ transRead.close();
+ }
+
public void testRead() throws IOException, TTransportException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(baos);