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 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
30
31
32
33 public class ChecksummedFileTest
34 extends AbstractChecksumTestCase
35 {
36
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
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
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 }