mirror of https://github.com/apache/maven.git
o Added artifact resolver test that uses the new repository layout.
git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@163641 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
e54ce35409
commit
52d4ebc8fe
|
@ -0,0 +1,260 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2001-2004 The Apache Software Foundation.
|
||||||
|
*
|
||||||
|
* Licensed 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.maven.artifact;
|
||||||
|
|
||||||
|
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
|
||||||
|
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||||
|
import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
|
||||||
|
import org.codehaus.plexus.PlexusTestCase;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.Writer;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:jason@maven.org">Jason van Zyl </a>
|
||||||
|
* @version $Id: ArtifactComponentTestCase.java,v 1.5 2004/10/23 13:33:59
|
||||||
|
* jvanzyl Exp $
|
||||||
|
*/
|
||||||
|
public abstract class NewLayoutArtifactComponentTestCase
|
||||||
|
extends PlexusTestCase
|
||||||
|
{
|
||||||
|
protected ArtifactHandlerManager artifactHandlerManager;
|
||||||
|
|
||||||
|
protected void setUp() throws Exception
|
||||||
|
{
|
||||||
|
super.setUp();
|
||||||
|
|
||||||
|
artifactHandlerManager = (ArtifactHandlerManager) lookup( ArtifactHandlerManager.ROLE );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract String component();
|
||||||
|
|
||||||
|
/** Return an existing file, not a directory - causes creation to fail.
|
||||||
|
* @throws Exception*/
|
||||||
|
protected ArtifactRepository badLocalRepository() throws Exception
|
||||||
|
{
|
||||||
|
String path = "target/test-classes/repositories/" + component() + "/bad-local-repository";
|
||||||
|
|
||||||
|
File f = new File( getBasedir(), path );
|
||||||
|
|
||||||
|
f.createNewFile();
|
||||||
|
|
||||||
|
ArtifactRepositoryLayout repoLayout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE,
|
||||||
|
"default" );
|
||||||
|
|
||||||
|
ArtifactRepository localRepository = new ArtifactRepository( "test", "file://" + f.getPath(), repoLayout );
|
||||||
|
|
||||||
|
return localRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ArtifactRepository localRepository() throws Exception
|
||||||
|
{
|
||||||
|
String path = "target/test-classes/repositories/" + component() + "/local-repository";
|
||||||
|
|
||||||
|
File f = new File( getBasedir(), path );
|
||||||
|
|
||||||
|
ArtifactRepositoryLayout repoLayout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE,
|
||||||
|
"default" );
|
||||||
|
|
||||||
|
ArtifactRepository localRepository = new ArtifactRepository( "local", "file://" + f.getPath(), repoLayout );
|
||||||
|
|
||||||
|
return localRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ArtifactRepository remoteRepository() throws Exception
|
||||||
|
{
|
||||||
|
String path = "target/test-classes/repositories/" + component() + "/remote-repository";
|
||||||
|
|
||||||
|
File f = new File( getBasedir(), path );
|
||||||
|
|
||||||
|
ArtifactRepositoryLayout repoLayout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE,
|
||||||
|
"default" );
|
||||||
|
|
||||||
|
ArtifactRepository repository = new ArtifactRepository( "test", "file://" + f.getPath(), repoLayout );
|
||||||
|
|
||||||
|
return repository;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ArtifactRepository badRemoteRepository() throws Exception
|
||||||
|
{
|
||||||
|
ArtifactRepositoryLayout repoLayout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE,
|
||||||
|
"default" );
|
||||||
|
|
||||||
|
ArtifactRepository repository = new ArtifactRepository( "test", "http://foo.bar/repository", repoLayout );
|
||||||
|
|
||||||
|
return repository;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void assertRemoteArtifactPresent( Artifact artifact ) throws Exception
|
||||||
|
{
|
||||||
|
ArtifactRepository remoteRepo = remoteRepository();
|
||||||
|
|
||||||
|
String path = remoteRepo.pathOf( artifact );
|
||||||
|
|
||||||
|
File file = new File( remoteRepo.getBasedir(), path );
|
||||||
|
|
||||||
|
if ( !file.exists() )
|
||||||
|
{
|
||||||
|
fail( "Remote artifact " + file + " should be present." );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void assertLocalArtifactPresent( Artifact artifact ) throws Exception
|
||||||
|
{
|
||||||
|
ArtifactRepository localRepo = localRepository();
|
||||||
|
|
||||||
|
String path = localRepo.pathOf( artifact );
|
||||||
|
|
||||||
|
File file = new File( localRepo.getBasedir(), path );
|
||||||
|
|
||||||
|
if ( !file.exists() )
|
||||||
|
{
|
||||||
|
fail( "Local artifact " + file + " should be present." );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void assertRemoteArtifactNotPresent( Artifact artifact ) throws Exception
|
||||||
|
{
|
||||||
|
ArtifactRepository remoteRepo = remoteRepository();
|
||||||
|
|
||||||
|
String path = remoteRepo.pathOf( artifact );
|
||||||
|
|
||||||
|
File file = new File( remoteRepo.getBasedir(), path );
|
||||||
|
|
||||||
|
if ( file.exists() )
|
||||||
|
{
|
||||||
|
fail( "Remote artifact " + file + " should not be present." );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void assertLocalArtifactNotPresent( Artifact artifact ) throws Exception
|
||||||
|
{
|
||||||
|
ArtifactRepository localRepo = localRepository();
|
||||||
|
|
||||||
|
String path = localRepo.pathOf( artifact );
|
||||||
|
|
||||||
|
File file = new File( localRepo.getBasedir(), path );
|
||||||
|
|
||||||
|
if ( file.exists() )
|
||||||
|
{
|
||||||
|
fail( "Local artifact " + file + " should not be present." );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
protected List remoteRepositories() throws Exception
|
||||||
|
{
|
||||||
|
List remoteRepositories = new ArrayList();
|
||||||
|
|
||||||
|
remoteRepositories.add( remoteRepository() );
|
||||||
|
|
||||||
|
return remoteRepositories;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Test artifact generation for unit tests
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
protected Artifact createLocalArtifact( String artifactId, String version ) throws Exception
|
||||||
|
{
|
||||||
|
Artifact artifact = createArtifact( artifactId, version );
|
||||||
|
|
||||||
|
createArtifact( artifact, localRepository() );
|
||||||
|
|
||||||
|
return artifact;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Artifact createRemoteArtifact( String artifactId, String version ) throws Exception
|
||||||
|
{
|
||||||
|
Artifact artifact = createArtifact( artifactId, version );
|
||||||
|
|
||||||
|
createArtifact( artifact, remoteRepository() );
|
||||||
|
|
||||||
|
return artifact;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void createLocalArtifact( Artifact artifact ) throws Exception
|
||||||
|
{
|
||||||
|
createArtifact( artifact, localRepository() );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void createRemoteArtifact( Artifact artifact ) throws Exception
|
||||||
|
{
|
||||||
|
createArtifact( artifact, remoteRepository() );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void createArtifact( Artifact artifact, ArtifactRepository repository ) throws Exception
|
||||||
|
{
|
||||||
|
String path = repository.pathOf( artifact );
|
||||||
|
|
||||||
|
File artifactFile = new File( repository.getBasedir(), path );
|
||||||
|
|
||||||
|
if ( !artifactFile.getParentFile().exists() )
|
||||||
|
{
|
||||||
|
artifactFile.getParentFile().mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
Writer writer = new FileWriter( artifactFile );
|
||||||
|
|
||||||
|
writer.write( artifact.getId() );
|
||||||
|
|
||||||
|
writer.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Artifact createArtifact( String artifactId, String version )
|
||||||
|
{
|
||||||
|
return createArtifact( artifactId, version, "jar" );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Artifact createArtifact( String artifactId, String version, String type )
|
||||||
|
{
|
||||||
|
return new DefaultArtifact( "maven", artifactId, version, type );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Artifact createArtifact( String groupId, String artifactId, String version, String type )
|
||||||
|
{
|
||||||
|
return new DefaultArtifact( groupId, artifactId, version, Artifact.SCOPE_COMPILE, type, type );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void deleteLocalArtifact( Artifact artifact ) throws Exception
|
||||||
|
{
|
||||||
|
deleteArtifact( artifact, localRepository() );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void deleteArtifact( Artifact artifact, ArtifactRepository repository ) throws Exception
|
||||||
|
{
|
||||||
|
String path = repository.pathOf( artifact );
|
||||||
|
|
||||||
|
File artifactFile = new File( repository.getBasedir(), path );
|
||||||
|
|
||||||
|
if ( artifactFile.exists() )
|
||||||
|
{
|
||||||
|
if ( !artifactFile.delete() )
|
||||||
|
{
|
||||||
|
throw new IOException( "Failure while attempting to delete artifact " + artifactFile );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,250 @@
|
||||||
|
package org.apache.maven.artifact.resolver;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2001-2004 The Apache Software Foundation.
|
||||||
|
*
|
||||||
|
* Licensed 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.maven.artifact.Artifact;
|
||||||
|
import org.apache.maven.artifact.ArtifactComponentTestCase;
|
||||||
|
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
|
||||||
|
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:jason@maven.org">Jason van Zyl </a>
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
// It would be cool if there was a hook that i could use to setup a test environment.
|
||||||
|
// I want to setup a local/remote repositories for testing but i don't want to have
|
||||||
|
// to change them when i change the layout of the repositories. So i want to generate
|
||||||
|
// the structure i want to test by using the artifact handler manager which dictates
|
||||||
|
// the layout used for a particular artifact type.
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class NewLayoutArtifactResolverTest
|
||||||
|
extends ArtifactComponentTestCase
|
||||||
|
{
|
||||||
|
private ArtifactResolver artifactResolver;
|
||||||
|
|
||||||
|
protected void setUp() throws Exception
|
||||||
|
{
|
||||||
|
super.setUp();
|
||||||
|
|
||||||
|
artifactResolver = (ArtifactResolver) lookup( ArtifactResolver.ROLE );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String component()
|
||||||
|
{
|
||||||
|
return "resolver";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testResolutionOfASingleArtifactWhereTheArtifactIsPresentInTheLocalRepository() throws Exception
|
||||||
|
{
|
||||||
|
Artifact a = createLocalArtifact( "a", "1.0" );
|
||||||
|
|
||||||
|
artifactResolver.resolve( a, remoteRepositories(), localRepository() );
|
||||||
|
|
||||||
|
assertLocalArtifactPresent( a );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testResolutionOfASingleArtifactWhereTheArtifactIsNotPresentLocallyAndMustBeRetrievedFromTheRemoteRepository()
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
Artifact b = createRemoteArtifact( "b", "1.0" );
|
||||||
|
deleteLocalArtifact( b );
|
||||||
|
|
||||||
|
artifactResolver.resolve( b, remoteRepositories(), localRepository() );
|
||||||
|
|
||||||
|
assertLocalArtifactPresent( b );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testResolutionOfASetOfArtifactsWhereTheArtifactsArePresentInTheLocalRepository() throws Exception
|
||||||
|
{
|
||||||
|
Set artifacts = new HashSet();
|
||||||
|
|
||||||
|
Artifact c = createLocalArtifact( "c", "1.0" );
|
||||||
|
|
||||||
|
Artifact d = createLocalArtifact( "d", "1.0" );
|
||||||
|
|
||||||
|
artifacts.add( c );
|
||||||
|
|
||||||
|
artifacts.add( d );
|
||||||
|
|
||||||
|
Set resolvedArtifacts = artifactResolver.resolve( artifacts, remoteRepositories(), localRepository() );
|
||||||
|
|
||||||
|
assertEquals( 2, resolvedArtifacts.size() );
|
||||||
|
|
||||||
|
// The artifacts have undergone no transformations and they are present so the original
|
||||||
|
// artifacts sent into the resolver should be returned as they were sent in.
|
||||||
|
|
||||||
|
assertTrue( resolvedArtifacts.contains( c ) );
|
||||||
|
|
||||||
|
assertTrue( resolvedArtifacts.contains( d ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testResolutionOfASetOfArtifactsWhereTheArtifactsAreNotPresentInTheLocalRepositoryAndMustBeRetrievedFromTheRemoteRepository()
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
Set artifacts = new HashSet();
|
||||||
|
|
||||||
|
Artifact e = createRemoteArtifact( "e", "1.0" );
|
||||||
|
deleteLocalArtifact( e );
|
||||||
|
|
||||||
|
Artifact f = createRemoteArtifact( "f", "1.0" );
|
||||||
|
deleteLocalArtifact( f );
|
||||||
|
|
||||||
|
artifacts.add( e );
|
||||||
|
|
||||||
|
artifacts.add( f );
|
||||||
|
|
||||||
|
Set resolvedArtifacts = artifactResolver.resolve( artifacts, remoteRepositories(), localRepository() );
|
||||||
|
|
||||||
|
assertEquals( 2, resolvedArtifacts.size() );
|
||||||
|
|
||||||
|
// The artifacts have undergone no transformations and they are present so the original
|
||||||
|
// artifacts sent into the resolver should be returned as they were sent in.
|
||||||
|
|
||||||
|
assertTrue( resolvedArtifacts.contains( e ) );
|
||||||
|
|
||||||
|
assertTrue( resolvedArtifacts.contains( f ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Artifact createArtifact( String groupId, String artifactId, String version, String type )
|
||||||
|
{
|
||||||
|
// for the anonymous classes
|
||||||
|
return super.createArtifact( groupId, artifactId, version, type );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testTransitiveResolutionWhereAllArtifactsArePresentInTheLocalRepository() throws Exception
|
||||||
|
{
|
||||||
|
Artifact g = createLocalArtifact( "g", "1.0" );
|
||||||
|
|
||||||
|
Artifact h = createLocalArtifact( "h", "1.0" );
|
||||||
|
|
||||||
|
ArtifactMetadataSource mds = new ArtifactMetadataSource() {
|
||||||
|
public Set retrieve( Artifact artifact, ArtifactRepository localRepository, List remoteRepositories )
|
||||||
|
{
|
||||||
|
Set dependencies = new HashSet();
|
||||||
|
|
||||||
|
if ( artifact.getArtifactId().equals( "g" ) )
|
||||||
|
{
|
||||||
|
dependencies.add( createArtifact( "maven", "h", "1.0", "jar" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
return dependencies;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ArtifactResolutionResult result = artifactResolver.resolveTransitively( g, remoteRepositories(),
|
||||||
|
localRepository(), mds );
|
||||||
|
|
||||||
|
assertEquals( 2, result.getArtifacts().size() );
|
||||||
|
|
||||||
|
assertTrue( result.getArtifacts().containsKey( g.getId() ) );
|
||||||
|
|
||||||
|
assertTrue( result.getArtifacts().containsKey( h.getId() ) );
|
||||||
|
|
||||||
|
assertLocalArtifactPresent( g );
|
||||||
|
|
||||||
|
assertLocalArtifactPresent( h );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testTransitiveResolutionWhereAllArtifactsAreNotPresentInTheLocalRepositoryAndMustBeRetrievedFromTheRemoteRepository()
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
Artifact i = createRemoteArtifact( "i", "1.0" );
|
||||||
|
deleteLocalArtifact( i );
|
||||||
|
|
||||||
|
Artifact j = createRemoteArtifact( "j", "1.0" );
|
||||||
|
deleteLocalArtifact( j );
|
||||||
|
|
||||||
|
ArtifactMetadataSource mds = new ArtifactMetadataSource() {
|
||||||
|
public Set retrieve( Artifact artifact, ArtifactRepository localRepository, List remoteRepositories )
|
||||||
|
{
|
||||||
|
Set dependencies = new HashSet();
|
||||||
|
|
||||||
|
if ( artifact.getArtifactId().equals( "i" ) )
|
||||||
|
{
|
||||||
|
dependencies.add( createArtifact( "maven", "j", "1.0", "jar" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
return dependencies;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ArtifactResolutionResult result = artifactResolver.resolveTransitively( i, remoteRepositories(),
|
||||||
|
localRepository(), mds );
|
||||||
|
|
||||||
|
assertEquals( 2, result.getArtifacts().size() );
|
||||||
|
|
||||||
|
assertTrue( result.getArtifacts().containsKey( i.getId() ) );
|
||||||
|
|
||||||
|
assertTrue( result.getArtifacts().containsKey( j.getId() ) );
|
||||||
|
|
||||||
|
assertLocalArtifactPresent( i );
|
||||||
|
|
||||||
|
assertLocalArtifactPresent( j );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testResolutionFailureWhenArtifactNotPresentInRemoteRepository() throws Exception
|
||||||
|
{
|
||||||
|
Artifact k = createArtifact( "k", "1.0" );
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
artifactResolver.resolve( k, remoteRepositories(), localRepository() );
|
||||||
|
fail( "Resolution succeeded when it should have failed" );
|
||||||
|
}
|
||||||
|
catch ( ArtifactResolutionException expected )
|
||||||
|
{
|
||||||
|
assertTrue( true );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testResolutionOfAnArtifactWhereOneRemoteRepositoryIsBadButOneIsGood() throws Exception
|
||||||
|
{
|
||||||
|
Artifact l = createRemoteArtifact( "l", "1.0" );
|
||||||
|
deleteLocalArtifact( l );
|
||||||
|
|
||||||
|
List repositories = new ArrayList();
|
||||||
|
repositories.add( remoteRepository() );
|
||||||
|
repositories.add( badRemoteRepository() );
|
||||||
|
|
||||||
|
artifactResolver.resolve( l, repositories, localRepository() );
|
||||||
|
|
||||||
|
assertLocalArtifactPresent( l );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
public void testResolutionOfASingleArtifactWhereTheArtifactIsNotPresentLocallyAndMustBeRetrievedFromTheRemoteRepositoryAndLocalCannotBeCreated()
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
Artifact m = createRemoteArtifact( "m", "1.0" );
|
||||||
|
|
||||||
|
artifactResolver.resolve( m, remoteRepositories(), badLocalRepository() );
|
||||||
|
|
||||||
|
// TODO [failing test case]: throw and handle a more informative exception
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue