You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2008/02/18 22:56:18 UTC

svn commit: r628876 - in /maven/plugins/trunk/maven-assembly-plugin/src: main/java/org/apache/maven/plugin/assembly/archive/task/ test/java/org/apache/maven/plugin/assembly/archive/task/ test/java/org/apache/maven/plugin/assembly/archive/task/testutils/

Author: jdcasey
Date: Mon Feb 18 13:56:15 2008
New Revision: 628876

URL: http://svn.apache.org/viewvc?rev=628876&view=rev
Log:
[MASSEMBLY-254] Add more protections against invalid POMs when working with DependencySets.

Modified:
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTask.java
    maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java
    maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/ArtifactMock.java
    maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTask.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTask.java?rev=628876&r1=628875&r2=628876&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTask.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTask.java Mon Feb 18 13:56:15 2008
@@ -23,6 +23,7 @@
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.model.Model;
 import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
 import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException;
 import org.apache.maven.plugin.assembly.archive.ArchiveCreationException;
@@ -140,12 +141,14 @@
             try
             {
                 depProject = projectBuilder.buildFromRepository( depArtifact, configSource.getRemoteRepositories(),
-                                                                 configSource.getLocalRepository(), true );
+                                                                 configSource.getLocalRepository() );
             }
             catch ( ProjectBuildingException e )
             {
-                throw new ArchiveCreationException( "Error retrieving POM of module-dependency: " + depArtifact.getId()
-                    + "; Reason: " + e.getMessage(), e );
+                logger.debug( "Error retrieving POM of module-dependency: " + depArtifact.getId()
+                    + "; Reason: " + e.getMessage() + "\n\nBuilding stub project instance." );
+
+                depProject = buildProjectStub( depArtifact );
             }
 
             if ( NON_ARCHIVE_DEPENDENCY_TYPES.contains( depArtifact.getType() ) )
@@ -174,6 +177,19 @@
                 task.execute( archiver, configSource );
             }
         }
+    }
+
+    private MavenProject buildProjectStub( Artifact depArtifact )
+    {
+        Model model = new Model();
+        model.setGroupId( depArtifact.getGroupId() );
+        model.setArtifactId( depArtifact.getArtifactId() );
+        model.setVersion( depArtifact.getBaseVersion() );
+        model.setPackaging( depArtifact.getType() );
+
+        model.setDescription( "Stub for " + depArtifact.getId() );
+
+        return new MavenProject( model );
     }
 
     protected Set resolveDependencyArtifacts( DependencySet dependencySet, AssemblerConfigurationSource configSource )

Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java?rev=628876&r1=628875&r2=628876&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java Mon Feb 18 13:56:15 2008
@@ -30,6 +30,7 @@
 import org.apache.maven.plugin.assembly.model.DependencySet;
 import org.apache.maven.plugin.assembly.testutils.MockManager;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuildingException;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.logging.console.ConsoleLogger;
 
@@ -48,7 +49,8 @@
     private MockManager mockManager = new MockManager();
 
     public void testAddDependencySet_ShouldInterpolateDefaultOutputFileNameMapping()
-        throws AssemblyFormattingException, ArchiveCreationException, InvalidAssemblerConfigurationException, IOException
+        throws AssemblyFormattingException, ArchiveCreationException,
+        InvalidAssemblerConfigurationException, IOException
     {
         String outDir = "tmp/";
         String mainAid = "main";
@@ -71,7 +73,8 @@
 
         MavenProject mainProject = new MavenProject( mainModel );
 
-        ArtifactMock mainArtifactMock = new ArtifactMock( mockManager, mainGid, mainAid, mainVer, "jar", false );
+        ArtifactMock mainArtifactMock = new ArtifactMock( mockManager, mainGid, mainAid, mainVer,
+                                                          "jar", false );
 
         mainProject.setArtifact( mainArtifactMock.getArtifact() );
 
@@ -83,13 +86,16 @@
 
         MavenProject depProject = new MavenProject( depModel );
 
-        ArtifactMock depArtifactMock = new ArtifactMock( mockManager, depGid, depAid, depVer, depExt, false );
+        ArtifactMock depArtifactMock = new ArtifactMock( mockManager, depGid, depAid, depVer,
+                                                         depExt, false );
 
         File newFile = depArtifactMock.setNewFile();
 
         depProject.setArtifact( depArtifactMock.getArtifact() );
 
-        MockAndControlForAddDependencySetsTask macTask = new MockAndControlForAddDependencySetsTask( mockManager, mainProject );
+        MockAndControlForAddDependencySetsTask macTask = new MockAndControlForAddDependencySetsTask(
+                                                                                                     mockManager,
+                                                                                                     mainProject );
 
         macTask.expectBuildFromRepository( depProject );
         macTask.expectCSGetFinalName( mainAid + "-" + mainVer );
@@ -104,7 +110,8 @@
 
         Logger logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "test" );
 
