Return-Path: Delivered-To: apmail-maven-m2-dev-archive@www.apache.org Received: (qmail 71214 invoked from network); 22 Mar 2005 03:51:59 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 22 Mar 2005 03:51:59 -0000 Received: (qmail 10007 invoked by uid 500); 22 Mar 2005 03:51:58 -0000 Delivered-To: apmail-maven-m2-dev-archive@maven.apache.org Received: (qmail 9978 invoked by uid 500); 22 Mar 2005 03:51:58 -0000 Mailing-List: contact m2-dev-help@maven.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: List-Id: "Maven 2 Developers List" Reply-To: "Maven 2 Developers List" Delivered-To: mailing list m2-dev@maven.apache.org Received: (qmail 9963 invoked by uid 500); 22 Mar 2005 03:51:58 -0000 Delivered-To: apmail-maven-components-cvs@apache.org Received: (qmail 9960 invoked by uid 99); 22 Mar 2005 03:51:58 -0000 X-ASF-Spam-Status: No, hits=-9.8 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from minotaur.apache.org (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.28) with SMTP; Mon, 21 Mar 2005 19:51:57 -0800 Received: (qmail 71193 invoked by uid 1881); 22 Mar 2005 03:51:56 -0000 Date: 22 Mar 2005 03:51:56 -0000 Message-ID: <20050322035156.71192.qmail@minotaur.apache.org> From: jdcasey@apache.org To: maven-components-cvs@apache.org Subject: cvs commit: maven-components/maven-artifact/src/test/java/org/apache/maven/artifact/resolver NewLayoutArtifactResolverTest.java X-Virus-Checked: Checked X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N jdcasey 2005/03/21 19:51:56 Added: maven-artifact/src/test/java/org/apache/maven/artifact NewLayoutArtifactComponentTestCase.java maven-artifact/src/test/java/org/apache/maven/artifact/resolver NewLayoutArtifactResolverTest.java Log: o Added artifact resolver test that uses the new repository layout. Revision Changes Path 1.1 maven-components/maven-artifact/src/test/java/org/apache/maven/artifact/NewLayoutArtifactComponentTestCase.java Index: NewLayoutArtifactComponentTestCase.java =================================================================== /* * 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 Jason van Zyl * @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 ); } } } } 1.1 maven-components/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/NewLayoutArtifactResolverTest.java Index: NewLayoutArtifactResolverTest.java =================================================================== 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 Jason van Zyl * @version $Id: NewLayoutArtifactResolverTest.java,v 1.1 2005/03/22 03:51:56 jdcasey Exp $ */ // 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 Jason van Zyl * @version $Id: NewLayoutArtifactResolverTest.java,v 1.1 2005/03/22 03:51:56 jdcasey Exp $ */ 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 } */ }