You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2017/03/18 09:46:36 UTC

svn commit: r1787541 - in /httpcomponents/httpcore/trunk/httpcore5/src: main/java/org/apache/hc/core5/http/impl/io/IdentityInputStream.java test/java/org/apache/hc/core5/http/impl/io/TestIdentityInputStream.java

Author: olegk
Date: Sat Mar 18 09:46:36 2017
New Revision: 1787541

URL: http://svn.apache.org/viewvc?rev=1787541&view=rev
Log:
HTTPCORE-449: IdentityInputStream#available to delegate to InputStream#available of the underlying input stream in case the internal buffer is empty

Modified:
    httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/IdentityInputStream.java
    httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestIdentityInputStream.java

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/IdentityInputStream.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/IdentityInputStream.java?rev=1787541&r1=1787540&r2=1787541&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/IdentityInputStream.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/IdentityInputStream.java Sat Mar 18 09:46:36 2017
@@ -67,7 +67,11 @@ public class IdentityInputStream extends
 
     @Override
     public int available() throws IOException {
-        return this.buffer.length();
+        if (this.closed) {
+            return 0;
+        }
+        final int n = this.buffer.length();
+        return n > 0 ? n : this.inputStream.available();
     }
 
     @Override

Modified: httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestIdentityInputStream.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestIdentityInputStream.java?rev=1787541&r1=1787540&r2=1787541&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestIdentityInputStream.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestIdentityInputStream.java Sat Mar 18 09:46:36 2017
@@ -30,6 +30,7 @@ package org.apache.hc.core5.http.impl.io
 import java.io.ByteArrayInputStream;
 
 import org.apache.hc.core5.http.StreamClosedException;
+import org.apache.hc.core5.http.impl.BasicHttpTransportMetrics;
 import org.apache.hc.core5.http.io.SessionInputBuffer;
 import org.junit.Assert;
 import org.junit.Test;
@@ -85,11 +86,23 @@ public class TestIdentityInputStream {
     public void testAvailable() throws Exception {
         final byte[] input = new byte[] {'a', 'b', 'c'};
         final ByteArrayInputStream inputStream = new ByteArrayInputStream(input);
-        final SessionInputBuffer inbuffer = new SessionInputBufferImpl(16);
+        final SessionInputBuffer inbuffer = new SessionInputBufferImpl(new BasicHttpTransportMetrics(), 16, 16, 1024, null);
         final IdentityInputStream in = new IdentityInputStream(inbuffer, inputStream);
         in.read();
         Assert.assertEquals(2, in.available());
         in.close();
     }
 
+    @Test
+    public void testAvailableInStream() throws Exception {
+        final byte[] input = new byte[] {'a', 'b', 'c', 'd', 'e', 'f'};
+        final ByteArrayInputStream inputStream = new ByteArrayInputStream(input);
+        final SessionInputBuffer inbuffer = new SessionInputBufferImpl(new BasicHttpTransportMetrics(), 16, 0, 1024, null);
+        final IdentityInputStream in = new IdentityInputStream(inbuffer, inputStream);
+        final byte[] tmp = new byte[3];
+        Assert.assertEquals(3, in.read(tmp));
+        Assert.assertEquals(3, in.available());
+        in.close();
+    }
+
 }