1 package org.apache.archiva.checksum;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.commons.io.FileUtils;
23 import org.apache.commons.lang.StringUtils;
24 import org.junit.Before;
25 import org.junit.Test;
26 import org.slf4j.LoggerFactory;
27
28 import java.io.File;
29 import java.io.IOException;
30
31
32
33
34
35
36
37 public class ChecksummedFileTest
38 extends AbstractChecksumTestCase
39 {
40
41
42
43 private static final String SERVLETAPI_SHA1 = "bcc82975c0f9c681fcb01cc38504c992553e93ba";
44
45 private static final String REMOTE_METADATA_SHA1 = "da39a3ee5e6b4b0d3255bfef95601890afd80709";
46
47 private static final String REMOTE_METADATA_MD5 = "d41d8cd98f00b204e9800998ecf8427e";
48
49
50 @Before
51 public void cleanTestDir()
52 {
53 try
54 {
55 FileUtils.deleteDirectory( getTestOutputDir() );
56 }
57 catch ( IOException ex )
58 {
59 LoggerFactory.getLogger( ChecksummedFileTest.class ).warn( ex.getMessage(), ex );
60 }
61 }
62
63 private File createTestableJar( String filename )
64 throws IOException
65 {
66 File srcFile = getTestResource( filename );
67 File destFile = new File( getTestOutputDir(), srcFile.getName() );
68 FileUtils.copyFile( srcFile, destFile );
69 return destFile;
70 }
71
72 private File createTestableJar( String filename, boolean copySha1, boolean copyMd5 )
73 throws IOException
74 {
75 File srcFile = getTestResource( filename );
76 File jarFile = new File( getTestOutputDir(), srcFile.getName() );
77 FileUtils.copyFile( srcFile, jarFile );
78
79 if ( copySha1 )
80 {
81 File srcSha1 = new File( srcFile.getAbsolutePath() + ".sha1" );
82 File sha1File = new File( jarFile.getAbsolutePath() + ".sha1" );
83
84 FileUtils.copyFile( srcSha1, sha1File );
85 }
86
87 if ( copyMd5 )
88 {
89 File srcMd5 = new File( srcFile.getAbsolutePath() + ".md5" );
90 File md5File = new File( jarFile.getAbsolutePath() + ".md5" );
91
92 FileUtils.copyFile( srcMd5, md5File );
93 }
94
95 return jarFile;
96 }
97
98 @Test
99 public void testCalculateChecksumMd5()
100 throws IOException
101 {
102 File testfile = getTestResource( "examples/redback-authz-open.jar" );
103 ChecksummedFile checksummedFile = new ChecksummedFile( testfile );
104 String expectedChecksum = "f42047fe2e177ac04d0df7aa44d408be";
105 String actualChecksum = checksummedFile.calculateChecksum( ChecksumAlgorithm.MD5 );
106 assertEquals( expectedChecksum, actualChecksum );
107 }
108
109 @Test
110 public void testCalculateChecksumSha1()
111 throws IOException
112 {
113 File testfile = getTestResource( "examples/redback-authz-open.jar" );
114 ChecksummedFile checksummedFile = new ChecksummedFile( testfile );
115 String expectedChecksum = "2bb14b388973351b0a4dfe11d171965f59cc61a1";
116 String actualChecksum = checksummedFile.calculateChecksum( ChecksumAlgorithm.SHA1 );
117 assertEquals( expectedChecksum, actualChecksum );
118 }
119
120 @Test
121 public void testCreateChecksum()
122 throws IOException
123 {
124 File testableJar = createTestableJar( "examples/redback-authz-open.jar" );
125 ChecksummedFile checksummedFile = new ChecksummedFile( testableJar );
126 checksummedFile.createChecksum( ChecksumAlgorithm.SHA1 );
127 File hashFile = checksummedFile.getChecksumFile( ChecksumAlgorithm.SHA1 );
128 assertTrue( "ChecksumAlgorithm file should exist.", hashFile.exists() );
129 String hashContents = FileUtils.readFileToString( hashFile );
130 hashContents = StringUtils.trim( hashContents );
131 assertEquals( "2bb14b388973351b0a4dfe11d171965f59cc61a1 redback-authz-open.jar", hashContents );
132 }
133
134 @Test
135 public void testFixChecksum()
136 throws IOException
137 {
138 File jarFile = createTestableJar( "examples/redback-authz-open.jar" );
139 File sha1File = new File( jarFile.getAbsolutePath() + ".sha1" );
140
141
142 FileUtils.writeStringToFile( sha1File, "sha1sum: redback-authz-open.jar: No such file or directory" );
143
144 ChecksummedFile checksummedFile = new ChecksummedFile( jarFile );
145 assertFalse( "ChecksummedFile.isValid(SHA1) == false",
146 checksummedFile.isValidChecksum( ChecksumAlgorithm.SHA1 ) );
147
148 boolean fixed = checksummedFile.fixChecksums( new ChecksumAlgorithm[]{ ChecksumAlgorithm.SHA1 } );
149 assertTrue( "ChecksummedFile.fixChecksums() == true", fixed );
150
151 assertTrue( "ChecksummedFile.isValid(SHA1) == true",
152 checksummedFile.isValidChecksum( ChecksumAlgorithm.SHA1 ) );
153 }
154
155 @Test
156 public void testGetChecksumFile()
157 {
158 ChecksummedFile checksummedFile = new ChecksummedFile( new File( "test.jar" ) );
159 assertEquals( "test.jar.sha1", checksummedFile.getChecksumFile( ChecksumAlgorithm.SHA1 ).getName() );
160 }
161
162 @Test
163 public void testIsValidChecksum()
164 throws IOException
165 {
166 File jarFile = createTestableJar( "examples/redback-authz-open.jar", true, false );
167
168 ChecksummedFile checksummedFile = new ChecksummedFile( jarFile );
169 assertTrue( "ChecksummedFile.isValid(SHA1)", checksummedFile.isValidChecksum( ChecksumAlgorithm.SHA1 ) );
170 }
171
172 @Test
173 public void testIsValidChecksumInvalidSha1Format()
174 throws IOException
175 {
176 File jarFile = createTestableJar( "examples/redback-authz-open.jar" );
177 File sha1File = new File( jarFile.getAbsolutePath() + ".sha1" );
178
179
180 FileUtils.writeStringToFile( sha1File, "sha1sum: redback-authz-open.jar: No such file or directory" );
181
182 ChecksummedFile checksummedFile = new ChecksummedFile( jarFile );
183 assertFalse( "ChecksummedFile.isValid(SHA1)", checksummedFile.isValidChecksum( ChecksumAlgorithm.SHA1 ) );
184
185 }
186
187 @Test
188 public void testIsValidChecksumNoChecksumFiles()
189 throws IOException
190 {
191 File jarFile = createTestableJar( "examples/redback-authz-open.jar", false, false );
192
193 ChecksummedFile checksummedFile = new ChecksummedFile( jarFile );
194 assertFalse( "ChecksummedFile.isValid(SHA1,MD5)", checksummedFile.isValidChecksums(
195 new ChecksumAlgorithm[]{ ChecksumAlgorithm.SHA1, ChecksumAlgorithm.MD5 } ) );
196
197 }
198
199 @Test
200 public void testIsValidChecksumSha1AndMd5()
201 throws IOException
202 {
203 File jarFile = createTestableJar( "examples/redback-authz-open.jar", true, true );
204
205 ChecksummedFile checksummedFile = new ChecksummedFile( jarFile );
206 assertTrue( "ChecksummedFile.isValid(SHA1,MD5)", checksummedFile.isValidChecksums(
207 new ChecksumAlgorithm[]{ ChecksumAlgorithm.SHA1, ChecksumAlgorithm.MD5 } ) );
208 }
209
210 @Test
211 public void testIsValidChecksumSha1NoMd5()
212 throws IOException
213 {
214 File jarFile = createTestableJar( "examples/redback-authz-open.jar", true, false );
215
216 ChecksummedFile checksummedFile = new ChecksummedFile( jarFile );
217 assertTrue( "ChecksummedFile.isValid(SHA1)", checksummedFile.isValidChecksums(
218 new ChecksumAlgorithm[]{ ChecksumAlgorithm.SHA1, ChecksumAlgorithm.MD5 } ) );
219
220 }
221
222 @Test
223 public void testParseChecksum()
224 throws IOException
225 {
226 String expected = SERVLETAPI_SHA1
227 + " /home/projects/maven/repository-staging/to-ibiblio/maven2/servletapi/servletapi/2.4/servletapi-2.4.pom";
228
229 File testfile = getTestResource( "examples/redback-authz-open.jar" );
230 ChecksummedFile checksummedFile = new ChecksummedFile( testfile );
231 String s = checksummedFile.parseChecksum( expected, ChecksumAlgorithm.SHA1,
232 "servletapi/servletapi/2.4/servletapi-2.4.pom" );
233 assertEquals( "Checksum doesn't match", SERVLETAPI_SHA1, s );
234
235 }
236
237 @Test
238 public void testParseChecksumAltDash1()
239 throws IOException
240 {
241 String expected = SERVLETAPI_SHA1 + " -";
242 File testfile = getTestResource( "examples/redback-authz-open.jar" );
243 ChecksummedFile checksummedFile = new ChecksummedFile( testfile );
244 String s = checksummedFile.parseChecksum( expected, ChecksumAlgorithm.SHA1,
245 "servletapi/servletapi/2.4/servletapi-2.4.pom" );
246 assertEquals( "Checksum doesn't match", SERVLETAPI_SHA1, s );
247 }
248
249 @Test
250 public void testParseChecksumAltDash2()
251 throws IOException
252 {
253 String expected = "SHA1(-)=" + SERVLETAPI_SHA1;
254 File testfile = getTestResource( "examples/redback-authz-open.jar" );
255 ChecksummedFile checksummedFile = new ChecksummedFile( testfile );
256 String s = checksummedFile.parseChecksum( expected, ChecksumAlgorithm.SHA1,
257 "servletapi/servletapi/2.4/servletapi-2.4.pom" );
258 assertEquals( "Checksum doesn't match", SERVLETAPI_SHA1, s );
259 }
260
261 @Test
262 public void testRemoteMetadataChecksumFilePathSha1()
263 throws IOException
264 {
265 String expected = REMOTE_METADATA_SHA1 + " /home/test/repository/examples/metadata/maven-metadata.xml";
266 File testfile = getTestResource( "examples/metadata/maven-metadata-remote.xml" );
267 ChecksummedFile checksummedFile = new ChecksummedFile( testfile );
268
269 try
270 {
271 String s = checksummedFile.parseChecksum( expected, ChecksumAlgorithm.SHA1, "maven-metadata-remote.xml" );
272 assertEquals( "Checksum doesn't match", REMOTE_METADATA_SHA1, s );
273 }
274 catch ( IOException e )
275 {
276 e.printStackTrace();
277 fail( "IOException should not occur." );
278 }
279 }
280
281 @Test
282 public void testRemoteMetadataChecksumFilePathMd5()
283 throws IOException
284 {
285 String expected = REMOTE_METADATA_MD5 + " ./examples/metadata/maven-metadata.xml";
286 File testfile = getTestResource( "examples/metadata/maven-metadata-remote.xml" );
287 ChecksummedFile checksummedFile = new ChecksummedFile( testfile );
288
289 try
290 {
291 String s = checksummedFile.parseChecksum( expected, ChecksumAlgorithm.MD5, "maven-metadata-remote.xml" );
292 assertEquals( "Checksum doesn't match", REMOTE_METADATA_MD5, s );
293 }
294 catch ( IOException e )
295 {
296 e.printStackTrace();
297 fail( "IOException should not occur." );
298 }
299 }
300 }