-        AddDependencySetsTask task = new AddDependencySetsTask( Collections.singletonList( ds ), depProject, macTask.projectBuilder,
+        AddDependencySetsTask task = new AddDependencySetsTask( Collections.singletonList( ds ),
+                                                                depProject, macTask.projectBuilder,
                                                                 macTask.dependencyResolver, logger );
 
         task.addDependencySet( ds, macTask.archiver, macTask.configSource );
@@ -113,11 +120,13 @@
     }
 
     public void testAddDependencySet_ShouldNotAddDependenciesWhenProjectHasNone()
-        throws AssemblyFormattingException, ArchiveCreationException, InvalidAssemblerConfigurationException
+        throws AssemblyFormattingException, ArchiveCreationException,
+        InvalidAssemblerConfigurationException
     {
         MavenProject project = new MavenProject( new Model() );
 
-        MockAndControlForAddDependencySetsTask macTask = new MockAndControlForAddDependencySetsTask( mockManager );
+        MockAndControlForAddDependencySetsTask macTask = new MockAndControlForAddDependencySetsTask(
+                                                                                                     mockManager );
 
         macTask.expectCSGetRepositories( null, null );
         macTask.expectResolveDependencies( Collections.EMPTY_SET );
@@ -129,7 +138,8 @@
 
         Logger logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "test" );
 
-        AddDependencySetsTask task = new AddDependencySetsTask( Collections.singletonList( ds ), project, macTask.projectBuilder,
+        AddDependencySetsTask task = new AddDependencySetsTask( Collections.singletonList( ds ),
+                                                                project, macTask.projectBuilder,
                                                                 macTask.dependencyResolver, logger );
 
         task.addDependencySet( ds, null, macTask.configSource );
@@ -137,20 +147,72 @@
         mockManager.verifyAll();
     }
 
+    // TODO: Find a better way of testing the project-stubbing behavior when a ProjectBuildingException takes place.
+    public void testAddDependencySet_ShouldNotAddDependenciesWhenProjectIsStubbed()
+        throws AssemblyFormattingException, ArchiveCreationException,
+        InvalidAssemblerConfigurationException, IOException
+    {
+        MavenProject project = new MavenProject( new Model() );
+
+        ProjectBuildingException pbe = new ProjectBuildingException( "test", "Test error." );
+
+        MockAndControlForAddDependencySetsTask macTask = new MockAndControlForAddDependencySetsTask(
+                                                                                                     mockManager );
+
+        String gid = "org.test";
+        String aid = "test-dep";
+        String version = "2.0-SNAPSHOT";
+        String type = "jar";
+
+        File file = new File( "dep-artifact.jar" );
+
+        ArtifactMock depMock = new ArtifactMock( mockManager, gid, aid, version, type, true );
+        depMock.setBaseVersion( version );
+        depMock.setFile( file );
+
+        File destFile = new File( "assembly-dep-set.zip" );
+
+        macTask.expectGetDestFile( destFile );
+        macTask.expectBuildFromRepository( pbe );
+        macTask.expectCSGetRepositories( null, null );
+        macTask.expectCSGetFinalName( "final-name" );
+        macTask.expectResolveDependencies( Collections.singleton( depMock.getArtifact() ) );
+        macTask.expectAddFile( file, "out/" + aid + "-" + version + "." + type );
+
+        DependencySet ds = new DependencySet();
+        ds.setOutputDirectory( "/out" );
+
+        mockManager.replayAll();
+
+        Logger logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "test" );
+
+        AddDependencySetsTask task = new AddDependencySetsTask( Collections.singletonList( ds ),
+                                                                project, macTask.projectBuilder,
+                                                                macTask.dependencyResolver, logger );
+
+        task.addDependencySet( ds, macTask.archiver, macTask.configSource );
+
+        mockManager.verifyAll();
+    }
+
     public void testAddDependencySet_ShouldAddOneDependencyFromProjectWithoutUnpacking()
