This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-io.git

commit c958b3182ff2c57b44fb34069e4c519b68e81707
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Sun Jul 7 18:13:43 2024 -0400

    ChecksumInputStream(InputStream, Checksum, long, long) should fail-fast
    on null Checksum input
    
    More available() and read() tests
---
 src/changes/changes.xml                            |  1 +
 .../commons/io/input/ChecksumInputStream.java      |  3 +-
 .../commons/io/input/ChecksumInputStreamTest.java  | 29 +++++++++++++++++--
 .../commons/io/input/CircularInputStreamTest.java  | 33 ++++++++++++++--------
 4 files changed, 52 insertions(+), 14 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index b735c6121..fa5d8307d 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -68,6 +68,7 @@ The <action> type attribute can be add,update,fix,remove.
       <action dev="ggregory" type="add"                due-to="Gary 
Gregory">BoundedInputStream.available() should return 0 when the stream is 
closed.</action>
       <action dev="ggregory" type="add"                due-to="Gary 
Gregory">CircularInputStream.available() should return 0 when the stream is 
closed.</action>
       <action dev="ggregory" type="add"                due-to="Gary 
Gregory">InfiniteCircularInputStream.available() should return 0 when the 
stream is closed.</action>
+      <action dev="ggregory" type="add"                due-to="Gary 
Gregory">ChecksumInputStream(InputStream, Checksum, long, long) should 
fail-fast on null Checksum input.</action>
       <!-- UPDATE -->
       <action dev="ggregory" type="update"             
due-to="Dependabot">Bump tests commons.bytebuddy.version from 1.14.13 to 
1.14.17 #615, #621, #631, #635.</action>
       <action dev="ggregory" type="update"             
due-to="Dependabot">Bump tests commons-codec:commons-codec from 1.16.1 to 
1.17.0.</action>
diff --git a/src/main/java/org/apache/commons/io/input/ChecksumInputStream.java 
b/src/main/java/org/apache/commons/io/input/ChecksumInputStream.java
index d530edb96..8af6c80ac 100644
--- a/src/main/java/org/apache/commons/io/input/ChecksumInputStream.java
+++ b/src/main/java/org/apache/commons/io/input/ChecksumInputStream.java
@@ -20,6 +20,7 @@ import static org.apache.commons.io.IOUtils.EOF;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.Objects;
 import java.util.zip.CheckedInputStream;
 import java.util.zip.Checksum;
 
