Author: brett
Date: Thu Jan 26 21:30:30 2006
New Revision: 372742

URL: http://svn.apache.org/viewcvs?rev=372742&view=rev
Log:
[MRM-9] improve checksum reading

Added:
    
maven/repository-manager/trunk/maven-repository-converter/src/test/source-repository/test/jars/v4artifact-1.0.0.jar.md5
    
maven/repository-manager/trunk/maven-repository-converter/src/test/source-repository/test/jars/v4artifact-1.0.0.jar.sha1
    maven/repository-manager/trunk/maven-repository-utils/src/test/
    maven/repository-manager/trunk/maven-repository-utils/src/test/java/
    maven/repository-manager/trunk/maven-repository-utils/src/test/java/org/
    
maven/repository-manager/trunk/maven-repository-utils/src/test/java/org/apache/
    
maven/repository-manager/trunk/maven-repository-utils/src/test/java/org/apache/maven/
    
maven/repository-manager/trunk/maven-repository-utils/src/test/java/org/apache/maven/repository/
    
maven/repository-manager/trunk/maven-repository-utils/src/test/java/org/apache/maven/repository/digest/
    
maven/repository-manager/trunk/maven-repository-utils/src/test/java/org/apache/maven/repository/digest/DigesterTest.java
   (with props)
    maven/repository-manager/trunk/maven-repository-utils/src/test/resources/
    
maven/repository-manager/trunk/maven-repository-utils/src/test/resources/test-file.txt
   (with props)
Modified:
    
maven/repository-manager/trunk/maven-repository-converter/src/test/java/org/apache/maven/repository/converter/RepositoryConverterTest.java
    
maven/repository-manager/trunk/maven-repository-utils/src/main/java/org/apache/maven/repository/digest/DefaultDigester.java

Modified: 
maven/repository-manager/trunk/maven-repository-converter/src/test/java/org/apache/maven/repository/converter/RepositoryConverterTest.java
URL: 
http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-converter/src/test/java/org/apache/maven/repository/converter/RepositoryConverterTest.java?rev=372742&r1=372741&r2=372742&view=diff
==============================================================================
--- 
maven/repository-manager/trunk/maven-repository-converter/src/test/java/org/apache/maven/repository/converter/RepositoryConverterTest.java
 (original)
+++ 
maven/repository-manager/trunk/maven-repository-converter/src/test/java/org/apache/maven/repository/converter/RepositoryConverterTest.java
 Thu Jan 26 21:30:30 2006
@@ -111,10 +111,12 @@
                                              
targetRepository.pathOfRemoteRepositoryMetadata( versionMetadata ) );
         versionMetadataFile.delete();
 
+        File artifactFile = new File( targetRepository.getBasedir(), 
targetRepository.pathOf( artifact ) );
+        artifactFile.delete();
+
         repositoryConverter.convert( artifact, targetRepository, reporter );
         checkSuccess();
 
-        File artifactFile = new File( targetRepository.getBasedir(), 
targetRepository.pathOf( artifact ) );
         assertTrue( "Check artifact created", artifactFile.exists() );
         assertTrue( "Check artifact matches", FileUtils.contentEquals( 
artifactFile, artifact.getFile() ) );
 

Added: 
maven/repository-manager/trunk/maven-repository-converter/src/test/source-repository/test/jars/v4artifact-1.0.0.jar.md5
URL: 
http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-converter/src/test/source-repository/test/jars/v4artifact-1.0.0.jar.md5?rev=372742&view=auto
==============================================================================
--- 
maven/repository-manager/trunk/maven-repository-converter/src/test/source-repository/test/jars/v4artifact-1.0.0.jar.md5
 (added)
+++ 
maven/repository-manager/trunk/maven-repository-converter/src/test/source-repository/test/jars/v4artifact-1.0.0.jar.md5
 Thu Jan 26 21:30:30 2006
@@ -0,0 +1 @@
+4289bbdd6fba75013b317b2f9a540736 *v4artifact-1.0.0.jar

Added: 
maven/repository-manager/trunk/maven-repository-converter/src/test/source-repository/test/jars/v4artifact-1.0.0.jar.sha1
URL: 
http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-converter/src/test/source-repository/test/jars/v4artifact-1.0.0.jar.sha1?rev=372742&view=auto
==============================================================================
--- 
maven/repository-manager/trunk/maven-repository-converter/src/test/source-repository/test/jars/v4artifact-1.0.0.jar.sha1
 (added)
