Author: joakime
Date: Fri Apr 11 22:20:47 2008
New Revision: 647378
URL: http://svn.apache.org/viewvc?rev=647378&view=rev
Log:
Increasing test coverage.
Added:
archiva/sandbox/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksumTest.java
(with props)
Modified:
archiva/sandbox/archiva-checksum/src/main/java/org/apache/archiva/checksum/Checksum.java
archiva/sandbox/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksummedFile.java
archiva/sandbox/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksummedFileTest.java
Modified:
archiva/sandbox/archiva-checksum/src/main/java/org/apache/archiva/checksum/Checksum.java
URL:
http://svn.apache.org/viewvc/archiva/sandbox/archiva-checksum/src/main/java/org/apache/archiva/checksum/Checksum.java?rev=647378&r1=647377&r2=647378&view=diff
==============================================================================
---
archiva/sandbox/archiva-checksum/src/main/java/org/apache/archiva/checksum/Checksum.java
(original)
+++
archiva/sandbox/archiva-checksum/src/main/java/org/apache/archiva/checksum/Checksum.java
Fri Apr 11 22:20:47 2008
@@ -67,6 +67,7 @@
}
catch ( NoSuchAlgorithmException e )
{
+ // Not really possible, but here none-the-less
throw new IllegalStateException( "Unable to initialize
MessageDigest algorithm " + checksumAlgorithm.getAlgorithm()
+ " : " + e.getMessage(), e );
}
Modified:
archiva/sandbox/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksummedFile.java
URL:
http://svn.apache.org/viewvc/archiva/sandbox/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksummedFile.java?rev=647378&r1=647377&r2=647378&view=diff
==============================================================================
---
archiva/sandbox/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksummedFile.java
(original)
+++
archiva/sandbox/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksummedFile.java
Fri Apr 11 22:20:47 2008
@@ -21,7 +21,6 @@
import java.io.File;
import java.io.FileInputStream;
-import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@@ -29,7 +28,6 @@
import java.util.regex.Pattern;
import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
@@ -55,15 +53,16 @@
public class ChecksummedFile
{
private Logger log = LoggerFactory.getLogger( ChecksummedFile.class );
-
+
private final File referenceFile;
-
+
/**
* Construct a ChecksummedFile object.
*
* @param referenceFile
*/
- public ChecksummedFile(final File referenceFile) {
+ public ChecksummedFile( final File referenceFile )
+ {
this.referenceFile = referenceFile;
}
@@ -127,46 +126,21 @@
* NOTE: Only supports single file checksums of type MD5 or SHA1.
* </p>
*
- * @param checksumFile the checksum file (must end in ".sha1" or ".md5")
- * @return true if the checksum is valid for the file it represents.
- * @throws DigesterException if there is a digester problem during the
check of the reference file.
- * @throws FileNotFoundException if the checksumFile itself or the file it
refers to is not found.
+ * @param checksumFile the algorithms to check for.
+ * @return true if the checksum is valid for the file it represents. or if
the checksum file does not exist.
* @throws IOException if the reading of the checksumFile or the file it
refers to fails.
*/
- public boolean isValidChecksum( File checksumFile )
- throws FileNotFoundException, IOException
+ public boolean isValidChecksum( ChecksumAlgorithm algorithm )
+ throws IOException
{
- if ( !checksumFile.exists() )
- {
- throw new FileNotFoundException( "Unable to find checksum file " +
checksumFile.getAbsolutePath() );
- }
-
- if ( !checksumFile.isFile() )
- {
- throw new IOException( "Unable to load checksum from non-file " +
checksumFile.getAbsolutePath() );
- }
-
- ChecksumAlgorithm checksumAlgorithm =
ChecksumAlgorithm.getByExtension( checksumFile );
-
- File parentDir = checksumFile.getParentFile();
- String filename = FilenameUtils.removeExtension(
checksumFile.getName() );
-
- // Reference file is the file that the checksum file is refering to.
- File referenceFile = new File( parentDir, filename );
-
- String rawChecksum = FileUtils.readFileToString( checksumFile );
- String expectedChecksum = parseChecksum( rawChecksum,
checksumAlgorithm, referenceFile.getName() );
-
- String actualChecksum = calculateChecksum( checksumAlgorithm );
-
- return StringUtils.equalsIgnoreCase( expectedChecksum, actualChecksum
);
+ return isValidChecksums( new ChecksumAlgorithm[] { algorithm } );
}
/**
* Of any checksum files present, validate that the reference file conforms
* the to the checksum.
*
- * @param algorithms the hashes to check for.
+ * @param algorithms the algorithms to check for.
* @return true if the checksums report that the the reference file is
valid.
* @throws IOException if unable to validate the checksums.
*/
Added:
archiva/sandbox/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksumTest.java
URL:
http://svn.apache.org/viewvc/archiva/sandbox/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksumTest.java?rev=647378&view=auto
==============================================================================
---
archiva/sandbox/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksumTest.java
(added)
+++
archiva/sandbox/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksumTest.java
Fri Apr 11 22:20:47 2008
@@ -0,0 +1,103 @@
+package org.apache.archiva.checksum;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * ChecksumTest
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ChecksumTest
+ extends AbstractChecksumTestCase
+{
+ private static final String UNSET_SHA1 =
"da39a3ee5e6b4b0d3255bfef95601890afd80709";
+
+ public void testConstructSha1()
+ {
+ Checksum checksum = new Checksum( ChecksumAlgorithm.SHA1 );
+ assertEquals( "Checksum.algorithm",
checksum.getAlgorithm().getAlgorithm(), ChecksumAlgorithm.SHA1
+ .getAlgorithm() );
+ }
+
+ public void testConstructMd5()
+ {
+ Checksum checksum = new Checksum( ChecksumAlgorithm.MD5 );
+ assertEquals( "Checksum.algorithm",
checksum.getAlgorithm().getAlgorithm(), ChecksumAlgorithm.MD5
+ .getAlgorithm() );
+ }
+
+ public void testUpdate()
+ {
+ Checksum checksum = new Checksum( ChecksumAlgorithm.SHA1 );
+ byte buf[] = ( "You know, I'm sick of following my dreams, man. "
+ + "I'm just going to ask where they're going and hook up with 'em
later. - Mitch Hedberg" ).getBytes();
+ checksum.update( buf, 0, buf.length );
+ assertEquals( "Checksum", "e396119ae0542e85a74759602fd2f81e5d36d762",
checksum.getChecksum() );
+ }
+
+ public void testUpdateMany()
+ throws IOException
+ {
+ Checksum checksumSha1 = new Checksum( ChecksumAlgorithm.SHA1 );
+ Checksum checksumMd5 = new Checksum( ChecksumAlgorithm.MD5 );
+ List<Checksum> checksums = new ArrayList<Checksum>();
+ checksums.add( checksumSha1 );
+ checksums.add( checksumMd5 );
+
+ byte buf[] = ( "You know, I'm sick of following my dreams, man. "
+ + "I'm just going to ask where they're going and hook up with 'em
later. - Mitch Hedberg" ).getBytes();
+
+ ByteArrayInputStream stream = new ByteArrayInputStream( buf );
+ Checksum.update( checksums, stream );
+
+ assertEquals( "Checksum SHA1",
"e396119ae0542e85a74759602fd2f81e5d36d762", checksumSha1.getChecksum() );
+ assertEquals( "Checksum MD5", "21c2c5ca87ec018adacb2e2fb3432219",
checksumMd5.getChecksum() );
+ }
+
+ public void testUpdateWholeUpdatePartial()
+ {
+ Checksum checksum = new Checksum( ChecksumAlgorithm.SHA1 );
+ assertEquals( "Checksum unset", UNSET_SHA1, checksum.getChecksum() );
+
+ String expected = "066c2cbbc8cdaecb8ff97dcb84502462d6f575f3";
+ byte reesepieces[] = "eatagramovabits".getBytes();
+ checksum.update( reesepieces, 0, reesepieces.length );
+ String actual = checksum.getChecksum();
+
+ assertEquals( "Expected", expected, actual );
+
+ // Reset the checksum.
+ checksum.reset();
+ assertEquals( "Checksum unset", UNSET_SHA1, checksum.getChecksum() );
+
+ // Now parse it again in 3 pieces.
+ checksum.update( reesepieces, 0, 5 );
+ checksum.update( reesepieces, 5, 5 );
+ checksum.update( reesepieces, 10, reesepieces.length - 10 );
+
+ assertEquals( "Expected", expected, actual );
+ }
+}
Propchange:
archiva/sandbox/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksumTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
archiva/sandbox/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksumTest.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified:
archiva/sandbox/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksummedFileTest.java
URL:
http://svn.apache.org/viewvc/archiva/sandbox/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksummedFileTest.java?rev=647378&r1=647377&r2=647378&view=diff
==============================================================================
---
archiva/sandbox/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksummedFileTest.java
(original)
+++
archiva/sandbox/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksummedFileTest.java
Fri Apr 11 22:20:47 2008
@@ -37,14 +37,39 @@
/** SHA1 checksum from www.ibiblio.org/maven2, incuding file path */
private static final String SERVLETAPI_SHA1 =
"bcc82975c0f9c681fcb01cc38504c992553e93ba";
- public void testCalculateChecksumSha1()
+ private File createTestableJar( String filename )
throws IOException
{
- File testfile = getTestResource( "examples/redback-authz-open.jar" );
- ChecksummedFile checksummedFile = new ChecksummedFile( testfile );
- String expectedChecksum = "2bb14b388973351b0a4dfe11d171965f59cc61a1";
- String actualChecksum = checksummedFile.calculateChecksum(
ChecksumAlgorithm.SHA1 );
- assertEquals( expectedChecksum, actualChecksum );
+ File srcFile = getTestResource( filename );
+ File destFile = new File( getTestOutputDir(), srcFile.getName() );
+ FileUtils.copyFile( srcFile, destFile );
+ return destFile;
+ }
+
+ private File createTestableJar( String filename, boolean copySha1, boolean
copyMd5 )
+ throws IOException
+ {
+ File srcFile = getTestResource( filename );
+ File jarFile = new File( getTestOutputDir(), srcFile.getName() );
+ FileUtils.copyFile( srcFile, jarFile );
+
+ if ( copySha1 )
+ {
+ File srcSha1 = new File( srcFile.getAbsolutePath() + ".sha1" );
+ File sha1File = new File( jarFile.getAbsolutePath() + ".sha1" );
+
+ FileUtils.copyFile( srcSha1, sha1File );
+ }
+
+ if ( copyMd5 )
+ {
+ File srcMd5 = new File( srcFile.getAbsolutePath() + ".md5" );
+ File md5File = new File( jarFile.getAbsolutePath() + ".md5" );
+
+ FileUtils.copyFile( srcMd5, md5File );
+ }
+
+ return jarFile;
}
public void testCalculateChecksumMd5()
@@ -57,6 +82,111 @@
assertEquals( expectedChecksum, actualChecksum );
}
+ public void testCalculateChecksumSha1()
+ throws IOException
+ {
+ File testfile = getTestResource( "examples/redback-authz-open.jar" );
+ ChecksummedFile checksummedFile = new ChecksummedFile( testfile );
+ String expectedChecksum = "2bb14b388973351b0a4dfe11d171965f59cc61a1";
+ String actualChecksum = checksummedFile.calculateChecksum(
ChecksumAlgorithm.SHA1 );
+ assertEquals( expectedChecksum, actualChecksum );
+ }
+
+ public void testCreateChecksum()
+ throws IOException
+ {
+ File testableJar = createTestableJar(
"examples/redback-authz-open.jar" );
+ ChecksummedFile checksummedFile = new ChecksummedFile( testableJar );
+ checksummedFile.createChecksum( ChecksumAlgorithm.SHA1 );
+ File hashFile = checksummedFile.getChecksumFile(
ChecksumAlgorithm.SHA1 );
+ assertTrue( "ChecksumAlgorithm file should exist.", hashFile.exists()
);
+ String hashContents = FileUtils.readFileToString( hashFile );
+ hashContents = StringUtils.trim( hashContents );
+ assertEquals( "2bb14b388973351b0a4dfe11d171965f59cc61a1
redback-authz-open.jar", hashContents );
+ }
+
+ public void testFixChecksum()
+ throws IOException
+ {
+ File jarFile = createTestableJar( "examples/redback-authz-open.jar" );
+ File sha1File = new File( jarFile.getAbsolutePath() + ".sha1" );
+
+ // A typical scenario seen in the wild.
+ FileUtils.writeStringToFile( sha1File, "sha1sum:
redback-authz-open.jar: No such file or directory" );
+
+ ChecksummedFile checksummedFile = new ChecksummedFile( jarFile );
+ assertFalse( "ChecksummedFile.isValid(SHA1) == false",
checksummedFile.isValidChecksum( ChecksumAlgorithm.SHA1 ) );
+
+ boolean fixed = checksummedFile.fixChecksums( new ChecksumAlgorithm[]
{ ChecksumAlgorithm.SHA1 } );
+ assertTrue( "ChecksummedFile.fixChecksums() == true", fixed );
+
+ assertTrue( "ChecksummedFile.isValid(SHA1) == true",
checksummedFile.isValidChecksum( ChecksumAlgorithm.SHA1 ) );
+ }
+
+ public void testGetChecksumFile()
+ {
+ ChecksummedFile checksummedFile = new ChecksummedFile( new File(
"test.jar" ) );
+ assertEquals( "test.jar.sha1", checksummedFile.getChecksumFile(
ChecksumAlgorithm.SHA1 ).getName() );
+ }
+
+ public void testIsValidChecksum()
+ throws IOException
+ {
+ File jarFile = createTestableJar( "examples/redback-authz-open.jar",
true, false );
+
+ ChecksummedFile checksummedFile = new ChecksummedFile( jarFile );
+ assertTrue( "ChecksummedFile.isValid(SHA1)",
checksummedFile.isValidChecksum( ChecksumAlgorithm.SHA1 ) );
+ }
+
+ public void testIsValidChecksumInvalidSha1Format()
+ throws IOException
+ {
+ File jarFile = createTestableJar( "examples/redback-authz-open.jar" );
+ File sha1File = new File( jarFile.getAbsolutePath() + ".sha1" );
+
+ // A typical scenario seen in the wild.
+ FileUtils.writeStringToFile( sha1File, "sha1sum:
redback-authz-open.jar: No such file or directory" );
+
+ ChecksummedFile checksummedFile = new ChecksummedFile( jarFile );
+ assertFalse( "ChecksummedFile.isValid(SHA1)",
checksummedFile.isValidChecksum( ChecksumAlgorithm.SHA1 ) );
+
+ }
+
+ public void testIsValidChecksumNoChecksumFiles()
+ throws IOException
+ {
+ File jarFile = createTestableJar( "examples/redback-authz-open.jar",
false, false );
+
+ ChecksummedFile checksummedFile = new ChecksummedFile( jarFile );
+ assertTrue( "ChecksummedFile.isValid(SHA1,MD5)",
checksummedFile.isValidChecksums( new ChecksumAlgorithm[] {
+ ChecksumAlgorithm.SHA1,
+ ChecksumAlgorithm.MD5 } ) );
+
+ }
+
+ public void testIsValidChecksumSha1AndMd5()
+ throws IOException
+ {
+ File jarFile = createTestableJar( "examples/redback-authz-open.jar",
true, true );
+
+ ChecksummedFile checksummedFile = new ChecksummedFile( jarFile );
+ assertTrue( "ChecksummedFile.isValid(SHA1,MD5)",
checksummedFile.isValidChecksums( new ChecksumAlgorithm[] {
+ ChecksumAlgorithm.SHA1,
+ ChecksumAlgorithm.MD5 } ) );
+ }
+
+ public void testIsValidChecksumSha1NoMd5()
+ throws IOException
+ {
+ File jarFile = createTestableJar( "examples/redback-authz-open.jar",
true, false );
+
+ ChecksummedFile checksummedFile = new ChecksummedFile( jarFile );
+ assertTrue( "ChecksummedFile.isValid(SHA1)",
checksummedFile.isValidChecksums( new ChecksumAlgorithm[] {
+ ChecksumAlgorithm.SHA1,
+ ChecksumAlgorithm.MD5 } ) );
+
+ }
+
public void testParseChecksum()
throws IOException
{
@@ -66,7 +196,7 @@
File testfile = getTestResource( "examples/redback-authz-open.jar" );
ChecksummedFile checksummedFile = new ChecksummedFile( testfile );
String s = checksummedFile.parseChecksum( expected,
ChecksumAlgorithm.SHA1,
-
"servletapi/servletapi/2.4/servletapi-2.4.pom" );
+
"servletapi/servletapi/2.4/servletapi-2.4.pom" );
assertEquals( "Checksum doesn't match", SERVLETAPI_SHA1, s );
}
@@ -78,7 +208,7 @@
File testfile = getTestResource( "examples/redback-authz-open.jar" );
ChecksummedFile checksummedFile = new ChecksummedFile( testfile );
String s = checksummedFile.parseChecksum( expected,
ChecksumAlgorithm.SHA1,
-
"servletapi/servletapi/2.4/servletapi-2.4.pom" );
+
"servletapi/servletapi/2.4/servletapi-2.4.pom" );
assertEquals( "Checksum doesn't match", SERVLETAPI_SHA1, s );
}
@@ -89,36 +219,8 @@
File testfile = getTestResource( "examples/redback-authz-open.jar" );
ChecksummedFile checksummedFile = new ChecksummedFile( testfile );
String s = checksummedFile.parseChecksum( expected,
ChecksumAlgorithm.SHA1,
-
"servletapi/servletapi/2.4/servletapi-2.4.pom" );
+
"servletapi/servletapi/2.4/servletapi-2.4.pom" );
assertEquals( "Checksum doesn't match", SERVLETAPI_SHA1, s );
- }
-
- public void testGetChecksumFile()
- {
- ChecksummedFile checksummedFile = new ChecksummedFile( new
File("test.jar") );
- assertEquals( "test.jar.sha1", checksummedFile.getChecksumFile(
ChecksumAlgorithm.SHA1 ).getName() );
- }
-
- public void testCreateChecksum()
- throws IOException
- {
- File testableJar = createTestableJar(
"examples/redback-authz-open.jar" );
- ChecksummedFile checksummedFile = new ChecksummedFile( testableJar );
- checksummedFile.createChecksum( ChecksumAlgorithm.SHA1 );
- File hashFile = checksummedFile.getChecksumFile(
ChecksumAlgorithm.SHA1 );
- assertTrue( "ChecksumAlgorithm file should exist.", hashFile.exists()
);
- String hashContents = FileUtils.readFileToString( hashFile );
- hashContents = StringUtils.trim( hashContents );
- assertEquals( "2bb14b388973351b0a4dfe11d171965f59cc61a1
redback-authz-open.jar", hashContents );
- }
-
- private File createTestableJar( String filename )
- throws IOException
- {
- File srcFile = getTestResource( filename );
- File destFile = new File( getTestOutputDir(), srcFile.getName() );
- FileUtils.copyFile( srcFile, destFile );
- return destFile;
}
}