Coverage Report - org.apache.maven.shared.test.plugin.PluginTestTool
 
Classes in this File Line Coverage Branch Coverage Complexity
PluginTestTool
0%
0/27
0%
0/2
2
PluginTestTool$1
0%
0/5
N/A
2
 
 1  
 package org.apache.maven.shared.test.plugin;
 2  
 
 3  
 /*
 4  
  * Licensed to the Apache Software Foundation (ASF) under one
 5  
  * or more contributor license agreements.  See the NOTICE file
 6  
  * distributed with this work for additional information
 7  
  * regarding copyright ownership.  The ASF licenses this file
 8  
  * to you under the Apache License, Version 2.0 (the
 9  
  * "License"); you may not use this file except in compliance
 10  
  * with the License.  You may obtain a copy of the License at
 11  
  *
 12  
  *   http://www.apache.org/licenses/LICENSE-2.0
 13  
  *
 14  
  * Unless required by applicable law or agreed to in writing,
 15  
  * software distributed under the License is distributed on an
 16  
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 17  
  * KIND, either express or implied.  See the License for the
 18  
  * specific language governing permissions and limitations
 19  
  * under the License.
 20  
  */
 21  
 
 22  
 import org.apache.maven.project.MavenProject;
 23  
 import org.codehaus.plexus.component.annotations.Component;
 24  
 import org.codehaus.plexus.component.annotations.Requirement;
 25  
 import org.codehaus.plexus.util.FileUtils;
 26  
 
 27  
 import java.io.File;
 28  
 import java.io.IOException;
 29  
 
 30  
 /**
 31  
  * Test tool that provides a single point of access for staging a plugin artifact - along with its
 32  
  * POM lineage - into a clean test-time local repository. This involves modifying the plugin POM to
 33  
  * provide a stable test-time version for test-build POMs to reference, then installing the plugin
 34  
  * jar and associated POMs (including those ancestors that are reachable using <relativePath>)
 35  
  * into the test local repository.
 36  
  *
 37  
  * <p>
 38  
  * <b>WARNING:</b> Currently, the <code>RepositoryTool</code> will not
 39  
  * resolve parent POMs that exist <b>only</b> in your normal local repository, and are not reachable
 40  
  * using the relativePath element. This may result in failed test builds, as one or more of the
 41  
  * plugin's ancestor POMs cannot be resolved.
 42  
  * </p>
 43  
  *
 44  
  * @author jdcasey
 45  
  * @version $Id: PluginTestTool.java 1185951 2011-10-19 02:43:50Z ifedorenko $
 46  
  */
 47  
 @Component( role = PluginTestTool.class )
 48  0
 public class PluginTestTool
 49  
 {
 50  
     /** Plexus role */
 51  0
     public static final String ROLE = PluginTestTool.class.getName();
 52  
 
 53  
     @Requirement
 54  
     private ProjectTool projectTool;
 55  
 
 56  
     @Requirement
 57  
     private RepositoryTool repositoryTool;
 58  
 
 59  
     /**
 60  
      * Stage the plugin, using a stable version, into a temporary local-repository directory that is
 61  
      * generated by this method. When the plugin is staged, return the local repository base directory
 62  
      * for use in test builds.
 63  
      *
 64  
      * @param pomFile current POM file
 65  
      * @param testVersion The test version for the plugin, used for reference in test-build POMs and
 66  
      *   fully-qualified goals
 67  
      * @return The base-directory location of the generated local repository
 68  
      * @throws TestToolsException if any
 69  
      */
 70  
     public File preparePluginForIntegrationTesting( File pomFile, String testVersion )
 71  
         throws TestToolsException
 72  
     {
 73  0
         return prepareForTesting( pomFile, testVersion, false, null );
 74  
     }
 75  
 
 76  
     /**
 77  
      * Stage the plugin, using a stable version, into a temporary local-repository directory that is
 78  
      * generated by this method. When the plugin is staged, return the local repository base directory
 79  
      * for use in test builds. This method also skips unit testing during plugin jar production,
 80  
      * since it is assumed that executing these tests would lead to a recursive test-and-build loop.
 81  
      *
 82  
      * @param pomFile current POM file
 83  
      * @param testVersion The test version for the plugin, used for reference in test-build POMs and
 84  
      *   fully-qualified goals
 85  
      * @return The base-directory location of the generated local repository
 86  
      * @throws TestToolsException if any
 87  
      */
 88  
     public File preparePluginForUnitTestingWithMavenBuilds( File pomFile, String testVersion )
 89  
         throws TestToolsException
 90  
     {
 91  0
         return prepareForTesting( pomFile, testVersion, true, null );
 92  
     }
 93  
 
 94  
     /**
 95  
      * Stage the plugin, using a stable version, into the specified local-repository directory.
 96  
      * When the plugin is staged, return the local repository base directory for verification.
 97  
      *
 98  
      * @param pomFile current POM file
 99  
      * @param testVersion The test version for the plugin, used for reference in test-build POMs and
 100  
      *   fully-qualified goals
 101  
      * @param localRepositoryDir The base-directory location of the test local repository, into which
 102  
      *   the plugin's test version should be staged.
 103  
      * @return The base-directory location of the generated local repository
 104  
      * @throws TestToolsException if any
 105  
      */
 106  
     public File preparePluginForIntegrationTesting( File pomFile, String testVersion, File localRepositoryDir )
 107  
         throws TestToolsException
 108  
     {
 109  0
         return prepareForTesting( pomFile, testVersion, false, localRepositoryDir );
 110  
     }
 111  
 
 112  
     /**
 113  
      * Stage the plugin, using a stable version, into the specified local-repository directory.
 114  
      * When the plugin is staged, return the local repository base directory for verification. This
 115  
      * method also skips unit testing during plugin jar production, since it is assumed that
 116  
      * executing these tests would lead to a recursive test-and-build loop.
 117  
      *
 118  
      * @param pomFile current POM file
 119  
      * @param testVersion The test version for the plugin, used for reference in test-build POMs and
 120  
      *   fully-qualified goals
 121  
      * @param localRepositoryDir The base-directory location of the test local repository, into which
 122  
      *   the plugin's test version should be staged.
 123  
      * @return The base-directory location of the generated local repository
 124  
      * @throws TestToolsException if any
 125  
      */
 126  
     public File preparePluginForUnitTestingWithMavenBuilds( File pomFile, String testVersion, File localRepositoryDir )
 127  
         throws TestToolsException
 128  
     {
 129  0
         return prepareForTesting( pomFile, testVersion, true, localRepositoryDir );
 130  
     }
 131  
 
 132  
     private File prepareForTesting( File pomFile, String testVersion, boolean skipUnitTests, File localRepositoryDir )
 133  
         throws TestToolsException
 134  
     {
 135  0
         File realProjectDir = pomFile.getParentFile();
 136  
 
 137  
         try
 138  
         {
 139  0
             realProjectDir = realProjectDir.getCanonicalFile();
 140  
         }
 141  0
         catch ( IOException e )
 142  
         {
 143  0
             throw new TestToolsException( "Failed to stage plugin for testing.", e );
 144  0
         }
 145  
 
 146  
         try
 147  
         {
 148  0
             final File tmpDir = File.createTempFile( "plugin-IT-staging-project", "" );
 149  
 
 150  0
             tmpDir.delete();
 151  
 
 152  0
             tmpDir.mkdirs();
 153  
 
 154  0
             Runtime.getRuntime().addShutdownHook( new Thread( new Runnable()
 155  0
             {
 156  
 
 157  
                 public void run()
 158  
                 {
 159  
                     try
 160  
                     {
 161  0
                         FileUtils.deleteDirectory( tmpDir );
 162  
                     }
 163  0
                     catch ( IOException e )
 164  
                     {
 165  
                         // it'll get cleaned up when the temp dir is purged next...
 166  0
                     }
 167  0
                 }
 168  
 
 169  
             } ) );
 170  
 
 171  0
             FileUtils.copyDirectoryStructure( realProjectDir, tmpDir );
 172  
         }
 173  0
         catch ( IOException e )
 174  
         {
 175  0
             throw new TestToolsException( "Failed to create temporary staging directory for plugin project.", e );
 176  0
         }
 177  
 
 178  0
         File buildLog = new File( "target/test-build-logs/setup.build.log" );
 179  
 
 180  0
         buildLog.getParentFile().mkdirs();
 181  
 
 182  0
         File localRepoDir = localRepositoryDir;
 183  
 
 184  0
         if ( localRepoDir == null )
 185  
         {
 186  0
             localRepoDir = new File( "target/test-local-repository" );
 187  
         }
 188  
 
 189  0
         MavenProject project = projectTool.packageProjectArtifact( pomFile, testVersion, skipUnitTests, buildLog );
 190  
 
 191  0
         repositoryTool.createLocalRepositoryFromComponentProject( project, new File( realProjectDir, "pom.xml" ),
 192  
                                                                   localRepoDir );
 193  
 
 194  0
         return localRepoDir;
 195  
     }
 196  
 
 197  
 }