mirror of https://github.com/apache/archiva.git
[MRM-1212]
o move fixing of incorrect checksums to ArtifactMissingChecksumConsumer o added tests git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@798059 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
71b644e878
commit
a4bd8b9c5a
|
@ -19,6 +19,8 @@ package org.apache.maven.archiva.consumers.core;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import org.apache.archiva.checksum.ChecksumAlgorithm;
|
||||
import org.apache.archiva.checksum.ChecksummedFile;
|
||||
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
|
||||
import org.apache.maven.archiva.configuration.ConfigurationNames;
|
||||
import org.apache.maven.archiva.configuration.FileTypes;
|
||||
|
@ -26,9 +28,6 @@ import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
|||
import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
|
||||
import org.apache.maven.archiva.consumers.ConsumerException;
|
||||
import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;
|
||||
import org.codehaus.plexus.digest.ChecksumFile;
|
||||
import org.codehaus.plexus.digest.Digester;
|
||||
import org.codehaus.plexus.digest.DigesterException;
|
||||
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
|
||||
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
|
||||
import org.codehaus.plexus.registry.Registry;
|
||||
|
@ -41,14 +40,14 @@ import java.util.Date;
|
|||
import java.util.List;
|
||||
|
||||
/**
|
||||
* ArtifactMissingChecksumsConsumer - Create missing checksums for the artifact.
|
||||
* ArtifactMissingChecksumsConsumer - Create missing and/or fix invalid checksums for the artifact.
|
||||
*
|
||||
* @version $Id$
|
||||
*/
|
||||
public class ArtifactMissingChecksumsConsumer
|
||||
extends AbstractMonitoredConsumer
|
||||
implements KnownRepositoryContentConsumer, RegistryListener, Initializable
|
||||
{
|
||||
{
|
||||
private String id;
|
||||
|
||||
private String description;
|
||||
|
@ -57,36 +56,26 @@ public class ArtifactMissingChecksumsConsumer
|
|||
|
||||
private FileTypes filetypes;
|
||||
|
||||
private Digester digestSha1;
|
||||
|
||||
private Digester digestMd5;
|
||||
|
||||
private ChecksumFile checksum;
|
||||
private ChecksummedFile checksum;
|
||||
|
||||
private static final String TYPE_CHECKSUM_NOT_FILE = "checksum-bad-not-file";
|
||||
|
||||
|
||||
private static final String TYPE_CHECKSUM_CANNOT_CALC = "checksum-calc-failure";
|
||||
|
||||
|
||||
private static final String TYPE_CHECKSUM_CANNOT_CREATE = "checksum-create-failure";
|
||||
|
||||
private File repositoryDir;
|
||||
|
||||
private List<String> includes = new ArrayList<String>();
|
||||
|
||||
|
||||
public ArtifactMissingChecksumsConsumer(String id,
|
||||
String description,
|
||||
ArchivaConfiguration configuration,
|
||||
FileTypes filetypes,
|
||||
Digester digestSha1,
|
||||
Digester digestMd5,
|
||||
ChecksumFile checksum) {
|
||||
FileTypes filetypes) {
|
||||
this.id = id;
|
||||
this.description = description;
|
||||
this.configuration = configuration;
|
||||
this.filetypes = filetypes;
|
||||
this.digestSha1 = digestSha1;
|
||||
this.digestMd5 = digestMd5;
|
||||
this.checksum = checksum;
|
||||
}
|
||||
|
||||
public String getId()
|
||||
|
@ -128,37 +117,51 @@ public class ArtifactMissingChecksumsConsumer
|
|||
public void processFile( String path )
|
||||
throws ConsumerException
|
||||
{
|
||||
createIfMissing( path, digestSha1 );
|
||||
createIfMissing( path, digestMd5 );
|
||||
createFixChecksum( path, new ChecksumAlgorithm[] { ChecksumAlgorithm.SHA1 } );
|
||||
createFixChecksum( path, new ChecksumAlgorithm[] { ChecksumAlgorithm.MD5 } );
|
||||
}
|
||||
|
||||
private void createIfMissing( String path, Digester digester )
|
||||
|
||||
private void createFixChecksum( String path, ChecksumAlgorithm checksumAlgorithm[] )
|
||||
{
|
||||
File checksumFile = new File( this.repositoryDir, path + digester.getFilenameExtension() );
|
||||
if ( !checksumFile.exists() )
|
||||
File artifactFile = new File( this.repositoryDir, path );
|
||||
File checksumFile = new File( this.repositoryDir, path + checksumAlgorithm[0].getExt() );
|
||||
|
||||
if( checksumFile.exists() )
|
||||
{
|
||||
checksum = new ChecksummedFile( artifactFile );
|
||||
try
|
||||
{
|
||||
checksum.createChecksum( new File( this.repositoryDir, path ), digester );
|
||||
triggerConsumerInfo( "Created missing checksum file " + checksumFile.getAbsolutePath() );
|
||||
}
|
||||
catch ( DigesterException e )
|
||||
{
|
||||
triggerConsumerError( TYPE_CHECKSUM_CANNOT_CALC,
|
||||
"Cannot calculate checksum for file " + checksumFile + ": " + e.getMessage() );
|
||||
if( !checksum.isValidChecksum( checksumAlgorithm[0] ) )
|
||||
{
|
||||
checksum.fixChecksums( checksumAlgorithm );
|
||||
triggerConsumerInfo( "Fixed checksum file " + checksumFile.getAbsolutePath() );
|
||||
}
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
triggerConsumerError( TYPE_CHECKSUM_CANNOT_CREATE,
|
||||
"Cannot create checksum for file " + checksumFile + ": " + e.getMessage() );
|
||||
triggerConsumerError( TYPE_CHECKSUM_CANNOT_CALC, "Cannot calculate checksum for file " + checksumFile +
|
||||
": " + e.getMessage() );
|
||||
}
|
||||
}
|
||||
else if ( !checksumFile.isFile() )
|
||||
else if( !checksumFile.exists() )
|
||||
{
|
||||
checksum = new ChecksummedFile( artifactFile );
|
||||
try
|
||||
{
|
||||
checksum.createChecksum( checksumAlgorithm[0] );
|
||||
triggerConsumerInfo( "Created missing checksum file " + checksumFile.getAbsolutePath() );
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
triggerConsumerError( TYPE_CHECKSUM_CANNOT_CREATE, "Cannot create checksum for file " + checksumFile +
|
||||
": " + e.getMessage() );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
triggerConsumerWarning( TYPE_CHECKSUM_NOT_FILE,
|
||||
"Checksum file " + checksumFile.getAbsolutePath() + " is not a file." );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<value>create-missing-checksums</value>
|
||||
</constructor-arg>
|
||||
<constructor-arg>
|
||||
<value>Create Missing Checksums (.sha1, .md5)</value>
|
||||
<value>Create Missing and/or Fix Invalid Checksums (.sha1, .md5)</value>
|
||||
</constructor-arg>
|
||||
<constructor-arg>
|
||||
<ref bean="archivaConfiguration"/>
|
||||
|
@ -16,14 +16,5 @@
|
|||
<constructor-arg>
|
||||
<ref bean="fileTypes"/>
|
||||
</constructor-arg>
|
||||
<constructor-arg>
|
||||
<ref bean="digester#sha1"/>
|
||||
</constructor-arg>
|
||||
<constructor-arg>
|
||||
<ref bean="digester#md5"/>
|
||||
</constructor-arg>
|
||||
<constructor-arg>
|
||||
<ref bean="checksumFile"/>
|
||||
</constructor-arg>
|
||||
</bean>
|
||||
</beans>
|
|
@ -1,5 +1,12 @@
|
|||
package org.apache.maven.archiva.consumers.core;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Calendar;
|
||||
|
||||
import org.apache.archiva.checksum.ChecksumAlgorithm;
|
||||
import org.apache.archiva.checksum.ChecksummedFile;
|
||||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
|
@ -22,12 +29,62 @@ package org.apache.maven.archiva.consumers.core;
|
|||
public class ArtifactMissingChecksumsConsumerTest
|
||||
extends AbstractArtifactConsumerTest
|
||||
{
|
||||
private ManagedRepositoryConfiguration repoConfig;
|
||||
|
||||
@Override
|
||||
protected void setUp()
|
||||
throws Exception
|
||||
{
|
||||
super.setUp();
|
||||
|
||||
repoConfig = new ManagedRepositoryConfiguration();
|
||||
repoConfig.setId( "test-repo" );
|
||||
repoConfig.setName( "Test Repository" );
|
||||
repoConfig.setLayout( "default" );
|
||||
repoConfig.setLocation( new File( getBasedir(), "target/test-classes/test-repo/" ).getPath() );
|
||||
|
||||
consumer = (ArtifactMissingChecksumsConsumer) lookup( "artifactMissingChecksumsConsumer" );
|
||||
}
|
||||
|
||||
public void testNoExistingChecksums()
|
||||
throws Exception
|
||||
{
|
||||
String path = "/no-checksums-artifact/1.0/no-checksums-artifact-1.0.jar";
|
||||
|
||||
File sha1File = new File( repoConfig.getLocation(), path + ".sha1" );
|
||||
File md5File = new File( repoConfig.getLocation(), path + ".md5" );
|
||||
|
||||
assertFalse( sha1File.exists() );
|
||||
assertFalse( md5File.exists() );
|
||||
|
||||
consumer.beginScan( repoConfig, Calendar.getInstance().getTime() );
|
||||
|
||||
consumer.processFile( path );
|
||||
|
||||
assertTrue( sha1File.exists() );
|
||||
assertTrue( md5File.exists() );
|
||||
}
|
||||
|
||||
public void testExistingIncorrectChecksums()
|
||||
throws Exception
|
||||
{
|
||||
String path = "/incorrect-checksums/1.0/incorrect-checksums-1.0.jar";
|
||||
|
||||
File sha1File = new File( repoConfig.getLocation(), path + ".sha1" );
|
||||
File md5File = new File( repoConfig.getLocation(), path + ".md5" );
|
||||
|
||||
ChecksummedFile checksum = new ChecksummedFile( new File( repoConfig.getLocation(), path ) );
|
||||
|
||||
assertTrue( sha1File.exists() );
|
||||
assertTrue( md5File.exists() );
|
||||
assertFalse( checksum.isValidChecksums( new ChecksumAlgorithm[] { ChecksumAlgorithm.MD5, ChecksumAlgorithm.SHA1 } ) );
|
||||
|
||||
consumer.beginScan( repoConfig, Calendar.getInstance().getTime() );
|
||||
|
||||
consumer.processFile( path );
|
||||
|
||||
assertTrue( sha1File.exists() );
|
||||
assertTrue( md5File.exists() );
|
||||
assertTrue( checksum.isValidChecksums( new ChecksumAlgorithm[] { ChecksumAlgorithm.MD5, ChecksumAlgorithm.SHA1 } ) );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
d41d8cd98f00b204e9800998ecf8427e correct-checksums-1.0.jar
|
|
@ -0,0 +1 @@
|
|||
da39a3ee5e6b4b0d3255bfef95601890afd80709
|
|
@ -0,0 +1 @@
|
|||
902a360ecad98a34b59863c1e65bcf71 incorrect-checksums-1.0.jar
|
|
@ -0,0 +1 @@
|
|||
dcab88fc2a043c2479a6de676a2f8179e9ea2167
|
Loading…
Reference in New Issue