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