This is an automated email from the ASF dual-hosted git repository. martin_s pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/archiva.git
commit 2b4254a3917dc29f2fe201a135253da36c3a98c7 Author: Martin Stockhammer <[email protected]> AuthorDate: Sun Mar 8 12:44:59 2020 +0100 Adding unit tests for maven repository --- .../mock/ManagedRepositoryContentMock.java | 12 ++ .../repository/storage/fs/FilesystemStorage.java | 2 +- .../mock/ManagedRepositoryContentMock.java | 12 ++ .../content/ManagedDefaultRepositoryContent.java | 105 ++++++----- .../maven/content/MavenContentHelper.java | 109 +++++------ .../AbstractManagedRepositoryContentTest.java | 46 +++++ ...ase.java => AbstractRepositoryContentTest.java} | 22 ++- .../ManagedDefaultRepositoryContentTest.java | 2 +- .../maven/content/MavenContentHelperTest.java | 209 +++++++++++++++++++++ .../RemoteDefaultRepositoryContentTest.java | 4 +- 10 files changed, 414 insertions(+), 109 deletions(-) diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java index cc7aac6..c719d38 100644 --- a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java @@ -180,6 +180,18 @@ public class ManagedRepositoryContentMock implements ManagedRepositoryContent } + @Override + public ContentItem toItem( String path ) throws LayoutException + { + return null; + } + + @Override + public ContentItem toItem( StorageAsset assetPath ) throws LayoutException + { + return null; + } + @Override public void deleteGroupId( String groupId ) throws ContentNotFoundException, ContentAccessException diff --git a/archiva-modules/archiva-base/archiva-storage-fs/src/main/java/org/apache/archiva/repository/storage/fs/FilesystemStorage.java b/archiva-modules/archiva-base/archiva-storage-fs/src/main/java/org/apache/archiva/repository/storage/fs/FilesystemStorage.java index 0ae56e7..339e65d 100644 --- a/archiva-modules/archiva-base/archiva-storage-fs/src/main/java/org/apache/archiva/repository/storage/fs/FilesystemStorage.java +++ b/archiva-modules/archiva-base/archiva-storage-fs/src/main/java/org/apache/archiva/repository/storage/fs/FilesystemStorage.java @@ -321,7 +321,7 @@ public class FilesystemStorage implements RepositoryStorage { public StorageAsset getAsset( String path ) { try { - return new FilesystemAsset(this, path, getAssetPath(path)); + return new FilesystemAsset(this, path, getAssetPath(path), basePath); } catch (IOException e) { throw new IllegalArgumentException("Path navigates outside of base directory "+path); } diff --git a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java index fd655b8..bc1a16f 100644 --- a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java +++ b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java @@ -186,6 +186,18 @@ public class ManagedRepositoryContentMock implements ManagedRepositoryContent } @Override + public ContentItem toItem( String path ) throws LayoutException + { + return null; + } + + @Override + public ContentItem toItem( StorageAsset assetPath ) throws LayoutException + { + return null; + } + + @Override public void deleteVersion( VersionedReference reference ) throws ContentNotFoundException, ContentAccessException { diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContent.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContent.java index e82ce34..c5d371e 100644 --- a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContent.java +++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContent.java @@ -141,38 +141,32 @@ public class ManagedDefaultRepositoryContent } - /** - * Returns a version reference from the coordinates - * @param groupId the group id - * @param artifactId the artifact id - * @param version the version - * @return the versioned reference object - */ - @Override - public VersionedReference toVersion( String groupId, String artifactId, String version ) { - return new VersionedReference().groupId( groupId ).artifactId( artifactId ).version( version ); + private StorageAsset getAssetByPath(String assetPath) { + return getStorage( ).getAsset( assetPath ); } - @Override - public VersionedReference toGenericVersion( ArtifactReference artifactReference ) - { - return toVersion( artifactReference.getGroupId( ), artifactReference.getArtifactId( ), VersionUtil.getBaseVersion( artifactReference.getVersion( ) )); + private StorageAsset getAsset(String namespace) { + String namespacePath = formatAsDirectory( namespace.trim() ); + if (StringUtils.isEmpty( namespacePath )) { + namespacePath = ""; + } + return getAssetByPath(namespacePath); } - /** - * Return the version the artifact is part of - * @param artifactReference - * @return - */ - public VersionedReference toVersion( ArtifactReference artifactReference) { - return toVersion( artifactReference.getGroupId( ), artifactReference.getArtifactId( ), artifactReference.getVersion( ) ); + private StorageAsset getAsset(String namespace, String project) { + return getAsset( namespace ).resolve( project ); } - @Override - public ArtifactReference toArtifact( String groupId, String artifactId, String version, String type, String classifier) { - return new ArtifactReference( ).groupId( groupId ).artifactId( artifactId ).version( version ).type( type ).classifier( classifier ); + private StorageAsset getAsset(String namespace, String project, String version) { + return getAsset( namespace, project ).resolve( version ); } + private StorageAsset getAsset(String namespace, String project, String version, String fileName) { + return getAsset( namespace, project, version ).resolve( fileName ); + } + + + /// ************* End of new generation interface ****************** @Override public void deleteItem( ContentItem item ) throws ItemNotFoundException, ContentAccessException { @@ -205,31 +199,6 @@ public class ManagedDefaultRepositoryContent } } - private StorageAsset getAssetByPath(String assetPath) { - return getStorage( ).getAsset( assetPath ); - } - - private StorageAsset getAsset(String namespace) { - String namespacePath = formatAsDirectory( namespace.trim() ); - if (StringUtils.isEmpty( namespacePath )) { - namespacePath = ""; - } - return getAssetByPath(namespacePath); - } - - private StorageAsset getAsset(String namespace, String project) { - return getAsset( namespace ).resolve( project ); - } - - private StorageAsset getAsset(String namespace, String project, String version) { - return getAsset( namespace, project ).resolve( version ); - } - - private StorageAsset getAsset(String namespace, String project, String version, String fileName) { - return getAsset( namespace, project, version ).resolve( fileName ); - } - - @Override public Namespace getNamespace( final ItemSelector namespaceSelector ) throws ContentAccessException, IllegalArgumentException { @@ -501,7 +470,8 @@ public class ManagedDefaultRepositoryContent final String artifactVersion = mavenContentHelper.getArtifactVersion( artifactDir, selector ); final String classifier = MavenContentHelper.getClassifier( selector ); final String extension = MavenContentHelper.getArtifactExtension( selector ); - final String fileName = MavenContentHelper.getArtifactFileName( selector, artifactVersion, classifier, extension ); + final String artifactId = StringUtils.isEmpty( selector.getArtifactId( ) ) ? selector.getProjectId( ) : selector.getArtifactId( ); + final String fileName = MavenContentHelper.getArtifactFileName( artifactId, artifactVersion, classifier, extension ); final StorageAsset path = getAsset( selector.getNamespace( ), selector.getProjectId( ), selector.getVersion( ), fileName ); return artifactMap.computeIfAbsent( path, artifactPath -> createArtifact( path, selector, classifier, extension ) ); @@ -659,6 +629,41 @@ public class ManagedDefaultRepositoryContent return getItemFromPath( assetPath ); } + /// ************* End of new generation interface ****************** + + /** + * Returns a version reference from the coordinates + * @param groupId the group id + * @param artifactId the artifact id + * @param version the version + * @return the versioned reference object + */ + @Override + public VersionedReference toVersion( String groupId, String artifactId, String version ) { + return new VersionedReference().groupId( groupId ).artifactId( artifactId ).version( version ); + } + + @Override + public VersionedReference toGenericVersion( ArtifactReference artifactReference ) + { + return toVersion( artifactReference.getGroupId( ), artifactReference.getArtifactId( ), VersionUtil.getBaseVersion( artifactReference.getVersion( ) )); + } + + /** + * Return the version the artifact is part of + * @param artifactReference + * @return + */ + public VersionedReference toVersion( ArtifactReference artifactReference) { + return toVersion( artifactReference.getGroupId( ), artifactReference.getArtifactId( ), artifactReference.getVersion( ) ); + } + + @Override + public ArtifactReference toArtifact( String groupId, String artifactId, String version, String type, String classifier) { + return new ArtifactReference( ).groupId( groupId ).artifactId( artifactId ).version( version ).type( type ).classifier( classifier ); + } + + @Override public void deleteVersion( VersionedReference ref ) throws ContentNotFoundException, ContentAccessException { diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/MavenContentHelper.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/MavenContentHelper.java index 73a9120..1a807a0 100644 --- a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/MavenContentHelper.java +++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/MavenContentHelper.java @@ -32,7 +32,9 @@ import org.springframework.stereotype.Service; import javax.inject.Inject; import javax.inject.Named; +import java.util.Comparator; import java.util.LinkedList; +import java.util.regex.Pattern; /** * Helper class that contains certain maven specific methods @@ -42,6 +44,8 @@ public class MavenContentHelper { private static final Logger log = LoggerFactory.getLogger( MavenContentHelper.class ); + public static final Pattern UNIQUE_SNAPSHOT_NUMBER_PATTERN = Pattern.compile( "^([0-9]{8}\\.[0-9]{6}-[0-9]+)(.*)" ); + @Inject @Named( "metadataReader#maven" ) @@ -53,6 +57,11 @@ public class MavenContentHelper } + public void setMetadataReader( MavenMetadataReader metadataReader ) + { + this.metadataReader = metadataReader; + } + /** * Returns the namespace string for a given path in the repository * @@ -64,6 +73,7 @@ public class MavenContentHelper StorageAsset current = namespacePath; while (current.hasParent()) { names.addFirst( current.getName() ); + current = current.getParent( ); } return String.join( ".", names ); } @@ -103,33 +113,40 @@ public class MavenContentHelper // re-adjust to timestamp if present, otherwise retain the original -SNAPSHOT filename SnapshotVersion metadataVersion = metadata.getSnapshotVersion( ); - if ( metadataVersion != null ) + if ( metadataVersion != null && StringUtils.isNotEmpty( metadataVersion.getTimestamp( ) ) ) { version.append( snapshotVersion, 0, snapshotVersion.length( ) - 8 ); // remove SNAPSHOT from end - version.append( metadataVersion.getTimestamp( )).append("-").append( metadataVersion.getBuildNumber( ) ); + version.append( metadataVersion.getTimestamp( ) ).append( "-" ).append( metadataVersion.getBuildNumber( ) ); + return version.toString( ); } - return version.toString( ); } catch ( RepositoryMetadataException e ) { // unable to parse metadata - LOGGER it, and continue with the version as the original SNAPSHOT version log.warn( "Invalid metadata: {} - {}", metadataFile, e.getMessage( ) ); - return snapshotVersion; } + final String baseVersion = StringUtils.removeEnd( snapshotVersion, "-SNAPSHOT" ); + final String prefix = metadataFile.getParent( ).getParent( ).getName( ) + "-"+baseVersion+"-"; + return artifactDir.list( ).stream( ).filter( a -> a.getName( ).startsWith( prefix ) ) + .map( a -> StringUtils.removeStart( a.getName( ), prefix ) ) + .map( n -> UNIQUE_SNAPSHOT_NUMBER_PATTERN.matcher( n ) ) + .filter( m -> m.matches( ) ) + .map( m -> baseVersion+"-"+m.group( 1 ) ) + .sorted( Comparator.reverseOrder() ).findFirst().orElse( snapshotVersion ); } /** * Returns a artifact filename that corresponds to the given data. - * @param selector the selector data + * @param artifactId the selector data * @param artifactVersion the artifactVersion * @param classifier the artifact classifier * @param extension the file extension */ - static String getArtifactFileName( ItemSelector selector, String artifactVersion, + static String getArtifactFileName( String artifactId, String artifactVersion, String classifier, String extension ) { - StringBuilder fileName = new StringBuilder( selector.getArtifactId( ) ).append( "-" ); + StringBuilder fileName = new StringBuilder( artifactId ).append( "-" ); fileName.append( artifactVersion ); if ( !StringUtils.isEmpty( classifier ) ) { @@ -171,33 +188,30 @@ public class MavenContentHelper */ static String getClassifierFromType( final String type ) { - if ( "pom".equalsIgnoreCase( type ) || "jar".equalsIgnoreCase( type ) - || "maven-plugin".equalsIgnoreCase( type ) - || "ejb".equalsIgnoreCase( type ) - || "ear".equalsIgnoreCase( type ) - || "war".equalsIgnoreCase( type ) - || "rar".equalsIgnoreCase( type ) - ) return ""; - if ( "test-jar".equalsIgnoreCase( type ) ) - { - return "tests"; - } - else if ( "ejb-client".equalsIgnoreCase( type ) ) - { - return "client"; - } - else if ( "java-source".equalsIgnoreCase( type ) ) - { - return "sources"; - } - else if ( "javadoc".equalsIgnoreCase( type ) ) - { - return "javadoc"; - } - else + String testType = type.trim( ).toLowerCase( ); + switch (testType.length( )) { - return ""; + case 7: + if ("javadoc".equals(testType)) { + return "javadoc"; + } + case 8: + if ("test-jar".equals(testType)) + { + return "tests"; + } + case 10: + if ("ejb-client".equals(testType)) { + return "client"; + } + case 11: + if ("java-source".equals(testType)) { + return "sources"; + } + default: + return ""; } + } /** @@ -227,7 +241,7 @@ public class MavenContentHelper { return "ejb-client"; } - else if ( classifier.equals( "source" ) && extension.equals( "jar" ) ) + else if ( classifier.equals( "sources" ) && extension.equals( "jar" ) ) { return "java-source"; } @@ -256,26 +270,15 @@ public class MavenContentHelper } else if ( selector.hasType( ) ) { - String type = selector.getType( ).toLowerCase( ); - if ( "test-jar".equals( type ) ) - { - return "jar"; - } - else if ( "ejb-client".equals( type ) ) - { - return "jar"; - } - else if ( "java-source".equals( type ) ) - { - return "jar"; - } - else if ( "javadoc".equals( type ) ) - { - return "jar"; - } - else - { - return "jar"; + final String type = selector.getType( ).trim().toLowerCase( ); + switch (type.length()) { + case 3: + if ("pom".equals(type) || "war".equals(type) || "ear".equals(type) || "rar".equals(type)) { + return type; + } + default: + return "jar"; + } } else diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/AbstractManagedRepositoryContentTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/AbstractManagedRepositoryContentTest.java new file mode 100644 index 0000000..be3f4ba --- /dev/null +++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/AbstractManagedRepositoryContentTest.java @@ -0,0 +1,46 @@ +package org.apache.archiva.repository.maven.content; + +/* + * 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 org.apache.archiva.repository.LayoutException; + +import static org.junit.Assert.fail; + +/** + * @author Martin Stockhammer <[email protected]> + */ +public abstract class AbstractManagedRepositoryContentTest extends AbstractRepositoryContentTest +{ + + @Override + protected void assertBadPathCi( String path, String reason ) + { + super.assertBadPathCi( path, reason ); + try + { + getManaged().toItem( path ); + fail( + "Should have thrown a LayoutException on the invalid path [" + path + "] because of [" + reason + "]" ); + } + catch ( LayoutException e ) + { + /* expected path */ + } + } +} diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/AbstractDefaultRepositoryContentTestCase.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/AbstractRepositoryContentTest.java similarity index 96% rename from archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/AbstractDefaultRepositoryContentTestCase.java rename to archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/AbstractRepositoryContentTest.java index 34210c8..34a8be4 100644 --- a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/AbstractDefaultRepositoryContentTestCase.java +++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/AbstractRepositoryContentTest.java @@ -36,13 +36,14 @@ import static org.junit.Assert.*; /** * AbstractDefaultRepositoryContentTestCase */ -public abstract class AbstractDefaultRepositoryContentTestCase +public abstract class AbstractRepositoryContentTest extends AbstractRepositoryLayerTestCase { @Test public void testBadPathMissingType() { assertBadPath( "invalid/invalid/1/invalid-1", "missing type" ); + assertBadPathCi( "invalid/invalid/1/invalid-1", "missing type" ); } @Test @@ -50,6 +51,9 @@ public abstract class AbstractDefaultRepositoryContentTestCase { assertBadPath( "invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar", "non snapshot artifact inside of a snapshot dir" ); + assertBadPathCi( "invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar", + "non snapshot artifact inside of a snapshot dir" ); + } @Test @@ -57,6 +61,8 @@ public abstract class AbstractDefaultRepositoryContentTestCase { assertBadPath( "invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar", "Timestamped Snapshot artifact not inside of an Snapshot dir" ); + assertBadPathCi( "invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar", + "Timestamped Snapshot artifact not inside of an Snapshot dir" ); } @Test @@ -503,6 +509,20 @@ public abstract class AbstractDefaultRepositoryContentTestCase } } + protected void assertBadPathCi( String path, String reason ) + { + try + { + toItemSelector( path ); + fail( + "Should have thrown a LayoutException on the invalid path [" + path + "] because of [" + reason + "]" ); + } + catch ( LayoutException e ) + { + /* expected path */ + } + } + /** * Perform a roundtrip through the layout routines to determine success. */ diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContentTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContentTest.java index 2b48400..c58b159 100644 --- a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContentTest.java +++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContentTest.java @@ -55,7 +55,7 @@ import static org.junit.Assert.*; * ManagedDefaultRepositoryContentTest */ public class ManagedDefaultRepositoryContentTest - extends AbstractDefaultRepositoryContentTestCase + extends AbstractManagedRepositoryContentTest { private ManagedDefaultRepositoryContent repoContent; diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/MavenContentHelperTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/MavenContentHelperTest.java new file mode 100644 index 0000000..6db54b8 --- /dev/null +++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/MavenContentHelperTest.java @@ -0,0 +1,209 @@ +package org.apache.archiva.repository.maven.content; + +/* + * 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 org.apache.archiva.common.filelock.DefaultFileLockManager; +import org.apache.archiva.maven2.metadata.MavenMetadataReader; +import org.apache.archiva.repository.content.ItemSelector; +import org.apache.archiva.repository.content.base.ArchivaItemSelector; +import org.apache.archiva.repository.storage.StorageAsset; +import org.apache.archiva.repository.storage.fs.FilesystemStorage; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +/** + * @author Martin Stockhammer <[email protected]> + */ +class MavenContentHelperTest +{ + + private static FilesystemStorage storage; + private static Path tempDir; + + @BeforeAll + static void setUp() throws IOException + { + tempDir = Files.createTempDirectory( "archivamaventest" ); + storage = new FilesystemStorage( tempDir, new DefaultFileLockManager() ); + } + + @AfterAll + static void tearDown() { + try + { + Files.deleteIfExists( tempDir ); + } + catch ( IOException e ) + { + System.err.println( "Could not delete " + tempDir ); + } + } + + @Test + void getNamespaceFromNamespacePath( ) + { + StorageAsset asset = storage.getAsset( "org/apache/archiva" ); + String ns = MavenContentHelper.getNamespaceFromNamespacePath( asset ); + assertNotNull( ns ); + assertEquals( "org.apache.archiva", ns ); + + asset = storage.getAsset( "" ); + ns = MavenContentHelper.getNamespaceFromNamespacePath( asset ); + assertNotNull( ns ); + assertEquals( "", ns ); + } + + @Test + void getArtifactVersion( ) throws IOException, URISyntaxException + { + MavenContentHelper mavenContentHelper = new MavenContentHelper( ); + MavenMetadataReader reader = new MavenMetadataReader( ); + mavenContentHelper.setMetadataReader( reader ); + Path testRepoPath = Paths.get( Thread.currentThread( ).getContextClassLoader( ).getResource( "repositories/metadata-repository" ).toURI() ); + FilesystemStorage storage = new FilesystemStorage( testRepoPath, new DefaultFileLockManager( ) ); + assertArtifactVersion( mavenContentHelper, "1.0-alpha-11-SNAPSHOT", storage.getAsset( "org/apache/archiva/metadata/tests/snap_shots_1/1.0-alpha-11-SNAPSHOT" ) + , "1.0-alpha-11-SNAPSHOT", "1.0-alpha-11-SNAPSHOT"); + + assertArtifactVersion( mavenContentHelper, "1.0-alpha-11-20070316.175232-11", storage.getAsset( "org/apache/archiva/metadata/tests/snap_shots_a/1.0-alpha-11-SNAPSHOT" ) + , "", "1.0-alpha-11-SNAPSHOT"); + + assertArtifactVersion( mavenContentHelper, "2.2-20070316.153953-10", storage.getAsset( "org/apache/archiva/metadata/tests/snap_shots_b/2.2-SNAPSHOT" ) + , "", "2.2-SNAPSHOT"); + + } + + private void assertArtifactVersion(MavenContentHelper mavenContentHelper, String expectedVersion, StorageAsset dir, String selectorArtifactVersion, String selectorVersion) { + ItemSelector selector = ArchivaItemSelector.builder( ) + .withVersion( selectorVersion ) + .withArtifactVersion( selectorArtifactVersion ) + .build( ); + assertEquals( expectedVersion, mavenContentHelper.getArtifactVersion( dir, selector ) ); + } + + @Test + void getLatestArtifactSnapshotVersion( ) throws URISyntaxException, IOException + { + MavenContentHelper mavenContentHelper = new MavenContentHelper( ); + MavenMetadataReader reader = new MavenMetadataReader( ); + mavenContentHelper.setMetadataReader( reader ); + Path testRepoPath = Paths.get( Thread.currentThread( ).getContextClassLoader( ).getResource( "repositories/default-repository" ).toURI() ); + FilesystemStorage storage = new FilesystemStorage( testRepoPath, new DefaultFileLockManager( ) ); + // Directory without metadata file + assertEquals( "2.1-20090808.085535-2", mavenContentHelper.getLatestArtifactSnapshotVersion( storage.getAsset( "org/apache/archiva/sample-parent/2.1-SNAPSHOT" ), "2.1-SNAPSHOT" ) ); + // Directory with metadata file + assertEquals( "1.3-20070802.113139-29", mavenContentHelper.getLatestArtifactSnapshotVersion( storage.getAsset( "org/apache/axis2/axis2/1.3-SNAPSHOT" ), "1.3-SNAPSHOT" ) ); + } + + @Test + void getArtifactFileName( ) + { + assertFileName( "test-1.0.jar", "test", "", "1.0", "jar" ); + assertFileName( "test-1.1-client.jar", "test", "client", "1.1", "jar" ); + assertFileName( "te445st-2.1-sources.jar", "te445st", "sources", "2.1", "jar" ); + assertFileName( "abcde-8888.994894.48484-10.jar", "abcde", "", "8888.994894.48484-10", "jar" ); + assertFileName( "testarchive-5.0.war", "testarchive", "", "5.0", "war" ); + } + + private void assertFileName(String expectedFilename, String artifactId, String classifier, String version, String extension) { + assertEquals( expectedFilename, MavenContentHelper.getArtifactFileName( artifactId, version, classifier, extension ) ); + } + + @Test + void getClassifier( ) + { + assertClassifier( "sources", "","java-source" ); + assertClassifier( "tests", "", "test-jar" ); + assertClassifier( "client", "","ejb-client" ); + assertClassifier( "javadoc", "","javadoc" ); + assertClassifier( "", "","test" ); + assertClassifier( "test1", "test1","java-source" ); + assertClassifier( "test2", "test2", "test-jar" ); + assertClassifier( "test3", "test3","ejb-client" ); + assertClassifier( "test4", "test4","javadoc" ); + assertClassifier( "test5", "test5","test" ); + } + private void assertClassifier(String expectedClassifier, String classifier, String type) { + ItemSelector selector = ArchivaItemSelector.builder( ) + .withClassifier( classifier ) + .withType( type ).build(); + assertEquals( expectedClassifier, MavenContentHelper.getClassifier( selector ) ); + } + + @Test + void getClassifierFromType( ) + { + assertClassifier( "sources", "java-source" ); + assertClassifier( "tests", "test-jar" ); + assertClassifier( "client", "ejb-client" ); + assertClassifier( "javadoc", "javadoc" ); + assertClassifier( "", "test" ); + } + + private void assertClassifier(String expectedClassifier, String type) { + assertEquals( expectedClassifier, MavenContentHelper.getClassifierFromType( type ) ); + } + + @Test + void getTypeFromClassifierAndExtension( ) + { + assertType( "javadoc", "javadoc", "jar" ); + assertType( "war", "", "war" ); + assertType( "ear", "", "ear" ); + assertType( "rar", "", "rar" ); + assertType( "java-source", "sources", "jar" ); + assertType( "ejb-client", "client", "jar" ); + assertType( "pom", "", "pom" ); + assertType( "test-jar", "tests", "jar" ); + + } + + private void assertType(String expectedType, String classifier, String extension) { + assertEquals( expectedType, MavenContentHelper.getTypeFromClassifierAndExtension( classifier, extension ) ); + } + + + + @Test + void getArtifactExtension( ) + { + assertExtension( "test", "", "test" ); + assertExtension( "jar", "javadoc", "" ); + assertExtension( "war", "war", "" ); + assertExtension( "ear", "ear", "" ); + assertExtension( "rar", "rar", "" ); + assertExtension( "jar", "", "" ); + } + + private void assertExtension( String expectedExtension, String type, String extension ) + { + ItemSelector selector = ArchivaItemSelector.builder( ) + .withType( type ).withExtension( extension ).build(); + assertEquals( expectedExtension, MavenContentHelper.getArtifactExtension( selector ) ); + } +} \ No newline at end of file diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/RemoteDefaultRepositoryContentTest.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/RemoteDefaultRepositoryContentTest.java index ca774f4..d8d0860 100644 --- a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/RemoteDefaultRepositoryContentTest.java +++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/RemoteDefaultRepositoryContentTest.java @@ -24,8 +24,6 @@ import org.apache.archiva.repository.ManagedRepositoryContent; import org.apache.archiva.repository.RemoteRepository; import org.apache.archiva.repository.RemoteRepositoryContent; import org.apache.archiva.repository.content.ItemSelector; -import org.apache.archiva.repository.maven.content.AbstractDefaultRepositoryContentTestCase; -import org.apache.archiva.repository.maven.content.RemoteDefaultRepositoryContent; import org.apache.archiva.repository.maven.metadata.storage.ArtifactMappingProvider; import org.junit.Before; @@ -36,7 +34,7 @@ import java.util.List; * RemoteDefaultRepositoryContentTest */ public class RemoteDefaultRepositoryContentTest - extends AbstractDefaultRepositoryContentTestCase + extends AbstractRepositoryContentTest { @Inject
