blob: b5be0d81b51fdac0fcccab5bd14ea9a2243e3f1c [file] [log] [blame]
package org.apache.archiva.web.action;
/*
* 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 com.opensymphony.xwork2.Action;
import net.sf.beanlib.provider.replicator.BeanReplicator;
import org.apache.archiva.admin.model.admin.ArchivaAdministration;
import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
import org.apache.archiva.audit.AuditEvent;
import org.apache.archiva.audit.AuditListener;
import org.apache.archiva.checksum.ChecksumAlgorithm;
import org.apache.archiva.checksum.ChecksummedFile;
import org.apache.archiva.scheduler.ArchivaTaskScheduler;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.archiva.common.utils.FileUtil;
import org.apache.archiva.model.ArchivaRepositoryMetadata;
import org.apache.archiva.model.SnapshotVersion;
import org.apache.archiva.repository.ManagedRepositoryContent;
import org.apache.archiva.repository.RepositoryContentFactory;
import org.apache.archiva.repository.RepositoryNotFoundException;
import org.apache.archiva.repository.content.ManagedDefaultRepositoryContent;
import org.apache.archiva.repository.metadata.MetadataTools;
import org.apache.archiva.repository.metadata.RepositoryMetadataReader;
import org.easymock.MockControl;
import org.easymock.classextension.MockClassControl;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
/**
* UploadActionTest
*/
public class UploadActionTest
extends AbstractActionTestCase
{
private UploadAction uploadAction;
private RepositoryContentFactory repoFactory;
private MockControl repoFactoryControl;
private MockControl managedRepoAdminControl;
private ManagedRepositoryAdmin managedRepositoryAdmin;
private MockControl archivaAdminControl;
private ArchivaAdministration archivaAdministration;
private static final String REPOSITORY_ID = "test-repo";
private ManagedRepository managedRepository;
public void setUp()
throws Exception
{
super.setUp();
MockControl schedulerControl = MockControl.createControl( ArchivaTaskScheduler.class );
ArchivaTaskScheduler scheduler = (ArchivaTaskScheduler) schedulerControl.getMock();
repoFactoryControl = MockClassControl.createControl( RepositoryContentFactory.class );
repoFactory = (RepositoryContentFactory) repoFactoryControl.getMock();
managedRepoAdminControl = MockControl.createControl( ManagedRepositoryAdmin.class );
managedRepositoryAdmin = (ManagedRepositoryAdmin) managedRepoAdminControl.getMock();
archivaAdminControl = MockControl.createControl( ArchivaAdministration.class );
archivaAdministration = (ArchivaAdministration) archivaAdminControl.getMock();
uploadAction = new UploadAction();
uploadAction.setScheduler( scheduler );
uploadAction.setManagedRepositoryAdmin( managedRepositoryAdmin );
uploadAction.setArchivaAdministration( archivaAdministration );
uploadAction.setRepositoryFactory( repoFactory );
File testRepo = new File( FileUtil.getBasedir(), "target/test-classes/test-repo" );
testRepo.mkdirs();
assertTrue( testRepo.exists() );
managedRepository = new ManagedRepository();
managedRepository.setId( REPOSITORY_ID );
managedRepository.setLayout( "default" );
managedRepository.setLocation( testRepo.getPath() );
managedRepository.setName( REPOSITORY_ID );
managedRepository.setBlockRedeployments( true );
}
public void tearDown()
throws Exception
{
File testRepo = new File( this.managedRepository.getLocation() );
FileUtils.deleteDirectory( testRepo );
assertFalse( testRepo.exists() );
super.tearDown();
}
private void setUploadParameters( String version, String classifier, File artifact, File pomFile,
boolean generatePom )
{
uploadAction.setRepositoryId( REPOSITORY_ID );
uploadAction.setGroupId( "org.apache.archiva" );
uploadAction.setArtifactId( "artifact-upload" );
uploadAction.setVersion( version );
uploadAction.setPackaging( "jar" );
uploadAction.setClassifier( classifier );
uploadAction.setArtifact( artifact );
uploadAction.setPom( pomFile );
uploadAction.setGeneratePom( generatePom );
}
private void assertAllArtifactsIncludingSupportArtifactsArePresent( String repoLocation, String artifact,
String version )
{
assertTrue( new File( repoLocation,
"/org/apache/archiva/artifact-upload/" + version + "/" + artifact + ".jar" ).exists() );
assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact
+ ".jar.sha1" ).exists() );
assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact
+ ".jar.md5" ).exists() );
assertTrue( new File( repoLocation,
"/org/apache/archiva/artifact-upload/" + version + "/" + artifact + ".pom" ).exists() );
assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact
+ ".pom.sha1" ).exists() );
assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact
+ ".pom.md5" ).exists() );
assertTrue(
new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA ).exists() );
assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA
+ ".sha1" ).exists() );
assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA
+ ".md5" ).exists() );
}
private void verifyVersionMetadataChecksums( String repoLocation, String version )
throws IOException
{
ChecksummedFile checksum = new ChecksummedFile( new File( repoLocation,
"/org/apache/archiva/artifact-upload/" + version + "/"
+ MetadataTools.MAVEN_METADATA ) );
String sha1 = checksum.calculateChecksum( ChecksumAlgorithm.SHA1 );
String md5 = checksum.calculateChecksum( ChecksumAlgorithm.MD5 );
String contents = FileUtils.readFileToString( new File( repoLocation,
"/org/apache/archiva/artifact-upload/" + version + "/"
+ MetadataTools.MAVEN_METADATA + ".sha1" ) );
assertTrue( StringUtils.contains( contents, sha1 ) );
contents = FileUtils.readFileToString( new File( repoLocation,
"/org/apache/archiva/artifact-upload/" + version + "/"
+ MetadataTools.MAVEN_METADATA + ".md5" ) );
assertTrue( StringUtils.contains( contents, md5 ) );
}
private void verifyProjectMetadataChecksums( String repoLocation )
throws IOException
{
ChecksummedFile checksum = new ChecksummedFile(
new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA ) );
String sha1 = checksum.calculateChecksum( ChecksumAlgorithm.SHA1 );
String md5 = checksum.calculateChecksum( ChecksumAlgorithm.MD5 );
String contents = FileUtils.readFileToString(
new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA + ".sha1" ) );
assertTrue( StringUtils.contains( contents, sha1 ) );
contents = FileUtils.readFileToString(
new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA + ".md5" ) );
assertTrue( StringUtils.contains( contents, md5 ) );
}
private void verifyPomChecksums( String repoLocation, String artifact, String version )
throws IOException
{
ChecksummedFile checksum;
String sha1;
String md5;
String contents;
checksum = new ChecksummedFile(
new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact + ".pom" ) );
sha1 = checksum.calculateChecksum( ChecksumAlgorithm.SHA1 );
md5 = checksum.calculateChecksum( ChecksumAlgorithm.MD5 );
contents = FileUtils.readFileToString(
new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact + ".pom.sha1" ) );
assertTrue( StringUtils.contains( contents, sha1 ) );
contents = FileUtils.readFileToString(
new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact + ".pom.md5" ) );
assertTrue( StringUtils.contains( contents, md5 ) );
}
private void verifyArtifactChecksums( String repoLocation, String artifact, String version )
throws IOException
{
ChecksummedFile checksum = new ChecksummedFile(
new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact + ".jar" ) );
String sha1 = checksum.calculateChecksum( ChecksumAlgorithm.SHA1 );
String md5 = checksum.calculateChecksum( ChecksumAlgorithm.MD5 );
String contents = FileUtils.readFileToString(
new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact + ".jar.sha1" ) );
assertTrue( StringUtils.contains( contents, sha1 ) );
contents = FileUtils.readFileToString(
new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact + ".jar.md5" ) );
assertTrue( StringUtils.contains( contents, md5 ) );
}
private String getTimestamp( String[] artifactsList, int startIndex, int index )
{
int endIndex = -1;
String timestamp;
if ( artifactsList[index].contains( "jar" ) )
{
endIndex = artifactsList[index].indexOf( ".jar" );
}
else
{
endIndex = artifactsList[index].indexOf( ".pom" );
}
timestamp = artifactsList[index].substring( startIndex, endIndex );
return timestamp;
}
private MockControl mockAuditLogs( List<String> resources )
{
return mockAuditLogs( AuditEvent.UPLOAD_FILE, resources );
}
private MockControl mockAuditLogs( String action, List<String> resources )
{
MockControl control = MockControl.createControl( AuditListener.class );
AuditListener listener = (AuditListener) control.getMock();
boolean matcherSet = false;
for ( String resource : resources )
{
listener.auditEvent( new AuditEvent( REPOSITORY_ID, "guest", resource, action ) );
if ( !matcherSet )
{
control.setMatcher( new AuditEventArgumentsMatcher() );
matcherSet = true;
}
}
control.replay();
uploadAction.setAuditListeners( Collections.singletonList( listener ) );
return control;
}
public void testArtifactUploadWithPomSuccessful()
throws Exception
{
setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
"target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
new File( FileUtil.getBasedir(), "target/test-classes/upload-artifact-test/pom.xml" ),
false );
ManagedRepositoryContent content = new ManagedDefaultRepositoryContent();
content.setRepository( getManagedRepository() );
repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content );
managedRepoAdminControl.expectAndReturn( managedRepositoryAdmin.getManagedRepository( REPOSITORY_ID ),
getManagedRepository(), 1, 8 );
archivaAdminControl.expectAndReturn( archivaAdministration.getKnownContentConsumers(), new ArrayList<String>(),
2 );
managedRepoAdminControl.replay();
archivaAdminControl.replay();
repoFactoryControl.replay();
MockControl control = mockAuditLogs(
Arrays.asList( "org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar",
"org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom" ) );
String returnString = uploadAction.doUpload();
assertEquals( Action.SUCCESS, returnString );
repoFactoryControl.verify();
control.verify();
String repoLocation = getManagedRepository().getLocation();
assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, "artifact-upload-1.0", "1.0" );
verifyArtifactChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
verifyPomChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
verifyProjectMetadataChecksums( repoLocation );
}
public void testArtifactUploadWithClassifier()
throws Exception
{
setUploadParameters( "1.0", "tests", new File( FileUtil.getBasedir(),
"target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
new File( FileUtil.getBasedir(), "target/test-classes/upload-artifact-test/pom.xml" ),
false );
ManagedRepositoryContent content = new ManagedDefaultRepositoryContent();
content.setRepository( getManagedRepository() );
repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content );
managedRepoAdminControl.expectAndReturn( managedRepositoryAdmin.getManagedRepository( REPOSITORY_ID ),
getManagedRepository(), 1, 8 );
archivaAdminControl.expectAndReturn( archivaAdministration.getKnownContentConsumers(), new ArrayList<String>(),
2 );
managedRepoAdminControl.replay();
archivaAdminControl.replay();
repoFactoryControl.replay();
MockControl control = mockAuditLogs(
Arrays.asList( "org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0-tests.jar",
"org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom" ) );
String returnString = uploadAction.doUpload();
assertEquals( Action.SUCCESS, returnString );
repoFactoryControl.verify();
control.verify();
String repoLocation = getManagedRepository().getLocation();
assertTrue( new File( repoLocation,
"/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0-tests.jar" ).exists() );
assertTrue( new File( repoLocation,
"/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0-tests.jar.sha1" ).exists() );
assertTrue( new File( repoLocation,
"/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0-tests.jar.md5" ).exists() );
assertTrue(
new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom" ).exists() );
assertTrue(
new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom.sha1" ).exists() );
assertTrue(
new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom.md5" ).exists() );
assertTrue(
new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA ).exists() );
assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA
+ ".sha1" ).exists() );
assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA
+ ".md5" ).exists() );
verifyArtifactChecksums( repoLocation, "artifact-upload-1.0-tests", "1.0" );
verifyProjectMetadataChecksums( repoLocation );
}
public void testArtifactUploadGeneratePomSuccessful()
throws Exception
{
setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
"target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
null, true );
ManagedRepositoryContent content = new ManagedDefaultRepositoryContent();
content.setRepository( getManagedRepository() );
repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content );
managedRepoAdminControl.expectAndReturn( managedRepositoryAdmin.getManagedRepository( REPOSITORY_ID ),
getManagedRepository(), 1, 8 );
archivaAdminControl.expectAndReturn( archivaAdministration.getKnownContentConsumers(), new ArrayList<String>(),
2 );
managedRepoAdminControl.replay();
archivaAdminControl.replay();
repoFactoryControl.replay();
MockControl control = mockAuditLogs(
Arrays.asList( "org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar",
"org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom" ) );
String returnString = uploadAction.doUpload();
assertEquals( Action.SUCCESS, returnString );
repoFactoryControl.verify();
control.verify();
String repoLocation = getManagedRepository().getLocation();
assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, "artifact-upload-1.0", "1.0" );
verifyArtifactChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
verifyPomChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
verifyProjectMetadataChecksums( repoLocation );
}
public void testArtifactUploadNoPomSuccessful()
throws Exception
{
setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
"target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
null, false );
ManagedRepositoryContent content = new ManagedDefaultRepositoryContent();
content.setRepository( getManagedRepository() );
repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content );
managedRepoAdminControl.expectAndReturn( managedRepositoryAdmin.getManagedRepository( REPOSITORY_ID ),
getManagedRepository(), 1, 8 );
archivaAdminControl.expectAndReturn( archivaAdministration.getKnownContentConsumers(), new ArrayList<String>(),
2 );
managedRepoAdminControl.replay();
archivaAdminControl.replay();
repoFactoryControl.replay();
MockControl control =
mockAuditLogs( Arrays.asList( "org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar" ) );
String returnString = uploadAction.doUpload();
assertEquals( Action.SUCCESS, returnString );
repoFactoryControl.verify();
control.verify();
String repoLocation = getManagedRepository().getLocation();
assertTrue(
new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar" ).exists() );
assertTrue(
new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar.sha1" ).exists() );
assertTrue(
new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar.md5" ).exists() );
assertFalse(
new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom" ).exists() );
assertFalse(
new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom.sha1" ).exists() );
assertFalse(
new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom.md5" ).exists() );
assertTrue(
new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA ).exists() );
assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA
+ ".sha1" ).exists() );
assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA
+ ".md5" ).exists() );
// verify checksums of jar file
ChecksummedFile checksum = new ChecksummedFile(
new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar" ) );
String sha1 = checksum.calculateChecksum( ChecksumAlgorithm.SHA1 );
String md5 = checksum.calculateChecksum( ChecksumAlgorithm.MD5 );
String contents = FileUtils.readFileToString(
new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar.sha1" ) );
assertTrue( StringUtils.contains( contents, sha1 ) );
contents = FileUtils.readFileToString(
new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar.md5" ) );
assertTrue( StringUtils.contains( contents, md5 ) );
// verify checksums of metadata file
checksum = new ChecksummedFile(
new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA ) );
sha1 = checksum.calculateChecksum( ChecksumAlgorithm.SHA1 );
md5 = checksum.calculateChecksum( ChecksumAlgorithm.MD5 );
contents = FileUtils.readFileToString(
new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA + ".sha1" ) );
assertTrue( StringUtils.contains( contents, sha1 ) );
contents = FileUtils.readFileToString(
new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA + ".md5" ) );
assertTrue( StringUtils.contains( contents, md5 ) );
}
public void testArtifactUploadFailedRepositoryNotFound()
throws Exception
{
setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
"target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
null, false );
repoFactoryControl.expectAndThrow( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ),
new RepositoryNotFoundException() );
managedRepoAdminControl.expectAndReturn( managedRepositoryAdmin.getManagedRepository( REPOSITORY_ID ),
getManagedRepository(), 1, 8 );
archivaAdminControl.expectAndReturn( archivaAdministration.getKnownContentConsumers(), new ArrayList<String>(),
2 );
managedRepoAdminControl.replay();
archivaAdminControl.replay();
repoFactoryControl.replay();
String returnString = uploadAction.doUpload();
assertEquals( Action.ERROR, returnString );
repoFactoryControl.verify();
String repoLocation = getManagedRepository().getLocation();
assertFalse(
new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar" ).exists() );
assertFalse(
new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom" ).exists() );
assertFalse(
new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA ).exists() );
}
public void testArtifactUploadSnapshots()
throws Exception
{
setUploadParameters( "1.0-SNAPSHOT", null, new File( FileUtil.getBasedir(),
"target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
null, true );
ManagedRepositoryContent content = new ManagedDefaultRepositoryContent();
content.setRepository( getManagedRepository() );
repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content );
managedRepoAdminControl.expectAndReturn( managedRepositoryAdmin.getManagedRepository( REPOSITORY_ID ),
getManagedRepository(), 1, 8 );
archivaAdminControl.expectAndReturn( archivaAdministration.getKnownContentConsumers(), new ArrayList<String>(),
2, 5 );
managedRepoAdminControl.replay();
archivaAdminControl.replay();
repoFactoryControl.replay();
SimpleDateFormat fmt = new SimpleDateFormat( "yyyyMMdd.HHmmss" );
fmt.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
String timestamp = fmt.format( new Date() );
MockControl control = mockAuditLogs( Arrays.asList(
"org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + timestamp + "-1.jar",
"org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + timestamp + "-1.pom" ) );
String returnString = uploadAction.doUpload();
assertEquals( Action.SUCCESS, returnString );
repoFactoryControl.verify();
control.verify();
String repoLocation = getManagedRepository().getLocation();
String[] artifactsList = new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/" ).list();
Arrays.sort( artifactsList );
assertEquals( 9, artifactsList.length );
assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/"
+ MetadataTools.MAVEN_METADATA ).exists() );
assertTrue( new File( repoLocation,
"/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/" + MetadataTools.MAVEN_METADATA
+ ".sha1" ).exists() );
assertTrue( new File( repoLocation,
"/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/" + MetadataTools.MAVEN_METADATA
+ ".md5" ).exists() );
int startIndex = "artifact-upload-1.0-".length();
String timestampPath = getTimestamp( artifactsList, startIndex, 0 );
assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, "artifact-upload-1.0-" + timestampPath,
"1.0-SNAPSHOT" );
verifyArtifactChecksums( repoLocation, "artifact-upload-1.0-" + timestampPath, "1.0-SNAPSHOT" );
verifyPomChecksums( repoLocation, "artifact-upload-1.0-" + timestampPath, "1.0-SNAPSHOT" );
verifyProjectMetadataChecksums( repoLocation );
verifyVersionMetadataChecksums( repoLocation, "1.0-SNAPSHOT" );
// verify build number
File metadataFile = new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/"
+ MetadataTools.MAVEN_METADATA );
ArchivaRepositoryMetadata artifactMetadata = RepositoryMetadataReader.read( metadataFile );
SnapshotVersion snapshotVersion = artifactMetadata.getSnapshotVersion();
assertEquals( "Incorrect build number set in artifact metadata.", 1, snapshotVersion.getBuildNumber() );
String timestampPart = StringUtils.substringBeforeLast( timestampPath, "-" );
assertEquals( "Incorrect timestamp set in artifact metadata.", timestampPart, snapshotVersion.getTimestamp() );
String buildnumber = StringUtils.substringAfterLast( timestampPath, "-" );
assertEquals( "Incorrect build number in filename.", "1", buildnumber );
repoFactoryControl.reset();
control.reset();
control.setDefaultMatcher( MockControl.ALWAYS_MATCHER );
// MRM-1353
// upload snapshot artifact again and check if build number was incremented
setUploadParameters( "1.0-SNAPSHOT", null, new File( FileUtil.getBasedir(),
"target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
null, true );
repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content );
repoFactoryControl.replay();
fmt = new SimpleDateFormat( "yyyyMMdd.HHmmss" );
fmt.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
timestamp = fmt.format( new Date() );
control = mockAuditLogs( Arrays.asList(
"org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + timestamp + "-2.jar",
"org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + timestamp + "-2.pom" ) );
returnString = uploadAction.doUpload();
assertEquals( Action.SUCCESS, returnString );
repoFactoryControl.verify();
control.verify();
artifactsList = new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/" ).list();
Arrays.sort( artifactsList );
assertEquals( 15, artifactsList.length );
timestampPath = getTimestamp( artifactsList, startIndex, 6 );
assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, "artifact-upload-1.0-" + timestampPath,
"1.0-SNAPSHOT" );
verifyArtifactChecksums( repoLocation, "artifact-upload-1.0-" + timestampPath, "1.0-SNAPSHOT" );
verifyPomChecksums( repoLocation, "artifact-upload-1.0-" + timestampPath, "1.0-SNAPSHOT" );
verifyProjectMetadataChecksums( repoLocation );
verifyVersionMetadataChecksums( repoLocation, "1.0-SNAPSHOT" );
// verify build number set in metadata and in filename
metadataFile = new File( repoLocation,
"/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/" + MetadataTools.MAVEN_METADATA );
artifactMetadata = RepositoryMetadataReader.read( metadataFile );
snapshotVersion = artifactMetadata.getSnapshotVersion();
assertEquals( "Incorrect build number set in artifact metadata.", 2, snapshotVersion.getBuildNumber() );
timestampPart = StringUtils.substringBeforeLast( timestampPath, "-" );
assertEquals( "Incorrect timestamp set in artifact metadata.", timestampPart, snapshotVersion.getTimestamp() );
buildnumber = StringUtils.substringAfterLast( timestampPath, "-" );
assertEquals( "Incorrect build number in filename.", "2", buildnumber );
}
public void testChecksumIsCorrectWhenArtifactIsReUploaded()
throws Exception
{
setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
"target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
null, true );
ManagedRepositoryContent content = new ManagedDefaultRepositoryContent();
ManagedRepository repoConfig = getManagedRepository();
repoConfig.setBlockRedeployments( false );
content.setRepository( repoConfig );
repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content );
managedRepoAdminControl.expectAndReturn( managedRepositoryAdmin.getManagedRepository( REPOSITORY_ID ),
repoConfig, 1, 8 );
archivaAdminControl.expectAndReturn( archivaAdministration.getKnownContentConsumers(), new ArrayList<String>(),
2, 5 );
managedRepoAdminControl.replay();
archivaAdminControl.replay();
repoFactoryControl.replay();
String returnString = uploadAction.doUpload();
assertEquals( Action.SUCCESS, returnString );
repoFactoryControl.verify();
repoFactoryControl.reset();
String repoLocation = getManagedRepository().getLocation();
assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, "artifact-upload-1.0", "1.0" );
verifyArtifactChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
verifyPomChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
verifyProjectMetadataChecksums( repoLocation );
// RE-upload artifact
setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
"target/test-classes/upload-artifact-test/artifact-to-be-reuploaded.jar" ),
null, true );
repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content );
repoFactoryControl.replay();
// TODO: track modifications?
// MockControl control = mockAuditLogs( AuditEvent.MODIFY_FILE, Arrays.asList(
MockControl control = mockAuditLogs(
Arrays.asList( "org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar",
"org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom" ) );
returnString = uploadAction.doUpload();
assertEquals( Action.SUCCESS, returnString );
repoFactoryControl.verify();
control.verify();
repoLocation = getManagedRepository().getLocation();
assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, "artifact-upload-1.0", "1.0" );
verifyArtifactChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
verifyPomChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
verifyProjectMetadataChecksums( repoLocation );
}
public void testUploadArtifactAlreadyExistingRedeploymentsBlocked()
throws Exception
{
setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
"target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
null, true );
ManagedRepositoryContent content = new ManagedDefaultRepositoryContent();
content.setRepository( getManagedRepository() );
repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content, 1, 8 );
managedRepoAdminControl.expectAndReturn( managedRepositoryAdmin.getManagedRepository( REPOSITORY_ID ),
getManagedRepository(), 1, 8 );
archivaAdminControl.expectAndReturn( archivaAdministration.getKnownContentConsumers(), new ArrayList<String>(),
2, 5 );
managedRepoAdminControl.replay();
archivaAdminControl.replay();
repoFactoryControl.replay();
String returnString = uploadAction.doUpload();
assertEquals( Action.SUCCESS, returnString );
setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
"target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
null, true );
MockControl control = mockAuditLogs( Collections.<String>emptyList() );
returnString = uploadAction.doUpload();
assertEquals( Action.ERROR, returnString );
repoFactoryControl.verify();
control.verify();
String repoLocation = getManagedRepository().getLocation();
assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, "artifact-upload-1.0", "1.0" );
verifyArtifactChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
verifyPomChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
verifyProjectMetadataChecksums( repoLocation );
}
public void testUploadArtifactAlreadyExistingRedeploymentsAllowed()
throws Exception
{
setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
"target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
null, true );
ManagedRepositoryContent content = new ManagedDefaultRepositoryContent();
ManagedRepository repoConfig = getManagedRepository();
repoConfig.setBlockRedeployments( false );
content.setRepository( repoConfig );
repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content, 1, 8 );
managedRepoAdminControl.expectAndReturn( managedRepositoryAdmin.getManagedRepository( REPOSITORY_ID ),
repoConfig, 1, 8 );
archivaAdminControl.expectAndReturn( archivaAdministration.getKnownContentConsumers(), new ArrayList<String>(),
2, 5 );
managedRepoAdminControl.replay();
archivaAdminControl.replay();
repoFactoryControl.replay();
String returnString = uploadAction.doUpload();
assertEquals( Action.SUCCESS, returnString );
setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
"target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
null, true );
// TODO: track modifications?
// MockControl control = mockAuditLogs( AuditEvent.MODIFY_FILE, Arrays.asList(
MockControl control = mockAuditLogs(
Arrays.asList( "org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar",
"org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom" ) );
returnString = uploadAction.doUpload();
assertEquals( Action.SUCCESS, returnString );
repoFactoryControl.verify();
control.verify();
String repoLocation = getManagedRepository().getLocation();
assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, "artifact-upload-1.0", "1.0" );
verifyArtifactChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
verifyPomChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
verifyProjectMetadataChecksums( repoLocation );
}
// FIXME STAGE: test staging pushes it to the right place
ManagedRepository getManagedRepository()
{
return new BeanReplicator().replicateBean( this.managedRepository, ManagedRepository.class );
}
}