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