1 package org.eclipse.aether.connector.basic;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 }