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;
     }
 
 }


Reply via email to