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.FileLockManager; import org.apache.archiva.common.utils.VersionComparator; import org.apache.archiva.configuration.ArchivaConfiguration; import org.apache.archiva.configuration.FileType; import org.apache.archiva.configuration.FileTypes; import org.apache.archiva.model.ArtifactReference; import org.apache.archiva.model.ProjectReference; import org.apache.archiva.model.VersionedReference; import org.apache.archiva.repository.EditableManagedRepository; import org.apache.archiva.repository.LayoutException; import org.apache.archiva.repository.ManagedRepository; import org.apache.archiva.repository.ManagedRepositoryContent; import org.apache.archiva.repository.RepositoryContent; import org.apache.archiva.repository.content.Artifact; import org.apache.archiva.repository.content.BaseArtifactTypes; import org.apache.archiva.repository.content.ContentItem; import org.apache.archiva.repository.content.ItemNotFoundException; import org.apache.archiva.repository.content.ItemSelector; import org.apache.archiva.repository.content.Namespace; import org.apache.archiva.repository.content.Project; import org.apache.archiva.repository.content.Version; import org.apache.archiva.repository.content.base.ArchivaItemSelector; import org.apache.archiva.repository.maven.MavenManagedRepository; import org.apache.archiva.repository.maven.metadata.storage.ArtifactMappingProvider; import org.apache.archiva.repository.storage.StorageAsset; import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Test; import javax.inject.Inject; import javax.inject.Named; import java.io.IOException; import java.io.OutputStream; import java.io.Reader; import java.net.URISyntaxException; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.FileTime; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; import static org.junit.Assert.*; /** * ManagedDefaultRepositoryContentTest */ public class ManagedDefaultRepositoryContentTest extends AbstractManagedRepositoryContentTest { private ManagedDefaultRepositoryContent repoContent; @Inject FileTypes fileTypes; @Inject @Named ( "archivaConfiguration#default" ) ArchivaConfiguration archivaConfiguration; @Inject List artifactMappingProviders; @Inject MavenContentHelper contentHelper; @Inject FileLockManager fileLockManager; private Path getRepositoryPath(String repoName) { try { return Paths.get( Thread.currentThread( ).getContextClassLoader( ).getResource( "repositories/" + repoName ).toURI( ) ); } catch ( URISyntaxException e ) { throw new RuntimeException( "Could not resolve repository path " + e.getMessage( ), e ); } } @Before public void setUp() throws Exception { Path repoDir = getRepositoryPath( "default-repository" ); MavenManagedRepository repository = createRepository( "testRepo", "Unit Test Repo", repoDir ); FileType fileType = archivaConfiguration.getConfiguration().getRepositoryScanning().getFileTypes().get( 0 ); fileType.addPattern( "**/*.xml" ); assertEquals( FileTypes.ARTIFACTS, fileType.getId() ); fileTypes.afterConfigurationChange( null, "fileType", null ); repoContent = new ManagedDefaultRepositoryContent(repository, artifactMappingProviders, fileTypes, fileLockManager); repoContent.setMavenContentHelper( contentHelper ); //repoContent = (ManagedRepositoryContent) lookup( ManagedRepositoryContent.class, "default" ); } @Test public void testGetVersionsSnapshotA() throws Exception { assertVersions( "snap_shots_a", "1.0-alpha-11-SNAPSHOT", new String[]{ "1.0-alpha-11-SNAPSHOT", "1.0-alpha-11-20070221.194724-2", "1.0-alpha-11-20070302.212723-3", "1.0-alpha-11-20070303.152828-4", "1.0-alpha-11-20070305.215149-5", "1.0-alpha-11-20070307.170909-6", "1.0-alpha-11-20070314.211405-9", "1.0-alpha-11-20070316.175232-11" } ); } @Test public void testToMetadataPathFromProjectReference() { ProjectReference reference = new ProjectReference(); reference.setGroupId( "com.foo" ); reference.setArtifactId( "foo-tool" ); assertEquals( "com/foo/foo-tool/maven-metadata.xml", repoContent.toMetadataPath( reference ) ); } @Test public void testToMetadataPathFromVersionReference() { VersionedReference reference = new VersionedReference(); reference.setGroupId( "com.foo" ); reference.setArtifactId( "foo-tool" ); reference.setVersion( "1.0" ); assertEquals( "com/foo/foo-tool/1.0/maven-metadata.xml", repoContent.toMetadataPath( reference ) ); } @Test @Override public void testToPathOnNullArtifactReference() { try { ArtifactReference reference = null; repoContent.toPath( reference ); fail( "Should have failed due to null artifact reference." ); } catch ( IllegalArgumentException e ) { /* expected path */ } } @Test public void testExcludeMetadataFile() throws Exception { assertVersions( "include_xml", "1.0", new String[]{ "1.0" } ); } private void assertVersions( String artifactId, String version, String[] expectedVersions ) throws Exception { VersionedReference reference = new VersionedReference(); reference.setGroupId( "org.apache.archiva.metadata.tests" ); reference.setArtifactId( artifactId ); reference.setVersion( version ); // Use the test metadata-repository, which is already setup for // These kind of version tests. Path repoDir = getRepositoryPath( "metadata-repository" ); ((EditableManagedRepository)repoContent.getRepository()).setLocation( repoDir.toAbsolutePath().toUri() ); // Request the versions. Set testedVersionSet = repoContent.getVersions( reference ); // Sort the list (for asserts later) final VersionComparator comparator = new VersionComparator( ); List testedVersions = new ArrayList<>(); testedVersions.addAll( testedVersionSet ); Collections.sort( testedVersions, comparator ); // Test the expected array of versions, to the actual tested versions assertEquals( "Assert Versions: length/size", expectedVersions.length, testedVersions.size() ); for ( int i = 0; i < expectedVersions.length; i++ ) { String actualVersion = testedVersions.get( i ); assertEquals( "Versions[" + i + "]", expectedVersions[i], actualVersion ); } ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.archiva.metadata.tests" ) .withProjectId( artifactId ) .withVersion( version ) .build( ); List versions = repoContent.getVersions( selector ).stream() .map(v -> v.getVersion()).sorted( comparator ).collect( Collectors.toList()); assertArrayEquals( expectedVersions, versions.toArray( ) ); } @Test public void getTestGetProjectWithIllegalArgs() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache" ) .withVersion( "1.0" ) .build(); try { repoContent.getProject( selector ); assertFalse( "Should throw IllegalArgumentException if no project id is given", true ); } catch (IllegalArgumentException e) { // Everything fine assertTrue( e.getMessage( ).contains( "Project id must be set" ) ); } } @Test public void getTestGetVersionWithIllegalArgs() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withVersion( "1.0" ) .build(); try { repoContent.getVersion( selector ); assertFalse( "Should throw IllegalArgumentException if no project id is given", true ); } catch (IllegalArgumentException e) { // Everything fine assertTrue( e.getMessage( ).contains( "Project id must be set" ) ); } selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "shared" ) .build(); try { repoContent.getVersion( selector ); assertFalse( "Should throw IllegalArgumentException if no version is given", true ); } catch (IllegalArgumentException e) { // Everything fine assertTrue( e.getMessage( ).contains( "Version must be set" ) ); } } @Test public void getTestGetArtifactWithIllegalArgs() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withVersion( "1.0" ) .withArtifactId( "shared" ) .withArtifactVersion("1.0") .build(); try { repoContent.getArtifact( selector ); assertFalse( "Should throw IllegalArgumentException if no project id is given", true ); } catch (IllegalArgumentException e) { // Everything fine assertTrue( e.getMessage( ).contains( "Project id must be set" ) ); } selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "shared" ) .withArtifactId( "shared" ) .withArtifactVersion("1.0") .build(); try { repoContent.getArtifact( selector ); assertFalse( "Should throw IllegalArgumentException if no version is given", true ); } catch (IllegalArgumentException e) { // Everything fine assertTrue( e.getMessage( ).contains( "Version must be set" ) ); } selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "shared" ) .withVersion("1.0") .withArtifactVersion("1.0") .build(); try { repoContent.getArtifact( selector ); assertFalse( "Should throw IllegalArgumentException if no artifact id is given", true ); } catch (IllegalArgumentException e) { // Everything fine assertTrue( e.getMessage( ).contains( "Artifact id must be set" ) ); } } @Test public void testGetProjects() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ).build(); Namespace ns = repoContent.getNamespace( selector ); assertNotNull( ns ); List projects = repoContent.getProjects( ns ); assertEquals( 12, projects.size( ) ); String[] expected = new String[]{ "A", "B", "C", "archiva", "discovery", "maven-parent", "samplejar", "shared", "some-ejb", "test", "testing", "update" }; Object[] actual = projects.stream( ).map( p -> p.getId( ) ).sorted( ).toArray( ); assertArrayEquals( expected, actual); } @Test public void testGetProjectsWithSelector() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ).build(); List projects = repoContent.getProjects( selector ); assertEquals( 12, projects.size( ) ); String[] expected = new String[]{ "A", "B", "C", "archiva", "discovery", "maven-parent", "samplejar", "shared", "some-ejb", "test", "testing", "update" }; Object[] actual = projects.stream( ).map( p -> p.getId( ) ).sorted( ).toArray( ); assertArrayEquals( expected, actual); } @Test public void testGetVersionsWithIllegalSelector() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ).build(); try { List versions = repoContent.getVersions( selector ); assertFalse( "IllegalArgumentException expected, when project id not set", true ); } catch (IllegalArgumentException e) { assertEquals( "Project id not set, while retrieving versions.", e.getMessage( ) ); } } @Test public void testGetVersionsWithSelector() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "samplejar" ).build(); List versions = repoContent.getVersions( selector ); assertNotNull( versions ); assertEquals( 2, versions.size( ) ); } @Override protected ArtifactReference toArtifactReference( String path ) throws LayoutException { return repoContent.toArtifactReference( path ); } @Override protected ItemSelector toItemSelector( String path ) throws LayoutException { return repoContent.toItemSelector( path ); } @Override protected String toPath( ArtifactReference reference ) { return repoContent.toPath( reference ); } @Override protected String toPath( ItemSelector selector ) { return repoContent.toPath( selector ); } @Override protected ManagedRepositoryContent getManaged( ) { return repoContent; } @Override protected RepositoryContent getContent( ) { return repoContent; } private Path setupRepoCopy( String source, String target) throws IOException { Path defaultRepo = getRepositoryPath( source ); Path newRepo = defaultRepo.getParent( ).resolve( target ); FileUtils.copyDirectory( defaultRepo.toFile( ), newRepo.toFile( ) ); MavenManagedRepository repository = createRepository( "testRepo", "Unit Test Repo", newRepo ); FileType fileType = archivaConfiguration.getConfiguration().getRepositoryScanning().getFileTypes().get( 0 ); fileType.addPattern( "**/*.xml" ); assertEquals( FileTypes.ARTIFACTS, fileType.getId() ); fileTypes.afterConfigurationChange( null, "fileType", null ); repoContent = new ManagedDefaultRepositoryContent(repository, artifactMappingProviders, fileTypes, fileLockManager); return newRepo; } @Test public void testDeleteArtifactWithType() throws IOException, org.apache.archiva.repository.ContentNotFoundException, org.apache.archiva.repository.ContentAccessException { Path deleteRepo = setupRepoCopy( "delete-repository", "delete-repository-2" ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0-source.jar" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar.md5" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar.sha1" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.pom" ) ) ); ArtifactReference ref = new ArtifactReference( ); ref.setGroupId( "org.apache.maven" ); ref.setArtifactId( "samplejar" ); ref.setVersion( "1.0" ); ref.setType( "jar" ); repoContent.deleteArtifact( ref ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0-source.jar" ) ) ); assertFalse( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar.md5" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar.sha1" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.pom" ) ) ); } @Test public void testDeleteArtifactWithClassifier() throws IOException, org.apache.archiva.repository.ContentNotFoundException, org.apache.archiva.repository.ContentAccessException { Path deleteRepo = setupRepoCopy( "default-repository", "default-repository-2" ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0-source.jar" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0-source.jar.sha1" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar.md5" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar.sha1" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.pom" ) ) ); ArtifactReference ref = new ArtifactReference( ); ref.setGroupId( "org.apache.maven" ); ref.setArtifactId( "samplejar" ); ref.setVersion( "1.0" ); ref.setClassifier( "source" ); ref.setType( "jar" ); repoContent.deleteArtifact( ref ); assertFalse( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0-source.jar" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0-source.jar.sha1" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar.md5" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar.sha1" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.pom" ) ) ); } @Test public void testDeleteArtifactWithoutType() throws IOException, org.apache.archiva.repository.ContentNotFoundException, org.apache.archiva.repository.ContentAccessException { Path deleteRepo = setupRepoCopy( "default-repository", "default-repository-2" ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0-source.jar" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0-source.jar.sha1" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar.md5" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar.sha1" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.pom" ) ) ); ArtifactReference ref = new ArtifactReference( ); ref.setGroupId( "org.apache.maven" ); ref.setArtifactId( "samplejar" ); ref.setVersion( "1.0" ); repoContent.deleteArtifact( ref ); assertFalse( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar" ) ) ); } @Test public void testDeleteVersion() throws IOException, org.apache.archiva.repository.ContentNotFoundException, org.apache.archiva.repository.ContentAccessException { Path deleteRepo = setupRepoCopy( "delete-repository", "delete-repository-2" ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0-source.jar" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar.md5" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar.sha1" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.pom" ) ) ); VersionedReference ref = new VersionedReference( ).groupId( "org.apache.maven" ).artifactId( "samplejar" ).version( "1.0" ); repoContent.deleteVersion( ref ); assertFalse( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0" ) ) ); } @Test public void testDeleteProject() throws IOException, org.apache.archiva.repository.ContentNotFoundException, org.apache.archiva.repository.ContentAccessException { Path deleteRepo = setupRepoCopy( "delete-repository", "delete-repository-2" ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0-source.jar" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar.md5" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar.sha1" ) ) ); assertTrue( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0/samplejar-1.0.pom" ) ) ); ProjectReference ref = new ProjectReference( ).groupId( "org.apache.maven" ).artifactId( "samplejar" ); repoContent.deleteProject( ref ); assertFalse( Files.exists( deleteRepo.resolve( "org/apache/maven/samplejar/1.0" ) ) ); } @Test public void testGetArtifactStreamWithVersionSelector() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "javax.sql" ) .withProjectId( "jdbc" ) .withVersion( "2.0" ).build(); try(Stream stream = repoContent.newArtifactStream( selector )) { assertNotNull( stream ); List results = stream.collect( Collectors.toList( ) ); checkArtifactListWithVersionSelector1( results ); } } @Test public void testGetArtifactListWithVersionSelector() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "javax.sql" ) .withProjectId( "jdbc" ) .withVersion( "2.0" ).build(); List results = repoContent.getArtifacts( selector ); checkArtifactListWithVersionSelector1( results ); } private void checkArtifactListWithVersionSelector1( List results ) { assertNotNull( results ); assertEquals( 2, results.size( ) ); Artifact mainArtifact = results.stream( ).filter( a -> a.getFileName( ).equals( "jdbc-2.0.jar" ) ).findFirst( ).get( ); assertNotNull( mainArtifact ); assertEquals( BaseArtifactTypes.MAIN, mainArtifact.getArtifactType( ) ); Artifact metaArtifact = results.stream( ).filter( a -> a.getFileName( ).equals( "maven-metadata-repository.xml" ) ).findFirst( ).get( ); assertNotNull( metaArtifact ); assertEquals( MavenTypes.REPOSITORY_METADATA, metaArtifact.getArtifactType( ) ); } @Test public void testGetArtifactStreamWithVersionSelector2() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.axis2" ) .withProjectId( "axis2" ) .withVersion( "1.3-SNAPSHOT" ).build(); try(Stream stream = repoContent.newArtifactStream( selector )) { assertNotNull( stream ); List results = stream.collect( Collectors.toList( ) ); checkArtifactListWithVersionSelector2( results ); } } @Test public void testGetArtifactListWithVersionSelector2() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.axis2" ) .withProjectId( "axis2" ) .withVersion( "1.3-SNAPSHOT" ).build(); List results = repoContent.getArtifacts( selector ); checkArtifactListWithVersionSelector2( results ); } private void checkArtifactListWithVersionSelector2( List results ) { assertNotNull( results ); assertEquals( 39, results.size( ) ); Artifact artifact = results.stream( ).filter( a -> a.getFileName( ).equals( "axis2-1.3-20070725.210059-1.pom" ) ) .findFirst( ).get( ); assertNotNull( artifact ); assertEquals( "pom", artifact.getExtension( ) ); assertEquals( BaseArtifactTypes.MAIN, artifact.getArtifactType( ) ); assertEquals( "1.3-SNAPSHOT", artifact.getVersion( ).getVersion( ) ); assertEquals( "1.3-20070725.210059-1", artifact.getArtifactVersion( ) ); assertEquals( ".pom", artifact.getRemainder( ) ); assertEquals( "axis2", artifact.getId( ) ); assertEquals( "axis2", artifact.getVersion( ).getProject( ).getId( ) ); assertEquals( "org.apache.axis2", artifact.getVersion( ).getProject( ).getNamespace( ).getNamespace( ) ); assertEquals( "", artifact.getClassifier( ) ); assertEquals( "pom", artifact.getType( ) ); artifact = null; artifact = results.stream( ).filter( a -> a.getFileName( ).equals( "axis2-1.3-20070725.210059-1.pom.md5" ) ) .findFirst( ).get( ); assertNotNull( artifact ); assertEquals( "md5", artifact.getExtension( ) ); assertEquals( BaseArtifactTypes.RELATED, artifact.getArtifactType( ) ); assertEquals( "1.3-SNAPSHOT", artifact.getVersion( ).getVersion( ) ); assertEquals( "1.3-20070725.210059-1", artifact.getArtifactVersion( ) ); assertEquals( ".pom.md5", artifact.getRemainder( ) ); assertEquals( "axis2", artifact.getId( ) ); assertEquals( "axis2", artifact.getVersion( ).getProject( ).getId( ) ); assertEquals( "org.apache.axis2", artifact.getVersion( ).getProject( ).getNamespace( ).getNamespace( ) ); assertEquals( "", artifact.getClassifier( ) ); assertEquals( "md5", artifact.getType( ) ); artifact = null; artifact = results.stream( ).filter( a -> a.getFileName( ).equals( "maven-metadata.xml" ) ) .findFirst( ).get( ); assertNotNull( artifact ); assertEquals( BaseArtifactTypes.METADATA, artifact.getArtifactType( ) ); assertEquals( "1.3-SNAPSHOT", artifact.getVersion( ).getVersion( ) ); assertEquals( "xml", artifact.getExtension( ) ); } @Test public void testGetArtifactListWithArtifactSelector1() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.axis2" ) .withProjectId( "axis2" ) .withVersion( "1.3-SNAPSHOT" ) .withArtifactVersion( "1.3-20070731.113304-21" ) .withExtension( "pom" ) .build( ); List results = repoContent.getArtifacts( selector ); checkArtifactListWithArtifactSelector1( results ); } @Test public void testGetArtifactStreamWithArtifactSelector1() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.axis2" ) .withProjectId( "axis2" ) .withVersion( "1.3-SNAPSHOT" ) .withArtifactVersion( "1.3-20070731.113304-21" ) .withExtension( "pom" ) .build( ); try(Stream results = repoContent.newArtifactStream( selector )) { checkArtifactListWithArtifactSelector1( results.collect( Collectors.toList()) ); } } private void checkArtifactListWithArtifactSelector1( List results ) { assertNotNull( results ); assertEquals( 1, results.size( ) ); Artifact artifact = results.get( 0 ); assertEquals( "pom", artifact.getExtension( ) ); assertEquals( BaseArtifactTypes.MAIN, artifact.getArtifactType( ) ); } @Test public void testGetArtifactListWithArtifactSelector2() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.axis2" ) .withProjectId( "axis2" ) .withVersion( "1.3-SNAPSHOT" ) .withArtifactVersion( "1.3-20070731.113304-21" ) .withExtension( "pom" ) .includeRelatedArtifacts() .build( ); List results = repoContent.getArtifacts( selector ); checkArtifactListWithArtifactSelector2( results ); } @Test public void testGetArtifactStreamWithArtifactSelector2() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.axis2" ) .withProjectId( "axis2" ) .withVersion( "1.3-SNAPSHOT" ) .withArtifactVersion( "1.3-20070731.113304-21" ) .withExtension( "pom" ) .includeRelatedArtifacts() .build( ); try(Stream results = repoContent.newArtifactStream( selector )) { checkArtifactListWithArtifactSelector2( results.collect( Collectors.toList()) ); } } private void checkArtifactListWithArtifactSelector2( List results ) { assertNotNull( results ); assertEquals( 3, results.size( ) ); Artifact artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "axis2-1.3-20070731.113304-21.pom" ) ) .findFirst( ).get( ); assertNotNull( artifact ); assertEquals( "pom", artifact.getExtension( ) ); assertEquals( BaseArtifactTypes.MAIN, artifact.getArtifactType( ) ); artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "axis2-1.3-20070731.113304-21.pom.sha1" ) ) .findFirst( ).get( ); assertNotNull( artifact ); assertEquals( "sha1", artifact.getExtension( ) ); assertEquals( BaseArtifactTypes.RELATED, artifact.getArtifactType( ) ); } @Test public void testArtifactListWithProjectSelector() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven.shared" ) .withProjectId( "maven-downloader" ) .build( ); List results = repoContent.getArtifacts( selector ); checkArtifactListWithProjectSelector( results ); } @Test public void testArtifactStreamWithProjectSelector() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven.shared" ) .withProjectId( "maven-downloader" ) .build( ); Stream results = repoContent.newArtifactStream( selector ); checkArtifactListWithProjectSelector( results.collect( Collectors.toList()) ); } private void checkArtifactListWithProjectSelector( List results ) { assertNotNull( results ); assertEquals( 27, results.size( ) ); Artifact artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "maven-metadata.xml" ) ) .findFirst( ).get( ); assertNotNull( artifact ); assertEquals( "xml", artifact.getExtension( ) ); assertEquals( BaseArtifactTypes.METADATA, artifact.getArtifactType( ) ); artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "maven-downloader-1.0-sources.jar" ) ) .findFirst( ).get( ); assertNotNull( artifact ); assertEquals( BaseArtifactTypes.MAIN, artifact.getArtifactType( ) ); assertEquals( "sources", artifact.getClassifier( ) ); assertEquals( "java-source", artifact.getType( ) ); artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "maven-downloader-1.0-sources.jar.sha1" ) ) .findFirst( ).get( ); assertNotNull( artifact ); assertEquals( BaseArtifactTypes.RELATED, artifact.getArtifactType( ) ); assertEquals( "sources", artifact.getClassifier( ) ); assertEquals( "sha1", artifact.getType( ) ); assertEquals( ".jar.sha1", artifact.getRemainder( ) ); } @Test public void testArtifactListWithNamespaceSelector() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.multilevel" ) .build( ); List results = repoContent.getArtifacts( selector ); assertNotNull( results ); assertEquals( 3, results.size( ) ); assertTrue( results.get( 0 ).getFileName( ).startsWith( "testproj1" ) ); } @Test public void testArtifactListWithNamespaceSelectorRecursive() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.multilevel" ) .recurse() .build( ); List results = repoContent.getArtifacts( selector ); checkArtifactListWithNamespaceSelectorRecursive( results ); } @Test public void testArtifactStreamWithNamespaceSelectorRecursive() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.multilevel" ) .recurse() .build( ); Stream results = repoContent.newArtifactStream( selector ); checkArtifactListWithNamespaceSelectorRecursive( results.collect( Collectors.toList()) ); } private void checkArtifactListWithNamespaceSelectorRecursive( List results ) { assertNotNull( results ); assertEquals( 6, results.size( ) ); Artifact artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "testproj2-1.0.pom" ) ) .findFirst( ).get( ); assertNotNull( artifact ); assertEquals( 6, artifact.getAsset( ).getParent( ).getPath( ).split( "/" ).length ); artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "testproj1-1.0.pom" ) ) .findFirst( ).get( ); assertNotNull( artifact ); assertEquals( 5, artifact.getAsset( ).getParent( ).getPath( ).split( "/" ).length ); } @Test public void testArtifactListWithArtifactSelector1() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "test" ) .withVersion( "1.0-SNAPSHOT" ) .withArtifactId( "test" ) .withArtifactVersion( "1.0-20050611.112233-1" ) .build( ); List results = repoContent.getArtifacts( selector ); assertNotNull( results ); assertEquals( 1, results.size( ) ); Artifact artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "test-1.0-20050611.112233-1.jar" ) ) .findFirst().get(); assertNotNull( artifact ); assertEquals( "", artifact.getClassifier( ) ); } @Test public void testArtifactListWithArtifactSelector2() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "test" ) .withVersion( "1.0-SNAPSHOT" ) .withClassifier( "*" ) .withArtifactId( "test" ) .withArtifactVersion( "1.0-20050611.112233-1" ) .build( ); List results = repoContent.getArtifacts( selector ); assertNotNull( results ); assertEquals( 2, results.size( ) ); Artifact artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "test-1.0-20050611.112233-1-javadoc.jar" ) ) .findFirst().get(); assertNotNull( artifact ); assertEquals( "javadoc", artifact.getClassifier( ) ); assertEquals( "javadoc", artifact.getType( ) ); } @Test public void testArtifactListWithArtifactSelector3() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "test" ) .withVersion( "1.0-SNAPSHOT" ) .withClassifier( "*" ) .withArtifactVersion( "1.0-20050611.112233-1" ) .build( ); List results = repoContent.getArtifacts( selector ); assertNotNull( results ); assertEquals( 3, results.size( ) ); Artifact artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "test-1.0-20050611.112233-1-javadoc.jar" ) ) .findFirst().get(); assertNotNull( artifact ); assertEquals( "javadoc", artifact.getClassifier( ) ); assertEquals( "javadoc", artifact.getType( ) ); artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "wrong-artifactId-1.0-20050611.112233-1.jar" ) ) .findFirst().get(); assertNotNull( artifact ); assertEquals( "", artifact.getClassifier( ) ); assertEquals( "wrong-artifactId", artifact.getId( ) ); } @Test public void testArtifactListWithArtifactSelector4() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "test" ) .withVersion( "1.0-SNAPSHOT" ) .withClassifier( "" ) .build( ); List results = repoContent.getArtifacts( selector ); assertNotNull( results ); assertEquals( 5, results.size( ) ); Artifact artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "test-1.0-20050611.112233-1-javadoc.jar" ) ) .findFirst().get(); assertNotNull( artifact ); assertEquals( "javadoc", artifact.getClassifier( ) ); assertEquals( "javadoc", artifact.getType( ) ); artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "wrong-artifactId-1.0-20050611.112233-1.jar" ) ) .findFirst().get(); assertNotNull( artifact ); assertEquals( "", artifact.getClassifier( ) ); assertEquals( "wrong-artifactId", artifact.getId( ) ); artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "wrong-artifactId-1.0-20050611.1122x-1.jar" ) ) .findFirst().get(); assertNotNull( artifact ); assertEquals( "", artifact.getClassifier( ) ); assertEquals( "wrong-artifactId", artifact.getId( ) ); assertEquals( "", artifact.getArtifactVersion( ) ); artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "test-1.0-20050611.1122x-1.jar" ) ) .findFirst().get(); assertNotNull( artifact ); assertEquals( "", artifact.getClassifier( ) ); assertEquals( "test", artifact.getId( ) ); assertEquals( "1.0-20050611.1122x-1", artifact.getArtifactVersion( ) ); } @Test public void testArtifactListWithArtifactSelectorWithClassifier() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "test" ) .withVersion( "1.0-SNAPSHOT" ) .withArtifactId( "test" ) .withClassifier( "javadoc" ) .withArtifactVersion( "1.0-20050611.112233-1" ) .build( ); List results = repoContent.getArtifacts( selector ); assertNotNull( results ); assertEquals( 1, results.size( ) ); Artifact artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "test-1.0-20050611.112233-1-javadoc.jar" ) ) .findFirst().get(); assertNotNull( artifact ); assertEquals( "javadoc", artifact.getClassifier( ) ); assertEquals( "javadoc", artifact.getType( ) ); } @Test public void testArtifactListWithArtifactSelectorWrongArtifact() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "test" ) .withVersion( "1.0-SNAPSHOT" ) .withArtifactId( "wrong-artifactId" ) .withArtifactVersion( "1.0-20050611.112233-1" ) .build( ); List results = repoContent.getArtifacts( selector ); assertNotNull( results ); assertEquals( 1, results.size( ) ); Artifact artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "wrong-artifactId-1.0-20050611.112233-1.jar" ) ) .findFirst().get(); assertNotNull( artifact ); } @Test public void testArtifactListWithArtifactSelectorVersionPattern() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "test" ) .withVersion( "1.0-SNAPSHOT" ) .withArtifactVersion( "1.0-*" ) .build( ); List results = repoContent.getArtifacts( selector ); assertNotNull( results ); assertEquals( 5, results.size( ) ); Artifact artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "wrong-artifactId-1.0-20050611.112233-1.jar" ) ) .findFirst().get(); assertNotNull( artifact ); } @Test public void testGetArtifactFromContentItem() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ).build(); Namespace ns = repoContent.getNamespace( selector ); List artifacts = repoContent.getArtifacts( ns ); assertNotNull( artifacts ); assertEquals( 39, artifacts.size( ) ); List artifacts2 = repoContent.getArtifacts( (ContentItem)ns ); assertArrayEquals( artifacts.toArray(), artifacts2.toArray() ); selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven.shared" ) .withProjectId( "maven-downloader" ) .build(); Project project = repoContent.getProject( selector ); artifacts = repoContent.getArtifacts( project ); assertNotNull( artifacts ); assertEquals( 27, artifacts.size( ) ); artifacts2 = repoContent.getArtifacts( (ContentItem)project ); assertArrayEquals( artifacts.toArray(), artifacts2.toArray() ); selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven.shared" ) .withProjectId( "maven-downloader" ) .withVersion( "1.1" ) .build( ); Version version = repoContent.getVersion( selector ); artifacts = repoContent.getArtifacts( version ); assertNotNull( artifacts ); assertEquals( 12, artifacts.size( ) ); artifacts2 = repoContent.getArtifacts( (ContentItem)version ); assertArrayEquals( artifacts.toArray(), artifacts2.toArray() ); } @Test public void testGetRelatedArtifactsFromArtifact() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven.shared" ) .withProjectId( "maven-downloader" ) .withVersion( "1.1" ) .withExtension( "jar" ) .withArtifactId( "maven-downloader" ).build( ); Artifact artifact = repoContent.getArtifact( selector ); assertNotNull( artifact ); List artifacts = repoContent.getArtifacts( artifact ); assertNotNull( artifacts ); assertEquals( 2, artifacts.size( ) ); } @Test public void testToItemFromPath() throws LayoutException { String path = "/org/apache/maven/shared"; ContentItem item = repoContent.toItem( path ); assertNotNull( item ); assertTrue( item instanceof Namespace ); path = "/org/apache/maven/shared/maven-downloader"; item = repoContent.toItem( path ); assertNotNull( item ); assertTrue( item instanceof Project ); path = "/org/apache/maven/shared/maven-downloader/1.1"; item = repoContent.toItem( path ); assertNotNull( item ); assertTrue( item instanceof Version ); path = "/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar"; item = repoContent.toItem( path ); assertNotNull( item ); assertTrue( item instanceof Artifact ); } @Test public void testToItemFromAssetPath() throws LayoutException { StorageAsset path = repoContent.getRepository().getAsset("/org/apache/maven/shared"); ContentItem item = repoContent.toItem( path ); assertNotNull( item ); assertTrue( item instanceof Namespace ); path = repoContent.getRepository( ).getAsset( "/org/apache/maven/shared/maven-downloader" ); item = repoContent.toItem( path ); assertNotNull( item ); assertTrue( item instanceof Project ); path = repoContent.getRepository( ).getAsset( "/org/apache/maven/shared/maven-downloader/1.1" ); item = repoContent.toItem( path ); assertNotNull( item ); assertTrue( item instanceof Version ); path = repoContent.getRepository( ).getAsset( "/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar" ); item = repoContent.toItem( path ); assertNotNull( item ); assertTrue( item instanceof Artifact ); } @Test public void testHasContent() throws LayoutException { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven.shared" ) .withProjectId( "maven-downloader" ) .withVersion( "1.1" ) .withArtifactId( "maven-downloader" ) .withExtension( "jar" ) .build(); assertTrue( repoContent.hasContent( selector ) ); selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven.shared" ) .withProjectId( "maven-downloader" ) .withVersion( "1.1" ) .withArtifactId( "maven-downloader" ) .withExtension( "zip" ) .build(); assertFalse( repoContent.hasContent( selector ) ); } @Test public void testGetItemWithNamespaceSelector() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .build( ); ContentItem item = repoContent.getItem( selector ); assertNotNull( item ); assertTrue( item instanceof Namespace ); } @Test public void testGetItemWithProjectSelector() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "shared" ) .build( ); ContentItem item = repoContent.getItem( selector ); assertNotNull( item ); assertTrue( item instanceof Project ); } @Test public void testGetItemWithVersionSelector() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "samplejar" ) .withVersion("2.0") .build( ); ContentItem item = repoContent.getItem( selector ); assertNotNull( item ); assertTrue( item instanceof Version ); } @Test public void testGetItemWithArtifactSelector() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "samplejar" ) .withVersion("2.0") .withArtifactId( "samplejar" ) .build( ); ContentItem item = repoContent.getItem( selector ); assertNotNull( item ); assertTrue( item instanceof Artifact ); } @Test public void testGetNamespaceFromPath() { StorageAsset path = repoContent.getRepository( ).getAsset( "/org/apache/axis2" ); Namespace ns = repoContent.getNamespaceFromPath( path ); assertNotNull( ns ); assertEquals( "org.apache.axis2", ns.getNamespace( ) ); } @Test public void testArtifactListWithArtifactSelectorAndRelated() { ItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "samplejar" ) .withVersion( "1.0" ) .withArtifactVersion( "1.0" ) .withArtifactId( "samplejar" ) .withExtension( "jar" ) .includeRelatedArtifacts() .build( ); List results = repoContent.getArtifacts( selector ); assertNotNull( results ); assertEquals( 3, results.size( ) ); Artifact artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "samplejar-1.0.jar" ) ) .findFirst().get(); assertNotNull( artifact ); assertEquals( BaseArtifactTypes.MAIN, artifact.getArtifactType( ) ); artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "samplejar-1.0.jar.md5" ) ) .findFirst().get(); assertNotNull( artifact ); assertEquals( BaseArtifactTypes.RELATED, artifact.getArtifactType( ) ); assertEquals( "md5", artifact.getExtension( ) ); artifact = results.stream( ).filter( a -> a.getFileName( ).equalsIgnoreCase( "samplejar-1.0.jar.sha1" ) ) .findFirst().get(); assertNotNull( artifact ); assertEquals( BaseArtifactTypes.RELATED, artifact.getArtifactType( ) ); assertEquals( "sha1", artifact.getExtension( ) ); } private Path copyRepository(String repoName) throws IOException, URISyntaxException { Path tempDir = Files.createTempDirectory( "archiva-repocontent" ); Path repoSource = Paths.get( Thread.currentThread( ).getContextClassLoader( ).getResource( "repositories/" + repoName ).toURI( ) ); assertTrue( Files.exists( repoSource ) ); FileUtils.copyDirectory( repoSource.toFile( ), tempDir.toFile() ); return tempDir; } private ManagedRepository createManagedRepoWithContent(String sourceRepoName) throws IOException, URISyntaxException { Path repoDir = copyRepository( sourceRepoName ); MavenManagedRepository repo = createRepository( sourceRepoName, sourceRepoName, repoDir ); ManagedDefaultRepositoryContent deleteRepoContent = new ManagedDefaultRepositoryContent( repo, artifactMappingProviders, fileTypes, fileLockManager ); deleteRepoContent.setMavenContentHelper( contentHelper ); return repo; } @Test public void deleteNamespaceItem() throws IOException, URISyntaxException, ItemNotFoundException { ManagedRepository repo = createManagedRepoWithContent( "delete-repository" ); ManagedRepositoryContent myRepoContent = repo.getContent( ); Path repoRoot = repo.getAsset( "" ).getFilePath( ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/maven" )) ); ArchivaItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ).build(); ContentItem item = myRepoContent.getItem( selector ); assertTrue( item instanceof Namespace ); myRepoContent.deleteItem( item ); assertFalse( Files.exists(repoRoot.resolve( "org/apache/maven" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache" )) ); // Sub namespaces are deleted too assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/sub/samplejar" )) ); selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.test" ).build(); item = myRepoContent.getItem( selector ); assertTrue( item instanceof Namespace ); myRepoContent.deleteItem( item ); assertFalse( Files.exists(repoRoot.resolve( "org/apache/test/samplejar" )) ); assertFalse( Files.exists(repoRoot.resolve( "org/apache/test/sub/samplejar" )) ); } @Test public void deleteProjectItem() throws IOException, URISyntaxException, ItemNotFoundException { ManagedRepository repo = createManagedRepoWithContent( "delete-repository" ); ManagedRepositoryContent myRepoContent = repo.getContent( ); Path repoRoot = repo.getAsset( "" ).getFilePath( ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/maven/A" )) ); ArchivaItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "A" ).build(); ContentItem item = myRepoContent.getItem( selector ); assertTrue( item instanceof Project ); myRepoContent.deleteItem( item ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/maven" )) ); assertTrue( Files.exists( repoRoot.resolve( "org/apache/maven/samplejar/1.0" ) ) ); assertTrue( Files.exists( repoRoot.resolve( "org/apache/maven/samplejar/2.0" ) ) ); assertFalse( Files.exists(repoRoot.resolve( "org/apache/maven/A" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/sub/samplejar" )) ); selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.test" ) .withProjectId( "samplejar" ).build(); item = myRepoContent.getItem( selector ); assertTrue( item instanceof Project ); myRepoContent.deleteItem( item ); assertFalse( Files.exists(repoRoot.resolve( "org/apache/test/samplejar" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/sub/samplejar" )) ); } @Test public void deleteVersionItem() throws IOException, URISyntaxException, ItemNotFoundException { ManagedRepository repo = createManagedRepoWithContent( "delete-repository" ); ManagedRepositoryContent myRepoContent = repo.getContent( ); Path repoRoot = repo.getAsset( "" ).getFilePath( ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/maven/A/1.0" )) ); ArchivaItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "A" ) .withVersion( "1.0" ).build(); ContentItem item = myRepoContent.getItem( selector ); assertTrue( item instanceof Version ); myRepoContent.deleteItem( item ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/maven/A" )) ); assertTrue( Files.exists( repoRoot.resolve( "org/apache/maven/samplejar/1.0" ) ) ); assertTrue( Files.exists( repoRoot.resolve( "org/apache/maven/samplejar/2.0" ) ) ); assertFalse( Files.exists(repoRoot.resolve( "org/apache/maven/A/1.0" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/sub/samplejar" )) ); selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.test" ) .withProjectId( "samplejar" ) .withVersion( "2.0" ).build(); item = myRepoContent.getItem( selector ); assertTrue( item instanceof Version ); myRepoContent.deleteItem( item ); assertFalse( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/2.0" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/sub/samplejar/1.0" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/sub/samplejar/2.0" )) ); } @Test public void deleteArtifactItem() throws IOException, URISyntaxException, ItemNotFoundException { ManagedRepository repo = createManagedRepoWithContent( "delete-repository" ); ManagedRepositoryContent myRepoContent = repo.getContent( ); Path repoRoot = repo.getAsset( "" ).getFilePath( ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/maven/A/1.0/A-1.0.pom" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/maven/A/1.0/A-1.0.war" )) ); ArchivaItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "A" ) .withVersion( "1.0" ) .withArtifactId( "A" ) .withArtifactVersion( "1.0" ) .withExtension( "pom" ) .build(); ContentItem item = myRepoContent.getItem( selector ); assertTrue( item instanceof Artifact ); myRepoContent.deleteItem( item ); assertTrue( Files.exists( repoRoot.resolve( "org/apache/maven/samplejar/1.0" ) ) ); assertTrue( Files.exists( repoRoot.resolve( "org/apache/maven/samplejar/2.0" ) ) ); assertFalse( Files.exists(repoRoot.resolve( "org/apache/maven/A/1.0/A-1.0.pom" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/maven/A/1.0/A-1.0.war" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0.jar" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0.jar.md5" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0.jar.sha1" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0.pom" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0-source.jar" )) ); selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.test" ) .withProjectId( "samplejar" ) .withVersion( "1.0" ) .withArtifactId( "samplejar" ) .withArtifactVersion( "1.0" ) .withExtension( "jar" ) .build(); item = myRepoContent.getItem( selector ); assertTrue( item instanceof Artifact ); myRepoContent.deleteItem( item ); assertFalse( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0.jar" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0.jar.md5" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0.jar.sha1" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0.pom" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0-source.jar" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/2.0" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/sub/samplejar/1.0" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/sub/samplejar/2.0" )) ); selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.test" ) .withProjectId( "samplejar" ) .withVersion( "1.0" ) .withArtifactId( "samplejar" ) .withArtifactVersion( "1.0" ) .withClassifier( "source" ) .withExtension( "jar" ) .build(); item = myRepoContent.getItem( selector ); assertTrue( item instanceof Artifact ); myRepoContent.deleteItem( item ); assertFalse( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0.jar" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0.jar.md5" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0.jar.sha1" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0.pom" )) ); assertFalse( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0-source.jar" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0-source.jar.sha1" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/2.0" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/sub/samplejar/1.0" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/sub/samplejar/2.0" )) ); selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.test" ) .withProjectId( "samplejar" ) .withVersion( "1.0" ) .withArtifactId( "samplejar" ) .withArtifactVersion( "1.0" ) .withExtension( "jar.md5" ) .build(); item = myRepoContent.getItem( selector ); assertTrue( item instanceof Artifact ); myRepoContent.deleteItem( item ); assertFalse( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0.jar" )) ); assertFalse( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0.jar.md5" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0.jar.sha1" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0.pom" )) ); assertFalse( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0-source.jar" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/1.0/samplejar-1.0-source.jar.sha1" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/samplejar/2.0" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/sub/samplejar/1.0" )) ); assertTrue( Files.exists(repoRoot.resolve( "org/apache/test/sub/samplejar/2.0" )) ); } @Test public void deleteItemNotFound() throws IOException, URISyntaxException, ItemNotFoundException { ManagedRepository repo = createManagedRepoWithContent( "delete-repository" ); ManagedRepositoryContent myRepoContent = repo.getContent( ); Path repoRoot = repo.getAsset( "" ).getFilePath( ); ArchivaItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.test2" ) .build( ); ContentItem item = myRepoContent.getItem( selector ); assertTrue( item instanceof Namespace ); try { myRepoContent.deleteItem( item ); assertTrue( "ItemNotFoundException expected for non existing namespace", false ); } catch ( ItemNotFoundException e) { } selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.test" ) .withProjectId( "samplejar2" ) .build( ); item = myRepoContent.getItem( selector ); assertTrue( item instanceof Project ); try { myRepoContent.deleteItem( item ); assertTrue( "ItemNotFoundException expected for non existing project", false ); } catch ( ItemNotFoundException e) { } selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.test" ) .withProjectId( "samplejar" ) .withVersion("1.1") .build( ); item = myRepoContent.getItem( selector ); assertTrue( item instanceof Version ); try { myRepoContent.deleteItem( item ); assertTrue( "ItemNotFoundException expected for non existing version", false ); } catch ( ItemNotFoundException e) { } selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.test" ) .withProjectId( "samplejar" ) .withVersion("1.0") .withArtifactId( "samplejar" ) .withArtifactVersion( "1.0" ) .withExtension( "jax" ) .build( ); item = myRepoContent.getItem( selector ); assertTrue( item instanceof Artifact ); try { myRepoContent.deleteItem( item ); assertTrue( "ItemNotFoundException expected for non existing artifact", false ); } catch ( ItemNotFoundException e) { } } @Test public void testAddArtifact() throws IOException, URISyntaxException { ManagedRepository repo = createManagedRepoWithContent( "delete-repository" ); ManagedRepositoryContent myRepoContent = repo.getContent( ); Path repoRoot = repo.getAsset( "" ).getFilePath( ); Path tmpFile = Files.createTempFile( "archiva-mvn-repotest", "jar" ); try( OutputStream outputStream = Files.newOutputStream( tmpFile )) { for ( int i = 0; i < 255; i++ ) { outputStream.write( "test.test.test\n".getBytes( Charset.forName( "UTF-8" ) ) ); } } Path file = repoRoot.resolve( "org/apache/maven/samplejar/2.0/samplejar-2.0.jar" ); FileTime lmt = Files.getLastModifiedTime( file ); ArchivaItemSelector selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "samplejar" ) .withVersion( "2.0" ) .withArtifactId( "samplejar" ) .withArtifactVersion( "2.0" ) .withExtension( "jar" ) .build( ); Artifact artifact = myRepoContent.getArtifact( selector ); myRepoContent.addArtifact( tmpFile, artifact ); FileTime lmtAfter = Files.getLastModifiedTime( file ); assertNotEquals( lmtAfter, lmt ); Reader ln = Files.newBufferedReader( file, Charset.forName( "UTF-8" ) ); char[] content = new char[50]; ln.read( content ); assertTrue( new String( content ).startsWith( "test.test.test" ) ); tmpFile = Files.createTempFile( "archiva-mvn-repotest", "jar" ); try( OutputStream outputStream = Files.newOutputStream( tmpFile )) { for ( int i = 0; i < 255; i++ ) { outputStream.write( "test.test.test\n".getBytes( Charset.forName( "UTF-8" ) ) ); } } file = repoRoot.resolve( "org/apache/maven/samplejar/2.0/samplejar-2.0.test" ); assertFalse( Files.exists( file ) ); assertTrue( Files.exists( tmpFile ) ); selector = ArchivaItemSelector.builder( ) .withNamespace( "org.apache.maven" ) .withProjectId( "samplejar" ) .withVersion( "2.0" ) .withArtifactId( "samplejar" ) .withArtifactVersion( "2.0" ) .withExtension( "test" ) .build( ); artifact = myRepoContent.getArtifact( selector ); myRepoContent.addArtifact( tmpFile, artifact ); ln = Files.newBufferedReader( file, Charset.forName( "UTF-8" ) ); ln.read( content ); assertTrue( new String( content ).startsWith( "test.test.test" ) ); } }