Browse Source

[MRM-9] improve checksum reading

git-svn-id: https://svn.apache.org/repos/asf/maven/repository-manager/trunk@372742 13f79535-47bb-0310-9956-ffa450edef68
tags/archiva-0.9-alpha-1
Brett Porter 18 years ago
parent
commit
1be6c22bce

+ 3
- 1
maven-repository-converter/src/test/java/org/apache/maven/repository/converter/RepositoryConverterTest.java View File

@@ -111,10 +111,12 @@ public class RepositoryConverterTest
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() ) );


+ 1
- 0
maven-repository-converter/src/test/source-repository/test/jars/v4artifact-1.0.0.jar.md5 View File

@@ -0,0 +1 @@
4289bbdd6fba75013b317b2f9a540736 *v4artifact-1.0.0.jar

+ 1
- 0
maven-repository-converter/src/test/source-repository/test/jars/v4artifact-1.0.0.jar.sha1 View File

@@ -0,0 +1 @@
e3e4159da65a4257f0bffb7cac8e3e78241a4dca *v4artifact-1.0.0.jar

+ 42
- 3
maven-repository-utils/src/main/java/org/apache/maven/repository/digest/DefaultDigester.java View File

@@ -8,6 +8,8 @@ import java.io.IOException;
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 class DefaultDigester
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;
}

/**

+ 92
- 0
maven-repository-utils/src/test/java/org/apache/maven/repository/digest/DigesterTest.java View File

@@ -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:brett@apache.org">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 ) );
}
}

+ 1
- 0
maven-repository-utils/src/test/resources/test-file.txt View File

@@ -0,0 +1 @@
the quick brown fox, and all that

Loading…
Cancel
Save