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