@@ -218,7 +219,7 @@ public final class ChecksumInputStream extends 
CountingInputStream {
      */
     private ChecksumInputStream(final InputStream in, final Checksum checksum, 
final long expectedChecksumValue,
             final long countThreshold) {
-        super(new CheckedInputStream(in, checksum));
+        super(new CheckedInputStream(in, Objects.requireNonNull(checksum, 
"checksum")));
         this.countThreshold = countThreshold;
         this.expectedChecksumValue = expectedChecksumValue;
     }
diff --git 
a/src/test/java/org/apache/commons/io/input/ChecksumInputStreamTest.java 
b/src/test/java/org/apache/commons/io/input/ChecksumInputStreamTest.java
index f01eb0cb6..ec1dcfeb8 100644
--- a/src/test/java/org/apache/commons/io/input/ChecksumInputStreamTest.java
+++ b/src/test/java/org/apache/commons/io/input/ChecksumInputStreamTest.java
@@ -27,6 +27,7 @@ import java.io.InputStream;
 import java.util.zip.Adler32;
 import java.util.zip.CRC32;
 
+import org.apache.commons.io.IOUtils;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -34,17 +35,30 @@ import org.junit.jupiter.api.Test;
  */
 public class ChecksumInputStreamTest {
 
+    private ChecksumInputStream createInputStream() throws IOException {
+        return 
ChecksumInputStream.builder().setCharSequence("Hi").setChecksum(new 
CRC32()).get();
+    }
+
     @SuppressWarnings("resource")
     @Test
-    public void testAvailable() throws Exception {
+    public void testAvailableAfterClose() throws Exception {
         final InputStream shadow;
-        try (InputStream in = 
ChecksumInputStream.builder().setCharSequence("Hi").get()) {
+        try (InputStream in = createInputStream()) {
             assertTrue(in.available() > 0);
             shadow = in;
         }
         assertEquals(0, shadow.available());
     }
 
+    @Test
+    public void testAvailableAfterOpen() throws Exception {
+        try (InputStream in = createInputStream()) {
+            assertTrue(in.available() > 0);
+            assertEquals('H', in.read());
+            assertTrue(in.available() > 0);
+        }
+    }
+
     @Test
     public void testDefaultThresholdFailure() throws IOException {
         final byte[] byteArray = new byte[3];
@@ -94,6 +108,17 @@ public class ChecksumInputStreamTest {
         }
     }
 
+    @SuppressWarnings("resource")
+    @Test
+    public void testReadAfterClose() throws Exception {
+        final InputStream shadow;
+        try (InputStream in = createInputStream()) {
+            assertTrue(in.available() > 0);
+            shadow = in;
+        }
+        assertEquals(IOUtils.EOF, shadow.read());
+    }
+
     @Test
     public void testReadTakingByteArrayThrowsException() throws IOException {
         final Adler32 adler32 = new Adler32();
diff --git 
a/src/test/java/org/apache/commons/io/input/CircularInputStreamTest.java 
b/src/test/java/org/apache/commons/io/input/CircularInputStreamTest.java
index 282ad06ea..c3a98f95d 100644
--- a/src/test/java/org/apache/commons/io/input/CircularInputStreamTest.java
+++ b/src/test/java/org/apache/commons/io/input/CircularInputStreamTest.java
@@ -49,28 +49,25 @@ public class CircularInputStreamTest {
 
     @SuppressWarnings("resource")
     @Test
-    public void testAvailable() throws Exception {
+    public void testAvailableAfterClose() throws Exception {
         final InputStream shadow;
-        try (InputStream in = createInputStream(new byte[] { 1, 2 }, 1)) {
+        try (InputStream in = createInputStream(new byte[] { 1, 2 }, 4)) {
             assertTrue(in.available() > 0);
+            assertEquals(1, in.read());
+            assertEquals(2, in.read());
+            assertEquals(1, in.read());
             shadow = in;
         }
         assertEquals(0, shadow.available());
     }
 
-    @SuppressWarnings("resource")
     @Test
-    public void testAvailableAfterClose() throws Exception {
-        final InputStream shadow;
-        try (InputStream in = createInputStream(new byte[] { 1, 2 }, 4)) {
+    public void testAvailableAfterOpen() throws Exception {
+        try (InputStream in = createInputStream(new byte[] { 1, 2 }, 1)) {
             assertTrue(in.available() > 0);
             assertEquals(1, in.read());
-            assertEquals(2, in.read());
-            assertEquals(1, in.read());
-            shadow = in;
+            assertTrue(in.available() > 0);
         }
-        assertEquals(0, shadow.available());
-        assertEquals(IOUtils.EOF, shadow.read());
     }
 
     @Test
@@ -117,6 +114,20 @@ public class CircularInputStreamTest {
         assertThrows(NullPointerException.class, () -> createInputStream(null, 
0));
     }
 
+    @SuppressWarnings("resource")
+    @Test
+    public void testReaderAfterClose() throws Exception {
+        final InputStream shadow;
+        try (InputStream in = createInputStream(new byte[] { 1, 2 }, 4)) {
+            assertTrue(in.available() > 0);
+            assertEquals(1, in.read());
+            assertEquals(2, in.read());
+            assertEquals(1, in.read());
+            shadow = in;
+        }
+        assertEquals(IOUtils.EOF, shadow.read());
+    }
+
     @Test
     public void testWholeRangeOfBytes() throws IOException {
         final int size = Byte.MAX_VALUE - Byte.MIN_VALUE + 1;

Reply via email to