blob: 9c181dcaea2974d0e850130d143ded92d68ddf3b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.plugins.repository;
import static org.apache.maven.plugins.repository.testutil.Assertions.assertZipContents;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.testing.AbstractMojoTestCase;
import org.apache.maven.plugins.repository.testutil.Assertions;
import org.apache.maven.plugins.repository.testutil.TestInputHandler;
import org.codehaus.plexus.components.interactivity.InputHandler;
import org.codehaus.plexus.util.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.Stack;
/**
* @author <a href="mailto:oching@exist.com">Maria Odea Ching</a>
*/
public class BundleCreateMojoTest
extends AbstractMojoTestCase
{
protected void setUp()
throws Exception
{
// required for mojo lookups to work
super.setUp();
}
/**
* Test for repository plugin with project.packaging == pom
*
* @throws Exception
*/
public void testDefaults_PomPackaging()
throws Exception
{
File testPom = new File( getBasedir(), "src/test/resources/unit/pom-only/pom.xml" );
try
{
BundleCreateMojo mojo = (BundleCreateMojo) lookupMojo( "bundle-create", testPom );
mojo.execute();
}
catch ( Exception e )
{
e.printStackTrace();
}
File bundleSource =
new File( getBasedir(), "target/test/unit/pom-only/target/pom-only-bundle.jar" );
assertTrue( FileUtils.fileExists( bundleSource.getAbsolutePath() ) );
Set<String> entryNames = new HashSet<String>();
entryNames.add( "pom.xml" );
entryNames.add( "META-INF/MANIFEST.MF" );
entryNames.add( "META-INF/" );
assertZipContents( entryNames, Assertions.EMPTY_ENTRY_NAMES, bundleSource );
}
/**
* Test for repository plugin default configuration
*
* @throws Exception
*/
public void testDefaultconfiguration()
throws Exception
{
try
{
createTestJars( "default-configuration", true, true, getBasedir()
+ "/target/test/unit/default-configuration/target" );
}
catch ( IOException ie )
{
ie.printStackTrace();
}
File testPom = new File( getBasedir(), "src/test/resources/unit/default-configuration/pom.xml" );
try
{
BundleCreateMojo mojo = (BundleCreateMojo) lookupMojo( "bundle-create", testPom );
mojo.execute();
}
catch ( Exception e )
{
e.printStackTrace();
}
File bundleSource =
new File( getBasedir(), "target/test/unit/default-configuration/target/default-configuration-bundle.jar" );
assertTrue( FileUtils.fileExists( bundleSource.getAbsolutePath() ) );
Set<String> entryNames = new HashSet<String>();
entryNames.add( "default-configuration-javadoc.jar" );
entryNames.add( "default-configuration-sources.jar" );
entryNames.add( "default-configuration.jar" );
entryNames.add( "pom.xml" );
entryNames.add( "META-INF/MANIFEST.MF" );
entryNames.add( "META-INF/" );
assertZipContents( entryNames, Assertions.EMPTY_ENTRY_NAMES, bundleSource );
}
public void testDefaultconfiguration_RemoveOne()
throws Exception
{
try
{
createTestJars( "default-configuration", true, true, getBasedir()
+ "/target/test/unit/default-configuration/target" );
}
catch ( IOException ie )
{
ie.printStackTrace();
}
File testPom = new File( getBasedir(), "src/test/resources/unit/default-configuration/pom.xml" );
try
{
BundleCreateMojo mojo = (BundleCreateMojo) lookupMojo( "bundle-create", testPom );
// NOTE: This is sensitive to the lookupMojo method timing...
TestInputHandler ih = (TestInputHandler) lookup( InputHandler.ROLE, "default" );
Stack<String> responses = new Stack<String>();
responses.push( "2" );
ih.setLineResponses( responses );
mojo.execute();
}
catch ( Exception e )
{
e.printStackTrace();
}
File bundleSource =
new File( getBasedir(), "target/test/unit/default-configuration/target/default-configuration-bundle.jar" );
assertTrue( FileUtils.fileExists( bundleSource.getAbsolutePath() ) );
Set<String> entryNames = new HashSet<String>();
entryNames.add( "default-configuration-sources.jar" );
entryNames.add( "default-configuration.jar" );
entryNames.add( "pom.xml" );
entryNames.add( "META-INF/MANIFEST.MF" );
entryNames.add( "META-INF/" );
Set<String> bannedNames = new HashSet<String>();
bannedNames.add( "default-configuration-javadoc.jar" );
assertZipContents( entryNames, bannedNames, bundleSource );
}
public void testDefaultconfiguration_RemoveTwo()
throws Exception
{
try
{
createTestJars( "default-configuration", true, true, getBasedir()
+ "/target/test/unit/default-configuration/target" );
}
catch ( IOException ie )
{
ie.printStackTrace();
}
File testPom = new File( getBasedir(), "src/test/resources/unit/default-configuration/pom.xml" );
try
{
BundleCreateMojo mojo = (BundleCreateMojo) lookupMojo( "bundle-create", testPom );
// NOTE: This is sensitive to the lookupMojo method timing...
TestInputHandler ih = (TestInputHandler) lookup( InputHandler.ROLE, "default" );
Stack<String> responses = new Stack<String>();
responses.push( "2,3" );
ih.setLineResponses( responses );
mojo.execute();
}
catch ( Exception e )
{
e.printStackTrace();
}
File bundleSource =
new File( getBasedir(), "target/test/unit/default-configuration/target/default-configuration-bundle.jar" );
assertTrue( FileUtils.fileExists( bundleSource.getAbsolutePath() ) );
Set<String> entryNames = new HashSet<String>();
entryNames.add( "default-configuration.jar" );
entryNames.add( "pom.xml" );
entryNames.add( "META-INF/MANIFEST.MF" );
entryNames.add( "META-INF/" );
Set<String> bannedNames = new HashSet<String>();
bannedNames.add( "default-configuration-javadoc.jar" );
bannedNames.add( "default-configuration-sources.jar" );
assertZipContents( entryNames, bannedNames, bundleSource );
}
public void testDefaultconfiguration_RemoveTwoUnordered()
throws Exception
{
try
{
createTestJars( "default-configuration", true, true, getBasedir()
+ "/target/test/unit/default-configuration/target" );
}
catch ( IOException ie )
{
ie.printStackTrace();
}
File testPom = new File( getBasedir(), "src/test/resources/unit/default-configuration/pom.xml" );
try
{
BundleCreateMojo mojo = (BundleCreateMojo) lookupMojo( "bundle-create", testPom );
// NOTE: This is sensitive to the lookupMojo method timing...
TestInputHandler ih = (TestInputHandler) lookup( InputHandler.ROLE, "default" );
Stack<String> responses = new Stack<String>();
responses.push( "3,2" );
ih.setLineResponses( responses );
mojo.execute();
}
catch ( Exception e )
{
e.printStackTrace();
}
File bundleSource =
new File( getBasedir(), "target/test/unit/default-configuration/target/default-configuration-bundle.jar" );
assertTrue( FileUtils.fileExists( bundleSource.getAbsolutePath() ) );
Set<String> entryNames = new HashSet<String>();
entryNames.add( "default-configuration.jar" );
entryNames.add( "pom.xml" );
entryNames.add( "META-INF/MANIFEST.MF" );
entryNames.add( "META-INF/" );
Set<String> bannedNames = new HashSet<String>();
bannedNames.add( "default-configuration-javadoc.jar" );
bannedNames.add( "default-configuration-sources.jar" );
assertZipContents( entryNames, bannedNames, bundleSource );
}
public void testDefaultconfiguration_RemoveTwoWithSpace()
throws Exception
{
try
{
createTestJars( "default-configuration", true, true, getBasedir()
+ "/target/test/unit/default-configuration/target" );
}
catch ( IOException ie )
{
ie.printStackTrace();
}
File testPom = new File( getBasedir(), "src/test/resources/unit/default-configuration/pom.xml" );
try
{
BundleCreateMojo mojo = (BundleCreateMojo) lookupMojo( "bundle-create", testPom );
// NOTE: This is sensitive to the lookupMojo method timing...
TestInputHandler ih = (TestInputHandler) lookup( InputHandler.ROLE, "default" );
Stack<String> responses = new Stack<String>();
responses.push( "2, 3" );
ih.setLineResponses( responses );
mojo.execute();
}
catch ( Exception e )
{
e.printStackTrace();
}
File bundleSource =
new File( getBasedir(), "target/test/unit/default-configuration/target/default-configuration-bundle.jar" );
assertTrue( FileUtils.fileExists( bundleSource.getAbsolutePath() ) );
Set<String> entryNames = new HashSet<String>();
entryNames.add( "default-configuration.jar" );
entryNames.add( "pom.xml" );
entryNames.add( "META-INF/MANIFEST.MF" );
entryNames.add( "META-INF/" );
Set<String> bannedNames = new HashSet<String>();
bannedNames.add( "default-configuration-javadoc.jar" );
bannedNames.add( "default-configuration-sources.jar" );
assertZipContents( entryNames, bannedNames, bundleSource );
}
/**
* Test repository plugin when there is no javadoc jar to be included in the bundle
*
* @throws Exception
*/
public void testNoJavadocJar()
throws Exception
{
try
{
createTestJars( "no-javadocjar", false, true, getBasedir() + "/target/test/unit/no-javadocjar/target" );
}
catch ( IOException ie )
{
ie.printStackTrace();
}
File testPom = new File( getBasedir(), "src/test/resources/unit/no-javadocjar/pom.xml" );
try
{
BundleCreateMojo mojo = (BundleCreateMojo) lookupMojo( "bundle-create", testPom );
mojo.execute();
}
catch ( Exception e )
{
e.printStackTrace();
}
File bundleSource = new File( getBasedir(), "target/test/unit/no-javadocjar/target/no-javadocjar-bundle.jar" );
assertTrue( FileUtils.fileExists( bundleSource.getAbsolutePath() ) );
Set<String> entryNames = new HashSet<String>();
entryNames.add( "no-javadocjar-sources.jar" );
entryNames.add( "no-javadocjar.jar" );
entryNames.add( "pom.xml" );
entryNames.add( "META-INF/MANIFEST.MF" );
entryNames.add( "META-INF/" );
assertZipContents( entryNames, Collections.singleton( "no-javadocjar-javadoc.jar" ), bundleSource );
}
/**
* Test repository plugin when there is no sources jar to be included in the bundle
*
* @throws Exception
*/
public void testNoSourcesJar()
throws Exception
{
try
{
createTestJars( "no-sourcesjar", true, false, getBasedir() + "/target/test/unit/no-sourcesjar/target" );
}
catch ( IOException ie )
{
ie.printStackTrace();
}
File testPom = new File( getBasedir(), "src/test/resources/unit/no-sourcesjar/pom.xml" );
try
{
BundleCreateMojo mojo = (BundleCreateMojo) lookupMojo( "bundle-create", testPom );
mojo.execute();
}
catch ( Exception e )
{
e.printStackTrace();
}
File bundleSource = new File( getBasedir(), "target/test/unit/no-sourcesjar/target/no-sourcesjar-bundle.jar" );
assertTrue( FileUtils.fileExists( bundleSource.getAbsolutePath() ) );
Set<String> entryNames = new HashSet<String>();
entryNames.add( "no-sourcesjar-javadoc.jar" );
entryNames.add( "no-sourcesjar.jar" );
entryNames.add( "pom.xml" );
entryNames.add( "META-INF/MANIFEST.MF" );
entryNames.add( "META-INF/" );
assertZipContents( entryNames, Collections.singleton( "no-sourcesjar-sources.jar" ), bundleSource );
}
/**
* Test repository plugin when there are no javadoc and sources jar files to be included in the bundle
*
* @throws Exception
*/
public void testNoJavadocSourcesJars()
throws Exception
{
try
{
createTestJars( "no-javadoc-sources", false, false, getBasedir()
+ "/target/test/unit/no-javadoc-sources/target" );
}
catch ( IOException ie )
{
ie.printStackTrace();
}
File testPom = new File( getBasedir(), "src/test/resources/unit/no-javadoc-sources/pom.xml" );
try
{
BundleCreateMojo mojo = (BundleCreateMojo) lookupMojo( "bundle-create", testPom );
mojo.execute();
}
catch ( Exception e )
{
e.printStackTrace();
}
File bundleSource =
new File( getBasedir(), "target/test/unit/no-javadoc-sources/target/no-javadoc-sources-bundle.jar" );
assertTrue( FileUtils.fileExists( bundleSource.getAbsolutePath() ) );
Set<String> entryNames = new HashSet<String>();
entryNames.add( "no-javadoc-sources.jar" );
entryNames.add( "pom.xml" );
entryNames.add( "META-INF/MANIFEST.MF" );
entryNames.add( "META-INF/" );
Set<String> bannedNames = new HashSet<String>();
bannedNames.add( "no-javadoc-sources-sources.jar" );
bannedNames.add( "no-javadoc-sources-javadoc.jar" );
assertZipContents( entryNames, bannedNames, bundleSource );
}
/**
* Test repository plugin when the scm element is null
*
* @throws Exception
*/
public void testNullScm()
throws Exception
{
try
{
createTestJars( "no-scm", false, false, getBasedir() + "/target/test/unit/no-scm/target" );
}
catch ( IOException ie )
{
ie.printStackTrace();
}
File testPom = new File( getBasedir(), "src/test/resources/unit/no-scm/pom.xml" );
BundleCreateMojo mojo = (BundleCreateMojo) lookupMojo( "bundle-create", testPom );
try
{
mojo.execute();
// MREPOSITORY-2 project.scm.connection should not be required for bundle-create
// MREPOSITORY-19 project.scm.{url|connection} are required for project materialization...
fail( "Must throw an exception on a project element scm is null" );
}
catch ( MojoExecutionException e )
{
// expected; scm.connection is required, as is scm.url
}
}
/**
* Test repository plugin when license file does not exist
*
* @throws Exception
*/
public void testNoLicense()
throws Exception
{
try
{
createTestJars( "no-license-file", false, false, getBasedir() + "/target/test/unit/no-license-file/target" );
}
catch ( IOException ie )
{
ie.printStackTrace();
}
File testPom = new File( getBasedir(), "src/test/resources/unit/no-license-file/pom.xml" );
try
{
BundleCreateMojo mojo = (BundleCreateMojo) lookupMojo( "bundle-create", testPom );
mojo.execute();
fail( "Must throw an exception on missing license file" );
}
catch ( Exception e )
{
assertTrue( true );
}
}
/**
* Test repository plugin when there is no project name specified in the pom
*
* @throws Exception
*/
public void testNoProjectName()
throws Exception
{
try
{
createTestJars( "no-project-name", false, false, getBasedir() + "/target/test/unit/no-project-name/target" );
}
catch ( IOException ie )
{
ie.printStackTrace();
}
File testPom = new File( getBasedir(), "src/test/resources/unit/no-project-name/pom.xml" );
try
{
BundleCreateMojo mojo = (BundleCreateMojo) lookupMojo( "bundle-create", testPom );
mojo.execute();
fail( "Must throw an exception on empty expression" );
}
catch ( Exception e )
{
assertTrue( true );
}
}
/**
* Method for creating the jar files that will be used in testing
*
* @param fileName
* the file name of the jar file(s) to be created
* @param createJavadocJar
* specifies whether a javadoc jar file will be created or not
* @param createSourcesJar
* specifies whether a sources jar file will be created or not
* @param destDir
* the destination directory where the jar file(s) are to be created
* @throws IOException
*/
private void createTestJars( String fileName, boolean createJavadocJar, boolean createSourcesJar, String destDir )
throws IOException
{
File targetDir = new File( destDir );
boolean success = targetDir.mkdirs();
if ( success )
{
File outputFile = new File( destDir, fileName + ".jar" );
success = outputFile.createNewFile();
if ( createJavadocJar )
{
File javadocJar = new File( destDir, fileName + "-javadoc.jar" );
success = javadocJar.createNewFile();
}
if ( createSourcesJar )
{
File sourcesJar = new File( destDir, fileName + "-sources.jar" );
success = sourcesJar.createNewFile();
}
}
else
{
System.out.println( "Target directory not created." );
}
}
protected void tearDown()
throws Exception
{
}
}