-        throws AssemblyFormattingException, ArchiveCreationException, IOException, InvalidAssemblerConfigurationException
+        throws AssemblyFormattingException, ArchiveCreationException, IOException,
+        InvalidAssemblerConfigurationException
     {
         verifyOneDependencyAdded( "out", false );
     }
 
     public void testAddDependencySet_ShouldAddOneDependencyFromProjectUnpacked()
-        throws AssemblyFormattingException, ArchiveCreationException, IOException, InvalidAssemblerConfigurationException
+        throws AssemblyFormattingException, ArchiveCreationException, IOException,
+        InvalidAssemblerConfigurationException
     {
         verifyOneDependencyAdded( "out", true );
     }
 
-    private void verifyOneDependencyAdded( String outputLocation, boolean unpack )
-        throws AssemblyFormattingException, ArchiveCreationException, IOException, InvalidAssemblerConfigurationException
+    private void verifyOneDependencyAdded( String outputLocation,
+                                           boolean unpack )
+        throws AssemblyFormattingException, ArchiveCreationException, IOException,
+        InvalidAssemblerConfigurationException
     {
         MavenProject project = new MavenProject( new Model() );
 
@@ -163,9 +225,11 @@
         ds.setDirectoryMode( Integer.toString( 10, 8 ) );
         ds.setFileMode( Integer.toString( 10, 8 ) );
 
-        MockAndControlForAddDependencySetsTask macTask = new MockAndControlForAddDependencySetsTask( mockManager );
+        MockAndControlForAddDependencySetsTask macTask = new MockAndControlForAddDependencySetsTask(
+                                                                                                     mockManager );
 
-        ArtifactMock artifactMock = new ArtifactMock( mockManager, "group", "artifact", "version", "jar", false );
+        ArtifactMock artifactMock = new ArtifactMock( mockManager, "group", "artifact", "version",
+                                                      "jar", false );
         File artifactFile = artifactMock.setNewFile();
 
         macTask.expectCSGetRepositories( null, null );
@@ -173,7 +237,10 @@
 
         if ( unpack )
         {
-            macTask.expectAddArchivedFileSet( artifactFile, outputLocation + "/", AddArtifactTask.DEFAULT_INCLUDES_ARRAY, null );
+            macTask.expectAddArchivedFileSet( artifactFile,
+                                              outputLocation + "/",
+                                              AddArtifactTask.DEFAULT_INCLUDES_ARRAY,
+                                              null );
             macTask.expectModeChange( -1, -1, 10, 10, 2 );
         }
         else
@@ -190,7 +257,8 @@
 
         Logger logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "test" );
 
