Does this need to be merged to trunk? I thought you said it wasn't working there.
That said, I was quite sure I tackled this specific issue already :) Should we have a Selenium test to confirm? - Brett On 04/04/2010, at 2:01 AM, och...@apache.org wrote: > Author: oching > Date: Sat Apr 3 15:01:22 2010 > New Revision: 930528 > > URL: http://svn.apache.org/viewvc?rev=930528&view=rev > Log: > [MRM-1353] Build number is always 1 for SNAPSHOT artifacts uploaded via web > upload form > o get latest build number from version-level metadata when deploying > artifacts from webapp > o for snapshot artifacts deployed, generate or update the version-level > metadata > o added unit test for this scenario > o refactored some parts of the tests for upload artifact > > Modified: > > archiva/branches/archiva-1.3.x/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java > > archiva/branches/archiva-1.3.x/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/UploadActionTest.java > > Modified: > archiva/branches/archiva-1.3.x/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java > URL: > http://svn.apache.org/viewvc/archiva/branches/archiva-1.3.x/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java?rev=930528&r1=930527&r2=930528&view=diff > ============================================================================== > --- > archiva/branches/archiva-1.3.x/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java > (original) > +++ > archiva/branches/archiva-1.3.x/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java > Sat Apr 3 15:01:22 2010 > @@ -76,6 +76,7 @@ import com.opensymphony.xwork2.Validatea > * > * @plexus.component role="com.opensymphony.xwork2.Action" > role-hint="uploadAction" instantiation-strategy="per-lookup" > */ > +...@suppresswarnings( "serial" ) > public class UploadAction > extends PlexusActionSupport > implements Validateable, Preparable, Auditable > @@ -307,17 +308,15 @@ public class UploadAction > ManagedRepositoryContent repository = > repositoryFactory.getManagedRepositoryContent( repositoryId ); > > String artifactPath = repository.toPath( artifactReference ); > - > int lastIndex = artifactPath.lastIndexOf( '/' ); > - > File targetPath = new File( repoConfig.getLocation(), > artifactPath.substring( 0, lastIndex ) ); > - > + > Date lastUpdatedTimestamp = Calendar.getInstance().getTime(); > int newBuildNumber = -1; > String timestamp = null; > > - File metadataFile = getMetadata( targetPath.getAbsolutePath() ); > - ArchivaRepositoryMetadata metadata = getMetadata( metadataFile ); > + File versionMetadataFile = getMetadata( > targetPath.getAbsolutePath() ); > + ArchivaRepositoryMetadata versionMetadata = getMetadata( > versionMetadataFile ); > > if ( VersionUtil.isSnapshot( version ) ) > { > @@ -325,13 +324,13 @@ public class UploadAction > DateFormat fmt = new SimpleDateFormat( "yyyyMMdd.HHmmss" ); > fmt.setTimeZone( timezone ); > timestamp = fmt.format( lastUpdatedTimestamp ); > - if ( metadata.getSnapshotVersion() != null ) > + > + if ( versionMetadata.getSnapshotVersion() != null ) > { > - newBuildNumber = > metadata.getSnapshotVersion().getBuildNumber() + 1; > + newBuildNumber = > versionMetadata.getSnapshotVersion().getBuildNumber() + 1; > } > else > { > - metadata.setSnapshotVersion( new SnapshotVersion() ); > newBuildNumber = 1; > } > } > @@ -346,7 +345,7 @@ public class UploadAction > { > filename = filename.replaceAll( "SNAPSHOT", timestamp + "-" + > newBuildNumber ); > } > - > + > boolean fixChecksums = !( > config.getRepositoryScanning().getKnownContentConsumers().contains( > "create-missing-checksums" ) ); > > try > @@ -411,13 +410,19 @@ public class UploadAction > addActionError( "Error encountered while uploading pom > file: " + ie.getMessage() ); > return ERROR; > } > - > } > > // explicitly update only if metadata-updater consumer is not > enabled! > - if( > !config.getRepositoryScanning().getKnownContentConsumers().contains( > "metadata-updater" ) ) > + if ( > !config.getRepositoryScanning().getKnownContentConsumers().contains( > "metadata-updater" ) ) > { > - updateMetadata( metadata, metadataFile, > lastUpdatedTimestamp, timestamp, newBuildNumber, fixChecksums ); > + updateProjectMetadata( targetPath.getAbsolutePath(), > lastUpdatedTimestamp, timestamp, newBuildNumber, > + fixChecksums ); > + > + if ( VersionUtil.isSnapshot( version ) ) > + { > + updateVersionMetadata( versionMetadata, > versionMetadataFile, lastUpdatedTimestamp, timestamp, > + newBuildNumber, fixChecksums ); > + } > } > > String msg = "Artifact \'" + groupId + ":" + artifactId + ":" + > version + > @@ -492,9 +497,7 @@ public class UploadAction > > private File getMetadata( String targetPath ) > { > - String artifactPath = targetPath.substring( 0, > targetPath.lastIndexOf( File.separatorChar ) ); > - > - return new File( artifactPath, MetadataTools.MAVEN_METADATA ); > + return new File( targetPath, MetadataTools.MAVEN_METADATA ); > } > > private ArchivaRepositoryMetadata getMetadata( File metadataFile ) > @@ -507,21 +510,57 @@ public class UploadAction > } > return metadata; > } > + > + /** > + * Update version level metadata for snapshot artifacts. If it does not > exist, create the metadata and fix checksums > + * if necessary. > + */ > + private void updateVersionMetadata( ArchivaRepositoryMetadata metadata, > File metadataFile, > + Date lastUpdatedTimestamp, String > timestamp, int buildNumber, > + boolean fixChecksums ) > + throws RepositoryMetadataException > + { > + if ( !metadataFile.exists() ) > + { > + metadata.setGroupId( groupId ); > + metadata.setArtifactId( artifactId ); > + metadata.setVersion( version ); > + } > + > + if ( metadata.getSnapshotVersion() == null ) > + { > + metadata.setSnapshotVersion( new SnapshotVersion() ); > + } > + > + metadata.getSnapshotVersion().setBuildNumber( buildNumber ); > + metadata.getSnapshotVersion().setTimestamp( timestamp ); > + metadata.setLastUpdatedTimestamp( lastUpdatedTimestamp ); > + > + RepositoryMetadataWriter.write( metadata, metadataFile ); > + > + if ( fixChecksums ) > + { > + fixChecksums( metadataFile ); > + } > + } > > /** > - * Update artifact level metadata. If it does not exist, create the > metadata and > - * fix checksums if necessary. > + * Update artifact level metadata. If it does not exist, create the > metadata and fix checksums if necessary. > */ > - private void updateMetadata( ArchivaRepositoryMetadata metadata, File > metadataFile, Date lastUpdatedTimestamp, > - String timestamp, int buildNumber, boolean > fixChecksums ) > + private void updateProjectMetadata( String targetPath, Date > lastUpdatedTimestamp, String timestamp, > + int buildNumber, boolean > fixChecksums ) > throws RepositoryMetadataException > { > List<String> availableVersions = new ArrayList<String>(); > String latestVersion = version; > > - if ( metadataFile.exists() ) > + String projectPath = targetPath.substring( 0, > targetPath.lastIndexOf( File.separatorChar ) ); > + File projectMetadataFile = getMetadata( projectPath ); > + ArchivaRepositoryMetadata projectMetadata = getMetadata( > projectMetadataFile ); > + > + if ( projectMetadataFile.exists() ) > { > - availableVersions = metadata.getAvailableVersions(); > + availableVersions = projectMetadata.getAvailableVersions(); > > Collections.sort( availableVersions, > VersionComparator.getInstance() ); > > @@ -536,39 +575,34 @@ public class UploadAction > { > availableVersions.add( version ); > > - metadata.setGroupId( groupId ); > - metadata.setArtifactId( artifactId ); > + projectMetadata.setGroupId( groupId ); > + projectMetadata.setArtifactId( artifactId ); > } > > - if ( metadata.getGroupId() == null ) > + if ( projectMetadata.getGroupId() == null ) > { > - metadata.setGroupId( groupId ); > + projectMetadata.setGroupId( groupId ); > } > - if ( metadata.getArtifactId() == null ) > + > + if ( projectMetadata.getArtifactId() == null ) > { > - metadata.setArtifactId( artifactId ); > + projectMetadata.setArtifactId( artifactId ); > } > > - metadata.setLatestVersion( latestVersion ); > - metadata.setLastUpdatedTimestamp( lastUpdatedTimestamp ); > - metadata.setAvailableVersions( availableVersions ); > + projectMetadata.setLatestVersion( latestVersion ); > + projectMetadata.setLastUpdatedTimestamp( lastUpdatedTimestamp ); > + projectMetadata.setAvailableVersions( availableVersions ); > > if ( !VersionUtil.isSnapshot( version ) ) > { > - metadata.setReleasedVersion( latestVersion ); > + projectMetadata.setReleasedVersion( latestVersion ); > } > - else > - { > - metadata.getSnapshotVersion().setBuildNumber( buildNumber ); > > - metadata.getSnapshotVersion().setTimestamp( timestamp ); > - } > + RepositoryMetadataWriter.write( projectMetadata, projectMetadataFile > ); > > - RepositoryMetadataWriter.write( metadata, metadataFile ); > - > - if( fixChecksums ) > + if ( fixChecksums ) > { > - fixChecksums( metadataFile ); > + fixChecksums( projectMetadataFile ); > } > } > > > Modified: > archiva/branches/archiva-1.3.x/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/UploadActionTest.java > URL: > http://svn.apache.org/viewvc/archiva/branches/archiva-1.3.x/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/UploadActionTest.java?rev=930528&r1=930527&r2=930528&view=diff > ============================================================================== > --- > archiva/branches/archiva-1.3.x/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/UploadActionTest.java > (original) > +++ > archiva/branches/archiva-1.3.x/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/UploadActionTest.java > Sat Apr 3 15:01:22 2010 > @@ -33,11 +33,14 @@ import org.apache.maven.archiva.configur > import org.apache.maven.archiva.configuration.RepositoryScanningConfiguration; > import org.apache.maven.archiva.database.ArchivaAuditLogsDao; > import org.apache.maven.archiva.model.ArchivaAuditLogs; > +import org.apache.maven.archiva.model.ArchivaRepositoryMetadata; > +import org.apache.maven.archiva.model.SnapshotVersion; > import org.apache.maven.archiva.repository.ManagedRepositoryContent; > import org.apache.maven.archiva.repository.RepositoryContentFactory; > import org.apache.maven.archiva.repository.RepositoryNotFoundException; > import > org.apache.maven.archiva.repository.content.ManagedDefaultRepositoryContent; > import org.apache.maven.archiva.repository.metadata.MetadataTools; > +import org.apache.maven.archiva.repository.metadata.RepositoryMetadataReader; > import org.apache.maven.archiva.scheduled.ArchivaTaskScheduler; > import org.codehaus.plexus.spring.PlexusInSpringTestCase; > import org.easymock.MockControl; > @@ -64,14 +67,14 @@ public class UploadActionTest > private RepositoryContentFactory repoFactory; > > private MockControl repoFactoryControl; > - > + > private ArchivaAuditLogsDao auditLogsDao; > > private MockControl auditLogsDaoControl; > > private static final String REPOSITORY_ID = "test-repo"; > > - private Configuration config; > + private Configuration config; > > public void setUp() > throws Exception > @@ -86,7 +89,7 @@ public class UploadActionTest > > repoFactoryControl = MockClassControl.createControl( > RepositoryContentFactory.class ); > repoFactory = (RepositoryContentFactory) repoFactoryControl.getMock(); > - > + > auditLogsDaoControl = MockControl.createControl( > ArchivaAuditLogsDao.class ); > auditLogsDaoControl.setDefaultMatcher( MockControl.ALWAYS_MATCHER ); > auditLogsDao = (ArchivaAuditLogsDao) auditLogsDaoControl.getMock(); > @@ -99,9 +102,9 @@ public class UploadActionTest > > File testRepo = new File( getBasedir(), > "target/test-classes/test-repo" ); > testRepo.mkdirs(); > - > + > assertTrue( testRepo.exists() ); > - > + > config = new Configuration(); > ManagedRepositoryConfiguration repoConfig = new > ManagedRepositoryConfiguration(); > repoConfig.setId( REPOSITORY_ID ); > @@ -110,7 +113,7 @@ public class UploadActionTest > repoConfig.setName( REPOSITORY_ID ); > repoConfig.setBlockRedeployments( true ); > config.addManagedRepository( repoConfig ); > - > + > RepositoryScanningConfiguration repoScanning = new > RepositoryScanningConfiguration(); > repoScanning.setKnownContentConsumers( new ArrayList<String>() ); > config.setRepositoryScanning( repoScanning ); > @@ -142,78 +145,131 @@ public class UploadActionTest > uploadAction.setGeneratePom( generatePom ); > } > > - private void assertAllArtifactsIncludingSupportArtifactsArePresent( > String repoLocation ) > + private void assertAllArtifactsIncludingSupportArtifactsArePresent( > String repoLocation, String artifact, > + > String version ) > { > - 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() ); > - > - 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/" + 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() ); > + 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 verifyChecksums( String repoLocation ) > + private void verifyVersionMetadataChecksums( String repoLocation, String > version ) > throws IOException > { > - // verify checksums of jar file > ChecksummedFile checksum = > - new ChecksummedFile( new File( repoLocation, > - > "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar" ) ); > + 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/1.0/artifact-upload-1.0.jar.sha1" ) ); > + 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/1.0/artifact-upload-1.0.jar.md5" ) ); > + FileUtils.readFileToString( new File( repoLocation, > "/org/apache/archiva/artifact-upload/" + version + "/" > + + MetadataTools.MAVEN_METADATA + ".md5" ) ); > assertTrue( StringUtils.contains( contents, md5 ) ); > + } > > - // verify checksums of pom file > - checksum = > - new ChecksummedFile( new File( repoLocation, > - > "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom" ) ); > - sha1 = checksum.calculateChecksum( ChecksumAlgorithm.SHA1 ); > - md5 = checksum.calculateChecksum( ChecksumAlgorithm.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 ); > > - contents = > - FileUtils.readFileToString( new File( repoLocation, > - > "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom.sha1" ) ); > + 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/1.0/artifact-upload-1.0.pom.md5" ) ); > + FileUtils.readFileToString( new File( repoLocation, > "/org/apache/archiva/artifact-upload/" > + + MetadataTools.MAVEN_METADATA + ".md5" ) ); > assertTrue( StringUtils.contains( contents, md5 ) ); > + } > > - // verify checksums of metadata file > + 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/" + > - MetadataTools.MAVEN_METADATA ) ); > + 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/" + > - MetadataTools.MAVEN_METADATA + ".sha1" ) ); > + 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/" + > - MetadataTools.MAVEN_METADATA + ".md5" ) ); > + 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; > + } > + > public void testArtifactUploadWithPomSuccessful() > throws Exception > { > @@ -239,11 +295,13 @@ public class UploadActionTest > archivaConfigControl.verify(); > repoFactoryControl.verify(); > auditLogsDaoControl.verify(); > - > + > String repoLocation = config.findManagedRepositoryById( REPOSITORY_ID > ).getLocation(); > - assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation > ); > + assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, > "artifact-upload-1.0", "1.0" ); > > - verifyChecksums( repoLocation ); > + verifyArtifactChecksums( repoLocation, "artifact-upload-1.0", "1.0" > ); > + verifyPomChecksums( repoLocation, "artifact-upload-1.0", "1.0" ); > + verifyProjectMetadataChecksums( repoLocation ); > } > > public void testArtifactUploadWithClassifier() > @@ -264,7 +322,7 @@ public class UploadActionTest > archivaConfigControl.replay(); > repoFactoryControl.replay(); > auditLogsDaoControl.replay(); > - > + > String returnString = uploadAction.doUpload(); > assertEquals( Action.SUCCESS, returnString ); > > @@ -283,44 +341,13 @@ public class UploadActionTest > 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-tests.jar" ) ); > - String sha1 = checksum.calculateChecksum( ChecksumAlgorithm.SHA1 ); > - String md5 = checksum.calculateChecksum( ChecksumAlgorithm.MD5 ); > + 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() ); > > - String contents = > - FileUtils.readFileToString( new File( repoLocation, > - > "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0-tests.jar.sha1" > ) ); > - assertTrue( StringUtils.contains( contents, sha1 ) ); > - > - contents = > - FileUtils.readFileToString( new File( repoLocation, > - > "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0-tests.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 ) ); > + verifyArtifactChecksums( repoLocation, "artifact-upload-1.0-tests", > "1.0" ); > + verifyProjectMetadataChecksums( repoLocation ); > } > > public void testArtifactUploadGeneratePomSuccessful() > @@ -350,14 +377,16 @@ public class UploadActionTest > auditLogsDaoControl.verify(); > > String repoLocation = config.findManagedRepositoryById( REPOSITORY_ID > ).getLocation(); > - assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation > ); > + assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, > "artifact-upload-1.0", "1.0" ); > > - verifyChecksums( repoLocation ); > + verifyArtifactChecksums( repoLocation, "artifact-upload-1.0", "1.0" > ); > + verifyPomChecksums( repoLocation, "artifact-upload-1.0", "1.0" ); > + verifyProjectMetadataChecksums( repoLocation ); > } > > public void testArtifactUploadFailedRepositoryNotFound() > throws Exception > - { > + { > setUploadParameters( "1.0", null, > new File( getBasedir(), > > "target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ), > null, > @@ -398,11 +427,11 @@ public class UploadActionTest > archivaConfigControl.expectAndReturn( > archivaConfig.getConfiguration(), config ); > repoFactoryControl.expectAndReturn( > repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content ); > auditLogsDaoControl.expectAndReturn( auditLogsDao.saveAuditLogs( new > ArchivaAuditLogs() ), null ); > - > + > archivaConfigControl.replay(); > repoFactoryControl.replay(); > auditLogsDaoControl.replay(); > - > + > String returnString = uploadAction.doUpload(); > assertEquals( Action.SUCCESS, returnString ); > > @@ -413,86 +442,92 @@ public class UploadActionTest > String repoLocation = config.findManagedRepositoryById( REPOSITORY_ID > ).getLocation(); > String[] artifactsList = new File( repoLocation, > "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/" ).list(); > > - assertEquals( 6, artifactsList.length ); > - > - 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() ); > + 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(); > - int endIndex = -1; > + String timestamp = getTimestamp( artifactsList, startIndex, 0 ); > > - if ( artifactsList[0].contains( "jar" ) ) > - { > - endIndex = artifactsList[0].indexOf( ".jar" ); > - } > - else > - { > - endIndex = artifactsList[0].indexOf( ".pom" ); > - } > + assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, > "artifact-upload-1.0-" + timestamp, > + > "1.0-SNAPSHOT" ); > + verifyArtifactChecksums( repoLocation, "artifact-upload-1.0-" + > timestamp, "1.0-SNAPSHOT" ); > + verifyPomChecksums( repoLocation, "artifact-upload-1.0-" + > timestamp, "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 ); > > - String timestamp = artifactsList[0].substring( startIndex, endIndex > ); > + SnapshotVersion snapshotVersion = > artifactMetadata.getSnapshotVersion(); > + assertEquals( "Incorrect build number set in artifact metadata.", 1, > snapshotVersion.getBuildNumber() ); > > - assertTrue( new File( repoLocation, > "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + > timestamp + ".jar" ).exists() ); > - assertTrue( new File( repoLocation, > "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + > timestamp + ".jar.md5" ).exists() ); > - assertTrue( new File( repoLocation, > "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + > timestamp + ".jar.sha1" ).exists() ); > - assertTrue( new File( repoLocation, > "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + > timestamp + ".pom" ).exists() ); > - assertTrue( new File( repoLocation, > "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + > timestamp + ".pom.md5" ).exists() ); > - assertTrue( new File( repoLocation, > "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + > timestamp + ".pom.sha1" ).exists() ); > + String timestampPart = StringUtils.substringBeforeLast( timestamp, > "-" ); > + assertEquals( "Incorrect timestamp set in artifact metadata.", > timestampPart, snapshotVersion.getTimestamp() ); > > - // verify checksums of jar file > - ChecksummedFile checksum = > - new ChecksummedFile( new File( repoLocation, > - > "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + > timestamp + ".jar" ) ); > - String sha1 = checksum.calculateChecksum( ChecksumAlgorithm.SHA1 ); > - String md5 = checksum.calculateChecksum( ChecksumAlgorithm.MD5 ); > + String buildnumber = StringUtils.substringAfterLast( timestamp, "-" > ); > + assertEquals( "Incorrect build number in filename.", "1", > buildnumber ); > > - String contents = > - FileUtils.readFileToString( new File( repoLocation, > - > "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + > timestamp + ".jar.sha1" ) ); > - assertTrue( StringUtils.contains( contents, sha1 ) ); > + archivaConfigControl.reset(); > + repoFactoryControl.reset(); > + auditLogsDaoControl.reset(); > > - contents = > - FileUtils.readFileToString( new File( repoLocation, > - > "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + > timestamp + ".jar.md5" ) ); > - assertTrue( StringUtils.contains( contents, md5 ) ); > + auditLogsDaoControl.setDefaultMatcher( MockControl.ALWAYS_MATCHER ); > > - // verify checksums of pom file > - checksum = > - new ChecksummedFile( new File( repoLocation, > - > "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + > timestamp + ".pom" ) ); > - sha1 = checksum.calculateChecksum( ChecksumAlgorithm.SHA1 ); > - md5 = checksum.calculateChecksum( ChecksumAlgorithm.MD5 ); > + // MRM-1353 > + // upload snapshot artifact again and check if build number was > incremented > + setUploadParameters( "1.0-SNAPSHOT", null, > + new File( getBasedir(), > + > "target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ), > null, > + true ); > > - contents = > - FileUtils.readFileToString( new File( repoLocation, > - > "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + > timestamp + ".pom.sha1" ) ); > - assertTrue( StringUtils.contains( contents, sha1 ) ); > + archivaConfigControl.expectAndReturn( > archivaConfig.getConfiguration(), config ); > + repoFactoryControl.expectAndReturn( > repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content ); > + auditLogsDaoControl.expectAndReturn( auditLogsDao.saveAuditLogs( new > ArchivaAuditLogs() ), null ); > > - contents = > - FileUtils.readFileToString( new File( repoLocation, > - > "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + > timestamp + ".pom.md5" ) ); > - assertTrue( StringUtils.contains( contents, md5 ) ); > + archivaConfigControl.replay(); > + repoFactoryControl.replay(); > + auditLogsDaoControl.replay(); > > - > - // 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 ); > + returnString = uploadAction.doUpload(); > + assertEquals( Action.SUCCESS, returnString ); > > - contents = > - FileUtils.readFileToString( new File( repoLocation, > "/org/apache/archiva/artifact-upload/" + > - MetadataTools.MAVEN_METADATA + ".sha1" ) ); > - assertTrue( StringUtils.contains( contents, sha1 ) ); > + archivaConfigControl.verify(); > + repoFactoryControl.verify(); > + auditLogsDaoControl.verify(); > > - contents = > - FileUtils.readFileToString( new File( repoLocation, > "/org/apache/archiva/artifact-upload/" + > - MetadataTools.MAVEN_METADATA + ".md5" ) ); > - assertTrue( StringUtils.contains( contents, md5 ) ); > + artifactsList = new File( repoLocation, > "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/" ).list(); > + > + assertEquals( 15, artifactsList.length ); > + > + timestamp = getTimestamp( artifactsList, startIndex, 6 ); > + > + assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, > "artifact-upload-1.0-" + timestamp, > + > "1.0-SNAPSHOT" ); > + verifyArtifactChecksums( repoLocation, "artifact-upload-1.0-" + > timestamp, "1.0-SNAPSHOT" ); > + verifyPomChecksums( repoLocation, "artifact-upload-1.0-" + > timestamp, "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( timestamp, "-" ); > + assertEquals( "Incorrect timestamp set in artifact metadata.", > timestampPart, snapshotVersion.getTimestamp() ); > + > + buildnumber = StringUtils.substringAfterLast( timestamp, "-" ); > + assertEquals( "Incorrect build number in filename.", "2", > buildnumber ); > } > > public void testChecksumIsCorrectWhenArtifactIsReUploaded() > @@ -505,13 +540,13 @@ public class UploadActionTest > > ManagedRepositoryContent content = new > ManagedDefaultRepositoryContent(); > ManagedRepositoryConfiguration repoConfig = > config.findManagedRepositoryById( REPOSITORY_ID ); > - repoConfig.setBlockRedeployments( false ); > - content.setRepository( repoConfig ); > - > + repoConfig.setBlockRedeployments( false ); > + content.setRepository( repoConfig ); > + > archivaConfigControl.expectAndReturn( > archivaConfig.getConfiguration(), config ); > repoFactoryControl.expectAndReturn( > repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content ); > auditLogsDaoControl.expectAndReturn( auditLogsDao.saveAuditLogs( new > ArchivaAuditLogs() ), null ); > - > + > archivaConfigControl.replay(); > repoFactoryControl.replay(); > auditLogsDaoControl.replay(); > @@ -529,9 +564,11 @@ public class UploadActionTest > auditLogsDaoControl.setDefaultMatcher( MockControl.ALWAYS_MATCHER ); > > String repoLocation = config.findManagedRepositoryById( REPOSITORY_ID > ).getLocation(); > - assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation > ); > + assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, > "artifact-upload-1.0", "1.0" ); > > - verifyChecksums( repoLocation ); > + 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, > @@ -542,7 +579,7 @@ public class UploadActionTest > archivaConfigControl.expectAndReturn( > archivaConfig.getConfiguration(), config ); > repoFactoryControl.expectAndReturn( > repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content ); > auditLogsDaoControl.expectAndReturn( auditLogsDao.saveAuditLogs( new > ArchivaAuditLogs() ), null ); > - > + > archivaConfigControl.replay(); > repoFactoryControl.replay(); > auditLogsDaoControl.replay(); > @@ -555,14 +592,16 @@ public class UploadActionTest > auditLogsDaoControl.verify(); > > repoLocation = config.findManagedRepositoryById( REPOSITORY_ID > ).getLocation(); > - assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation > ); > + assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, > "artifact-upload-1.0", "1.0" ); > > - verifyChecksums( repoLocation ); > + 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( getBasedir(), > > "target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ), > null, > @@ -574,19 +613,19 @@ public class UploadActionTest > archivaConfigControl.expectAndReturn( > archivaConfig.getConfiguration(), config, 2 ); > repoFactoryControl.expectAndReturn( > repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content, 2 ); > auditLogsDaoControl.expectAndReturn( auditLogsDao.saveAuditLogs( new > ArchivaAuditLogs() ), null ); > - > + > archivaConfigControl.replay(); > repoFactoryControl.replay(); > auditLogsDaoControl.replay(); > > String returnString = uploadAction.doUpload(); > assertEquals( Action.SUCCESS, returnString ); > - > + > setUploadParameters( "1.0", null, > new File( getBasedir(), > > "target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ), > null, > true ); > - > + > returnString = uploadAction.doUpload(); > assertEquals( Action.ERROR, returnString ); > > @@ -595,50 +634,54 @@ public class UploadActionTest > auditLogsDaoControl.verify(); > > String repoLocation = config.findManagedRepositoryById( REPOSITORY_ID > ).getLocation(); > - assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation > ); > + assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, > "artifact-upload-1.0", "1.0" ); > > - verifyChecksums( repoLocation ); > + 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( getBasedir(), > > "target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ), > null, > true ); > - > + > ManagedRepositoryContent content = new > ManagedDefaultRepositoryContent(); > ManagedRepositoryConfiguration repoConfig = > config.findManagedRepositoryById( REPOSITORY_ID ); > - repoConfig.setBlockRedeployments( false ); > - content.setRepository( repoConfig ); > - > + repoConfig.setBlockRedeployments( false ); > + content.setRepository( repoConfig ); > + > archivaConfigControl.expectAndReturn( > archivaConfig.getConfiguration(), config, 2 ); > repoFactoryControl.expectAndReturn( > repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content, 2 ); > auditLogsDaoControl.expectAndReturn( auditLogsDao.saveAuditLogs( new > ArchivaAuditLogs() ), null, 2 ); > - > + > archivaConfigControl.replay(); > repoFactoryControl.replay(); > auditLogsDaoControl.replay(); > - > + > String returnString = uploadAction.doUpload(); > assertEquals( Action.SUCCESS, returnString ); > - > + > setUploadParameters( "1.0", null, > new File( getBasedir(), > > "target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ), > null, > true ); > - > + > returnString = uploadAction.doUpload(); > assertEquals( Action.SUCCESS, returnString ); > - > + > archivaConfigControl.verify(); > repoFactoryControl.verify(); > auditLogsDaoControl.verify(); > - > + > String repoLocation = config.findManagedRepositoryById( REPOSITORY_ID > ).getLocation(); > - assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation > ); > - > - verifyChecksums( repoLocation ); > + 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 ); > } > -} > +} > \ No newline at end of file > > -- Brett Porter br...@apache.org http://brettporter.wordpress.com/