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:
John Dennis Casey 2005-03-22 03:51:56 +00:00
parent e54ce35409
commit 52d4ebc8fe
2 changed files with 510 additions and 0 deletions

View File

@ -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 );
}
}
}
}

View File

@ -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
}
*/
}