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