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