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   *   http://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.eclipse.aether.connector.basic;
20  
21  import java.io.File;
22  import java.io.IOException;
23  import java.nio.ByteBuffer;
24  import java.nio.charset.StandardCharsets;
25  import java.util.ArrayList;
26  import java.util.List;
27  import java.util.Map;
28  
29  import org.eclipse.aether.internal.test.util.TestFileUtils;
30  import org.eclipse.aether.spi.connector.checksum.ChecksumAlgorithmFactory;
31  import org.junit.jupiter.api.BeforeEach;
32  import org.junit.jupiter.api.Test;
33  
34  import static org.eclipse.aether.connector.basic.TestChecksumAlgorithmSelector.MD5;
35  import static org.eclipse.aether.connector.basic.TestChecksumAlgorithmSelector.SHA1;
36  import static org.eclipse.aether.connector.basic.TestChecksumAlgorithmSelector.SHA256;
37  import static org.eclipse.aether.connector.basic.TestChecksumAlgorithmSelector.SHA512;
38  import static org.junit.jupiter.api.Assertions.*;
39  
40  public class ChecksumCalculatorTest {
41  
42      private File file;
43  
44      private final TestChecksumAlgorithmSelector selector = new TestChecksumAlgorithmSelector();
45  
46      private ChecksumCalculator newCalculator(String... algos) {
47          List<ChecksumAlgorithmFactory> checksumAlgorithmFactories = new ArrayList<>();
48          for (String algo : algos) {
49              checksumAlgorithmFactories.add(selector.select(algo));
50          }
51          return ChecksumCalculator.newInstance(file, checksumAlgorithmFactories);
52      }
53  
54      private ByteBuffer toBuffer(String data) {
55          return ByteBuffer.wrap(data.getBytes(StandardCharsets.UTF_8));
56      }
57  
58      @BeforeEach
59      void init() throws Exception {
60          file = TestFileUtils.createTempFile("Hello World!");
61      }
62  
63      @Test
64      void testNoOffset() {
65          ChecksumCalculator calculator = newCalculator(SHA512, SHA256, SHA1, MD5);
66          calculator.init(0);
67          calculator.update(toBuffer("Hello World!"));
68          Map<String, Object> digests = calculator.get();
69          assertNotNull(digests);
70          assertEquals(
71                  "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8",
72                  digests.get(SHA512));
73          assertEquals("7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get(SHA256));
74          assertEquals("2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get(SHA1));
75          assertEquals("ed076287532e86365e841e92bfc50d8c", digests.get(MD5));
76          assertEquals(4, digests.size());
77      }
78  
79      @Test
80      void testWithOffset() {
81          ChecksumCalculator calculator = newCalculator(SHA512, SHA256, SHA1, MD5);
82          calculator.init(6);
83          calculator.update(toBuffer("World!"));
84          Map<String, Object> digests = calculator.get();
85          assertNotNull(digests);
86          assertEquals(
87                  "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8",
88                  digests.get(SHA512));
89          assertEquals("7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get(SHA256));
90          assertEquals("2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get(SHA1));
91          assertEquals("ed076287532e86365e841e92bfc50d8c", digests.get(MD5));
92          assertEquals(4, digests.size());
93      }
94  
95      @Test
96      void testWithExcessiveOffset() {
97          ChecksumCalculator calculator = newCalculator(SHA512, SHA256, SHA1, MD5);
98          calculator.init(100);
99          calculator.update(toBuffer("World!"));
100         Map<String, Object> digests = calculator.get();
101         assertNotNull(digests);
102         assertTrue(digests.get(SHA512) instanceof IOException);
103         assertTrue(digests.get(SHA256) instanceof IOException);
104         assertTrue(digests.get(SHA1) instanceof IOException);
105         assertTrue(digests.get(MD5) instanceof IOException);
106         assertEquals(4, digests.size());
107     }
108 
109     @Test
110     void testUnknownAlgorithm() {
111         // resolver now does not tolerate unknown checksums: as they may be set by user only, it is user
112         // misconfiguration
113         assertThrows(IllegalArgumentException.class, () -> newCalculator("unknown", SHA1));
114     }
115 
116     @Test
117     void testNoInitCall() {
118         ChecksumCalculator calculator = newCalculator(SHA512, SHA256, SHA1, MD5);
119         calculator.update(toBuffer("Hello World!"));
120         Map<String, Object> digests = calculator.get();
121         assertNotNull(digests);
122         assertEquals(
123                 "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8",
124                 digests.get(SHA512));
125         assertEquals("7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get(SHA256));
126         assertEquals("2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get(SHA1));
127         assertEquals("ed076287532e86365e841e92bfc50d8c", digests.get(MD5));
128         assertEquals(4, digests.size());
129     }
130 
131     @Test
132     void testRestart() {
133         ChecksumCalculator calculator = newCalculator(SHA512, SHA256, SHA1, MD5);
134         calculator.init(0);
135         calculator.update(toBuffer("Ignored"));
136         calculator.init(0);
137         calculator.update(toBuffer("Hello World!"));
138         Map<String, Object> digests = calculator.get();
139         assertNotNull(digests);
140         assertEquals(
141                 "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8",
142                 digests.get(SHA512));
143         assertEquals("7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get(SHA256));
144         assertEquals("2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get(SHA1));
145         assertEquals("ed076287532e86365e841e92bfc50d8c", digests.get(MD5));
146         assertEquals(4, digests.size());
147     }
148 
149     @Test
150     void testRestartAfterError() {
151         ChecksumCalculator calculator = newCalculator(SHA512, SHA256, SHA1, MD5);
152         calculator.init(100);
153         calculator.init(0);
154         calculator.update(toBuffer("Hello World!"));
155         Map<String, Object> digests = calculator.get();
156         assertNotNull(digests);
157         assertEquals(
158                 "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8",
159                 digests.get(SHA512));
160         assertEquals("7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get(SHA256));
161         assertEquals("2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get(SHA1));
162         assertEquals("ed076287532e86365e841e92bfc50d8c", digests.get(MD5));
163         assertEquals(4, digests.size());
164     }
165 }