+++ 
maven/repository-manager/trunk/maven-repository-converter/src/test/source-repository/test/jars/v4artifact-1.0.0.jar.sha1
 Thu Jan 26 21:30:30 2006
@@ -0,0 +1 @@
+e3e4159da65a4257f0bffb7cac8e3e78241a4dca *v4artifact-1.0.0.jar

Modified: 
maven/repository-manager/trunk/maven-repository-utils/src/main/java/org/apache/maven/repository/digest/DefaultDigester.java
URL: 
http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-utils/src/main/java/org/apache/maven/repository/digest/DefaultDigester.java?rev=372742&r1=372741&r2=372742&view=diff
==============================================================================
--- 
maven/repository-manager/trunk/maven-repository-utils/src/main/java/org/apache/maven/repository/digest/DefaultDigester.java
 (original)
+++ 
maven/repository-manager/trunk/maven-repository-utils/src/main/java/org/apache/maven/repository/digest/DefaultDigester.java
 Thu Jan 26 21:30:30 2006
@@ -8,6 +8,8 @@
 import java.io.InputStream;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /*
  * Copyright 2005-2006 The Apache Software Foundation.
@@ -69,9 +71,46 @@
     public boolean verifyChecksum( File file, String checksum, String 
algorithm )
         throws NoSuchAlgorithmException, IOException
     {
-        //Create checksum for jar file
-        String sum = createChecksum( file, algorithm );
-        return checksum.toUpperCase().equals( sum.toUpperCase() );
+        boolean result = true;
+
+        String trimmedChecksum = checksum.replace( '\n', ' ' ).trim();
+        // Free-BSD / openssl
+        Matcher m =
+            Pattern.compile( algorithm.replaceAll( "-", "" ) + 
"\\s*\\((.*?)\\)\\s*=\\s*([a-zA-Z0-9]+)" ).matcher(
+                trimmedChecksum );
+        if ( m.matches() )
+        {
+            String filename = m.group( 1 );
+            if ( !filename.equals( file.getName() ) )
+            {
+                // TODO: provide better warning
+                result = false;
+            }
+            trimmedChecksum = m.group( 2 );
+        }
+        else
+        {
+            // GNU tools
+            m = Pattern.compile( "([a-zA-Z0-9]+)\\s\\*?(.+)" ).matcher( 
trimmedChecksum );
+            if ( m.matches() )
+            {
+                String filename = m.group( 2 );
+                if ( !filename.equals( file.getName() ) )
+                {
+                    // TODO: provide better warning
+                    result = false;
+                }
+                trimmedChecksum = m.group( 1 );
+            }
+        }
+
+        if ( result )
+        {
+            //Create checksum for jar file
+            String sum = createChecksum( file, algorithm );
+            result = trimmedChecksum.toUpperCase().equals( sum.toUpperCase() );
+        }
+        return result;
     }
 
     /**

Added: 
maven/repository-manager/trunk/maven-repository-utils/src/test/java/org/apache/maven/repository/digest/DigesterTest.java
URL: 
http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-utils/src/test/java/org/apache/maven/repository/digest/DigesterTest.java?rev=372742&view=auto
==============================================================================
--- 
maven/repository-manager/trunk/maven-repository-utils/src/test/java/org/apache/maven/repository/digest/DigesterTest.java
 (added)
+++ 
maven/repository-manager/trunk/maven-repository-utils/src/test/java/org/apache/maven/repository/digest/DigesterTest.java
 Thu Jan 26 21:30:30 2006
@@ -0,0 +1,92 @@
+package org.apache.maven.repository.digest;
+
+/*
+ * Copyright 2005-2006 The Apache Software Foundation.
+ *
+ * Licensed 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 junit.framework.TestCase;
+
+import java.io.File;
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * Test the digester.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Brett Porter</a>
+ */
+public class DigesterTest
+    extends TestCase
+{
+    private Digester digester = new DefaultDigester();
+
+    private static final String MD5 = "adbc688ce77fa2aece4bb72cad9f98ba";
+
+    private static final String SHA1 = 
"2a7b459938e12a2dc35d1bf6cff35e9c2b592fa9";
+
+    private static final String WRONG_SHA1 = 
"4d8703779816556cdb8be7f6bb5c954f4b5730e2";
+
+    public void testBareDigestFormat()
+        throws NoSuchAlgorithmException, IOException
+    {
+        File file = new File( getClass().getResource( "/test-file.txt" 
).getPath() );
+        assertTrue( "test bare format MD5", digester.verifyChecksum( file, 
MD5, Digester.MD5 ) );
+        assertTrue( "test bare format SHA1", digester.verifyChecksum( file, 
SHA1, Digester.SHA1 ) );
+
+        assertFalse( "test wrong sha1", digester.verifyChecksum( file, 
WRONG_SHA1, Digester.SHA1 ) );
+    }
+
+    public void testOpensslDigestFormat()
+        throws NoSuchAlgorithmException, IOException
+    {
+        File file = new File( getClass().getResource( "/test-file.txt" 
).getPath() );
+        assertTrue( "test openssl format MD5",
+                    digester.verifyChecksum( file, "MD5(test-file.txt)= " + 
MD5, Digester.MD5 ) );
+        assertTrue( "test openssl format SHA1",
+                    digester.verifyChecksum( file, "SHA1(test-file.txt)= " + 
SHA1, Digester.SHA1 ) );
+
+        assertTrue( "test freebsd format MD5",
+                    digester.verifyChecksum( file, "MD5 (test-file.txt) = " + 
MD5, Digester.MD5 ) );
+        assertTrue( "test freebsd format SHA1",
+                    digester.verifyChecksum( file, "SHA1 (test-file.txt) = " + 
SHA1, Digester.SHA1 ) );
+
+        assertFalse( "test wrong filename", digester.verifyChecksum( file, 
"SHA1 (FOO) = " + SHA1, Digester.SHA1 ) );
+        assertFalse( "test wrong sha1",
+                     digester.verifyChecksum( file, "SHA1 (test-file.txt) = " 
+ WRONG_SHA1, Digester.SHA1 ) );
+    }
+
+    public void testGnuDigestFormat()
+        throws NoSuchAlgorithmException, IOException
+    {
+        File file = new File( getClass().getResource( "/test-file.txt" 
).getPath() );
+        assertTrue( "test GNU format MD5", digester.verifyChecksum( file, MD5 
+ " *test-file.txt", Digester.MD5 ) );
+        assertTrue( "test GNU format SHA1", digester.verifyChecksum( file, 
SHA1 + " *test-file.txt", Digester.SHA1 ) );
+
+        assertTrue( "test GNU text format MD5", digester.verifyChecksum( file, 
MD5 + " test-file.txt", Digester.MD5 ) );
+        assertTrue( "test GNU text format SHA1",
+                    digester.verifyChecksum( file, SHA1 + " test-file.txt", 
Digester.SHA1 ) );
+
+        assertFalse( "test wrong filename", digester.verifyChecksum( file, 
SHA1 + " FOO", Digester.SHA1 ) );
+        assertFalse( "test wrong sha1", digester.verifyChecksum( file, 
WRONG_SHA1 + " test-file.txt", Digester.SHA1 ) );
+    }
+
+    public void testUntrimmedContent()
+        throws NoSuchAlgorithmException, IOException
+    {
+        File file = new File( getClass().getResource( "/test-file.txt" 
).getPath() );
+        assertTrue( "test untrimmed GNU format SHA1",
+                    digester.verifyChecksum( file, SHA1 + " *test-file.txt 
\n", Digester.SHA1 ) );
+    }
+}

Propchange: 
maven/repository-manager/trunk/maven-repository-utils/src/test/java/org/apache/maven/repository/digest/DigesterTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/repository-manager/trunk/maven-repository-utils/src/test/java/org/apache/maven/repository/digest/DigesterTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: 
maven/repository-manager/trunk/maven-repository-utils/src/test/resources/test-file.txt
URL: 
http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-utils/src/test/resources/test-file.txt?rev=372742&view=auto
==============================================================================
--- 
maven/repository-manager/trunk/maven-repository-utils/src/test/resources/test-file.txt
 (added)
+++ 
maven/repository-manager/trunk/maven-repository-utils/src/test/resources/test-file.txt
 Thu Jan 26 21:30:30 2006
@@ -0,0 +1 @@
+the quick brown fox, and all that
\ No newline at end of file

Propchange: 
maven/repository-manager/trunk/maven-repository-utils/src/test/resources/test-file.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/repository-manager/trunk/maven-repository-utils/src/test/resources/test-file.txt
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision


Reply via email to