View Javadoc
1   package org.eclipse.aether.connector.basic;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import static org.junit.Assert.*;
23  
24  import java.io.File;
25  import java.io.IOException;
26  import java.net.URI;
27  import java.nio.ByteBuffer;
28  import java.nio.charset.StandardCharsets;
29  import java.security.NoSuchAlgorithmException;
30  import java.util.ArrayList;
31  import java.util.List;
32  import java.util.Map;
33  
34  import org.eclipse.aether.internal.test.util.TestFileUtils;
35  import org.eclipse.aether.spi.connector.layout.RepositoryLayout;
36  import org.junit.Before;
37  import org.junit.Test;
38  
39  public class ChecksumCalculatorTest
40  {
41  
42      private static final String SHA512 = "SHA-512";
43  
44      private static final String SHA256 = "SHA-256";
45  
46      private static final String SHA1 = "SHA-1";
47  
48      private static final String MD5 = "MD5";
49  
50      private File file;
51  
52      private ChecksumCalculator newCalculator( String... algos )
53      {
54          List<RepositoryLayout.Checksum> checksums = new ArrayList<>();
55          for ( String algo : algos )
56          {
57              checksums.add( new RepositoryLayout.Checksum( algo, URI.create( "irrelevant" ) ) );
58          }
59          return ChecksumCalculator.newInstance( file, checksums );
60      }
61  
62      private ByteBuffer toBuffer( String data )
63      {
64          return ByteBuffer.wrap( data.getBytes( StandardCharsets.UTF_8 ) );
65      }
66  
67      @Before
68      public void init()
69          throws Exception
70      {
71          file = TestFileUtils.createTempFile( "Hello World!" );
72      }
73  
74      @Test
75      public void testNoOffset()
76      {
77          ChecksumCalculator calculator = newCalculator( SHA512, SHA256, SHA1, MD5 );
78          calculator.init( 0 );
79          calculator.update( toBuffer( "Hello World!" ) );
80          Map<String, Object> digests = calculator.get();
81          assertNotNull( digests );
82          assertEquals( "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8", digests.get( SHA512 ) );
83          assertEquals( "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get( SHA256 ) );
84          assertEquals( "2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get( SHA1 ) );
85          assertEquals( "ed076287532e86365e841e92bfc50d8c", digests.get( MD5 ) );
86          assertEquals( 4, digests.size() );
87      }
88  
89      @Test
90      public void testWithOffset()
91      {
92          ChecksumCalculator calculator = newCalculator( SHA512, SHA256, SHA1, MD5 );
93          calculator.init( 6 );
94          calculator.update( toBuffer( "World!" ) );
95          Map<String, Object> digests = calculator.get();
96          assertNotNull( digests );
97          assertEquals( "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8", digests.get( SHA512 ) );
98          assertEquals( "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get( SHA256 ) );
99          assertEquals( "2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get( SHA1 ) );
100         assertEquals( "ed076287532e86365e841e92bfc50d8c", digests.get( MD5 ) );
101         assertEquals( 4, digests.size() );
102     }
103 
104     @Test
105     public void testWithExcessiveOffset()
106     {
107         ChecksumCalculator calculator = newCalculator( SHA512, SHA256, SHA1, MD5 );
108         calculator.init( 100 );
109         calculator.update( toBuffer( "World!" ) );
110         Map<String, Object> digests = calculator.get();
111         assertNotNull( digests );
112         assertTrue( digests.get( SHA512 ) instanceof IOException );
113         assertTrue( digests.get( SHA256 ) instanceof IOException );
114         assertTrue( digests.get( SHA1 ) instanceof IOException );
115         assertTrue( digests.get( MD5 ) instanceof IOException );
116         assertEquals( 4, digests.size() );
117     }
118 
119     @Test
120     public void testUnknownAlgorithm()
121     {
122         ChecksumCalculator calculator = newCalculator( "unknown", SHA1 );
123         calculator.init( 0 );
124         calculator.update( toBuffer( "Hello World!" ) );
125         Map<String, Object> digests = calculator.get();
126         assertNotNull( digests );
127         assertEquals( "2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get( SHA1 ) );
128         assertTrue( digests.get( "unknown" ) instanceof NoSuchAlgorithmException );
129         assertEquals( 2, digests.size() );
130     }
131 
132     @Test
133     public void testNoInitCall()
134     {
135         ChecksumCalculator calculator = newCalculator( SHA512, SHA256, SHA1, MD5 );
136         calculator.update( toBuffer( "Hello World!" ) );
137         Map<String, Object> digests = calculator.get();
138         assertNotNull( digests );
139         assertEquals( "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8", digests.get( SHA512 ) );
140         assertEquals( "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get( SHA256 ) );
141         assertEquals( "2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get( SHA1 ) );
142         assertEquals( "ed076287532e86365e841e92bfc50d8c", digests.get( MD5 ) );
143         assertEquals( 4, digests.size() );
144     }
145 
146     @Test
147     public void testRestart()
148     {
149         ChecksumCalculator calculator = newCalculator( SHA512, SHA256, SHA1, MD5 );
150         calculator.init( 0 );
151         calculator.update( toBuffer( "Ignored" ) );
152         calculator.init( 0 );
153         calculator.update( toBuffer( "Hello World!" ) );
154         Map<String, Object> digests = calculator.get();
155         assertNotNull( digests );
156         assertEquals( "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8", digests.get( SHA512 ) );
157         assertEquals( "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get( SHA256 ) );
158         assertEquals( "2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get( SHA1 ) );
159         assertEquals( "ed076287532e86365e841e92bfc50d8c", digests.get( MD5 ) );
160         assertEquals( 4, digests.size() );
161     }
162 
163     @Test
164     public void testRestartAfterError()
165     {
166         ChecksumCalculator calculator = newCalculator( SHA512, SHA256, SHA1, MD5 );
167         calculator.init( 100 );
168         calculator.init( 0 );
169         calculator.update( toBuffer( "Hello World!" ) );
170         Map<String, Object> digests = calculator.get();
171         assertNotNull( digests );
172         assertEquals( "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8", digests.get( SHA512 ) );
173         assertEquals( "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get( SHA256 ) );
174         assertEquals( "2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get( SHA1 ) );
175         assertEquals( "ed076287532e86365e841e92bfc50d8c", digests.get( MD5 ) );
176         assertEquals( 4, digests.size() );
177     }
178 
179 }