-        AddDependencySetsTask task = new AddDependencySetsTask( Collections.singletonList( ds ), project, macTask.projectBuilder,
+        AddDependencySetsTask task = new AddDependencySetsTask( Collections.singletonList( ds ),
+                                                                project, macTask.projectBuilder,
                                                                 macTask.dependencyResolver, logger );
 
         mockManager.replayAll();
@@ -205,9 +273,11 @@
     {
         MavenProject project = new MavenProject( new Model() );
 
-        MockAndControlForAddDependencySetsTask macTask = new MockAndControlForAddDependencySetsTask( mockManager );
+        MockAndControlForAddDependencySetsTask macTask = new MockAndControlForAddDependencySetsTask(
+                                                                                                     mockManager );
 
-        ArtifactMock artifactMock = new ArtifactMock( mockManager, "group", "artifact", "version", "jar", false );
+        ArtifactMock artifactMock = new ArtifactMock( mockManager, "group", "artifact", "version",
+                                                      "jar", false );
 
         macTask.expectCSGetRepositories( null, null );
         macTask.expectResolveDependencies( Collections.singleton( artifactMock.getArtifact() ) );
@@ -220,8 +290,10 @@
 
         mockManager.replayAll();
 
-        AddDependencySetsTask task = new AddDependencySetsTask( Collections.singletonList( dependencySet ), project,
-                                                                macTask.projectBuilder, macTask.dependencyResolver, logger );
+        AddDependencySetsTask task = new AddDependencySetsTask(
+                                                                Collections.singletonList( dependencySet ),
+                                                                project, macTask.projectBuilder,
+                                                                macTask.dependencyResolver, logger );
 
         Set result = task.resolveDependencyArtifacts( dependencySet, macTask.configSource );
 
@@ -237,7 +309,8 @@
     {
         MavenProject project = new MavenProject( new Model() );
 
-        MockAndControlForAddDependencySetsTask macTask = new MockAndControlForAddDependencySetsTask( mockManager );
+        MockAndControlForAddDependencySetsTask macTask = new MockAndControlForAddDependencySetsTask(
+                                                                                                     mockManager );
 
         Set artifacts = new HashSet();
 
@@ -272,7 +345,9 @@
 
         mockManager.replayAll();
 
-        AddDependencySetsTask task = new AddDependencySetsTask( Collections.singletonList( dependencySet ), project, null,
+        AddDependencySetsTask task = new AddDependencySetsTask(
+                                                                Collections.singletonList( dependencySet ),
+                                                                project, null,
                                                                 macTask.dependencyResolver, logger );
 
         Set result = task.resolveDependencyArtifacts( dependencySet, macTask.configSource );
@@ -289,7 +364,8 @@
     {
         MavenProject project = new MavenProject( new Model() );
 
-        MockAndControlForAddDependencySetsTask macTask = new MockAndControlForAddDependencySetsTask( mockManager );
+        MockAndControlForAddDependencySetsTask macTask = new MockAndControlForAddDependencySetsTask(
+                                                                                                     mockManager );
 
         Set artifacts = new HashSet();
 
@@ -323,7 +399,9 @@
 
         mockManager.replayAll();
 
-        AddDependencySetsTask task = new AddDependencySetsTask( Collections.singletonList( dependencySet ), project, null,
+        AddDependencySetsTask task = new AddDependencySetsTask(
+                                                                Collections.singletonList( dependencySet ),
+                                                                project, null,
                                                                 macTask.dependencyResolver, logger );
 
         Set result = task.resolveDependencyArtifacts( dependencySet, macTask.configSource );

Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/ArtifactMock.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/ArtifactMock.java?rev=628876&r1=628875&r2=628876&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/ArtifactMock.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/ArtifactMock.java Mon Feb 18 13:56:15 2008
@@ -135,7 +135,7 @@
 
     public void setFile( File destination )
     {
-        if ( ( file != null ) && ( file == null ) )
+        if ( ( destination != null ) && ( file == null ) )
         {
             artifact.getFile();
             artifactCtl.setReturnValue( destination, MockControl.ZERO_OR_MORE );

Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java?rev=628876&r1=628875&r2=628876&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java Mon Feb 18 13:56:15 2008
@@ -191,11 +191,25 @@
         configSourceCtl.setReturnValue( remoteRepos, MockControl.ONE_OR_MORE );
     }
 
+    public void expectBuildFromRepository( ProjectBuildingException error )
+    {
+        try
+        {
+            projectBuilder.buildFromRepository( null, null, null );
+            projectBuilderCtl.setMatcher( MockControl.ALWAYS_MATCHER );
+            projectBuilderCtl.setThrowable( error, MockControl.ONE_OR_MORE );
+        }
+        catch ( ProjectBuildingException e )
+        {
+            Assert.fail( "should never happen" );
+        }
+    }
+
     public void expectBuildFromRepository( MavenProject project )
     {
         try
         {
-            projectBuilder.buildFromRepository( null, null, null, true );
+            projectBuilder.buildFromRepository( null, null, null );
             projectBuilderCtl.setMatcher( MockControl.ALWAYS_MATCHER );
             projectBuilderCtl.setReturnValue( project, MockControl.ONE_OR_MORE );
         }