View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.compress.utils;
18  
19  import static org.junit.jupiter.api.Assertions.assertEquals;
20  import static org.junit.jupiter.api.Assertions.assertNotEquals;
21  import static org.junit.jupiter.api.Assertions.assertThrows;
22  
23  import java.io.BufferedInputStream;
24  import java.io.ByteArrayInputStream;
25  import java.io.IOException;
26  import java.util.zip.Adler32;
27  import java.util.zip.CRC32;
28  import java.util.zip.CheckedInputStream;
29  
30  import org.junit.jupiter.api.Test;
31  
32  /**
33   * Unit tests for class {@link ChecksumCalculatingInputStream org.apache.commons.compress.utils.ChecksumCalculatingInputStream}.
34   *
35   * @see ChecksumCalculatingInputStream
36   */
37  public class ChecksumCalculatingInputStreamTest {
38  
39      @Test
40      public void testClassInstantiationWithParameterBeingNullThrowsNullPointerExceptionOne() {
41          assertThrows(NullPointerException.class, () -> new ChecksumCalculatingInputStream(null, null));
42      }
43  
44      @Test
45      public void testClassInstantiationWithParameterBeingNullThrowsNullPointerExceptionThree() {
46          assertThrows(NullPointerException.class, () -> new ChecksumCalculatingInputStream(new CRC32(), null));
47      }
48  
49      @Test
50      public void testClassInstantiationWithParameterBeingNullThrowsNullPointerExceptionTwo() {
51          assertThrows(NullPointerException.class, () -> new ChecksumCalculatingInputStream(null, new ByteArrayInputStream(new byte[1])));
52      }
53  
54      @Test
55      public void testReadTakingByteArray() throws IOException {
56          final Adler32 adler32 = new Adler32();
57          final byte[] byteArray = new byte[6];
58          final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
59          try (ChecksumCalculatingInputStream checksumCalculatingInputStream = new ChecksumCalculatingInputStream(adler32, byteArrayInputStream)) {
60              final int readResult = checksumCalculatingInputStream.read(byteArray);
61              assertEquals(6, readResult);
62              assertEquals(0, byteArrayInputStream.available());
63              assertEquals(393217L, checksumCalculatingInputStream.getValue());
64          }
65      }
66  
67      @Test
68      public void testReadTakingByteArraySanityCheck() throws IOException {
69          final Adler32 adler32 = new Adler32();
70          final byte[] byteArray = new byte[6];
71          final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
72          try (CheckedInputStream checksumCalculatingInputStream = new CheckedInputStream(byteArrayInputStream, adler32)) {
73              final int readResult = checksumCalculatingInputStream.read(byteArray);
74              assertEquals(6, readResult);
75              assertEquals(0, byteArrayInputStream.available());
76              assertEquals(393217L, checksumCalculatingInputStream.getChecksum().getValue());
77          }
78      }
79  
80      @Test
81      public void testReadTakingNoArguments() throws IOException {
82          final Adler32 adler32 = new Adler32();
83          final byte[] byteArray = new byte[6];
84          final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
85          final ChecksumCalculatingInputStream checksumCalculatingInputStream = new ChecksumCalculatingInputStream(adler32, byteArrayInputStream);
86          try (BufferedInputStream bufferedInputStream = new BufferedInputStream(checksumCalculatingInputStream)) {
87              final int inputStreamReadResult = bufferedInputStream.read(byteArray, 0, 1);
88              final int checkSumCalculationReadResult = checksumCalculatingInputStream.read();
89              assertNotEquals(checkSumCalculationReadResult, inputStreamReadResult);
90              assertEquals(-1, checkSumCalculationReadResult);
91              assertEquals(0, byteArrayInputStream.available());
92              assertEquals(393217L, checksumCalculatingInputStream.getValue());
93          }
94      }
95  
96      @Test
97      public void testReadTakingNoArgumentsSanityCheck() throws IOException {
98          final Adler32 adler32 = new Adler32();
99          final byte[] byteArray = new byte[6];
100         final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
101         final CheckedInputStream checksumCalculatingInputStream = new CheckedInputStream(byteArrayInputStream, adler32);
102         try (BufferedInputStream bufferedInputStream = new BufferedInputStream(checksumCalculatingInputStream)) {
103             final int inputStreamReadResult = bufferedInputStream.read(byteArray, 0, 1);
104             final int checkSumCalculationReadResult = checksumCalculatingInputStream.read();
105             assertNotEquals(checkSumCalculationReadResult, inputStreamReadResult);
106             assertEquals(-1, checkSumCalculationReadResult);
107             assertEquals(0, byteArrayInputStream.available());
108             assertEquals(393217L, checksumCalculatingInputStream.getChecksum().getValue());
109         }
110     }
111 
112     @Test
113     public void testSkipReturningPositive() throws IOException {
114         final Adler32 adler32 = new Adler32();
115         final byte[] byteArray = new byte[6];
116         final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
117         try (ChecksumCalculatingInputStream checksumCalculatingInputStream = new ChecksumCalculatingInputStream(adler32, byteArrayInputStream)) {
118             final long skipResult = checksumCalculatingInputStream.skip((byte) 0);
119             assertEquals(0, skipResult);
120             assertEquals(1, checksumCalculatingInputStream.getValue());
121         }
122     }
123 
124     @Test
125     public void testSkipReturningPositiveSanityCheck() throws IOException {
126         final Adler32 adler32 = new Adler32();
127         final byte[] byteArray = new byte[6];
128         final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
129         try (CheckedInputStream checksumCalculatingInputStream = new CheckedInputStream(byteArrayInputStream, adler32)) {
130             final long skipResult = checksumCalculatingInputStream.skip((byte) 0);
131             assertEquals(0, skipResult);
132             assertEquals(1, checksumCalculatingInputStream.getChecksum().getValue());
133         }
134     }
135 
136     @Test
137     public void testSkipReturningZero() throws IOException {
138         final Adler32 adler32 = new Adler32();
139         final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY);
140         try (ChecksumCalculatingInputStream checksumCalculatingInputStream = new ChecksumCalculatingInputStream(adler32, byteArrayInputStream)) {
141             final long skipResult = checksumCalculatingInputStream.skip(60L);
142             assertEquals(0L, skipResult);
143             assertEquals(1L, checksumCalculatingInputStream.getValue());
144         }
145     }
146 
147     @Test
148     public void testSkipReturningZeroSanityCheck() throws IOException {
149         final Adler32 adler32 = new Adler32();
150         final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY);
151         try (CheckedInputStream checksumCalculatingInputStream = new CheckedInputStream(byteArrayInputStream, adler32)) {
152             final long skipResult = checksumCalculatingInputStream.skip(60L);
153             assertEquals(0L, skipResult);
154             assertEquals(1L, checksumCalculatingInputStream.getChecksum().getValue());
155         }
156     }
157 
158 }