blob: 05e45f99a23752d76dbd850b87e9f9d350c6207d [file] [log] [blame]
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.apache.commons.lang3.StringUtils;
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<? extends ArtifactMappingProvider> 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
{
// 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.
// Sort the list (for asserts later)
final VersionComparator comparator = new VersionComparator( );
ItemSelector selector = ArchivaItemSelector.builder( )
.withNamespace( "org.apache.archiva.metadata.tests" )
.withProjectId( artifactId )
.withVersion( version )
.build( );
List<String> 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<? extends Project> 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<? extends Project> 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<? extends Version> 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<? extends Version> 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<? extends Artifact> stream = repoContent.newArtifactStream( selector ))
{
assertNotNull( stream );
List<? extends Artifact> 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<? extends Artifact> results = repoContent.getArtifacts( selector );
checkArtifactListWithVersionSelector1( results );
}
private void checkArtifactListWithVersionSelector1( List<? extends Artifact> 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<? extends Artifact> stream = repoContent.newArtifactStream( selector ))
{
assertNotNull( stream );
List<? extends Artifact> 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<? extends Artifact> results = repoContent.getArtifacts( selector );
checkArtifactListWithVersionSelector2( results );
}
private void checkArtifactListWithVersionSelector2( List<? extends Artifact> 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<? extends Artifact> 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<? extends Artifact> results = repoContent.newArtifactStream( selector ))
{
checkArtifactListWithArtifactSelector1( results.collect( Collectors.toList()) );
}
}
private void checkArtifactListWithArtifactSelector1( List<? extends Artifact> 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<? extends Artifact> 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<? extends Artifact> results = repoContent.newArtifactStream( selector ))
{
checkArtifactListWithArtifactSelector2( results.collect( Collectors.toList()) );
}
}
private void checkArtifactListWithArtifactSelector2( List<? extends Artifact> 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<? extends Artifact> results = repoContent.getArtifacts( selector );
checkArtifactListWithProjectSelector( results );
}
@Test
public void testArtifactStreamWithProjectSelector() {
ItemSelector selector = ArchivaItemSelector.builder( )
.withNamespace( "org.apache.maven.shared" )
.withProjectId( "maven-downloader" )
.build( );
Stream<? extends Artifact> results = repoContent.newArtifactStream( selector );
checkArtifactListWithProjectSelector( results.collect( Collectors.toList()) );
}
private void checkArtifactListWithProjectSelector( List<? extends Artifact> 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<? extends Artifact> 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<? extends Artifact> results = repoContent.getArtifacts( selector );
checkArtifactListWithNamespaceSelectorRecursive( results );
}
@Test
public void testArtifactStreamWithNamespaceSelectorRecursive() {
ItemSelector selector = ArchivaItemSelector.builder( )
.withNamespace( "org.multilevel" )
.recurse()
.build( );
Stream<? extends Artifact> results = repoContent.newArtifactStream( selector );
checkArtifactListWithNamespaceSelectorRecursive( results.collect( Collectors.toList()) );
}
private void checkArtifactListWithNamespaceSelectorRecursive( List<? extends Artifact> 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<? extends Artifact> 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<? extends Artifact> 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<? extends Artifact> 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<? extends Artifact> 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<? extends Artifact> 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<? extends Artifact> 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<? extends Artifact> 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<? extends Artifact> artifacts = repoContent.getArtifacts( ns );
assertNotNull( artifacts );
assertEquals( 39, artifacts.size( ) );
List<? extends Artifact> 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<? extends Artifact> 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<? extends Artifact> 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" ) );
}
}