blob: 284803181cd3c0d98fc53bf2d956a2f116275f49 [file] [log] [blame]
package org.apache.maven.plugins.war;
/*
* 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.
*/
import org.apache.maven.artifact.handler.ArtifactHandler;
import org.apache.maven.plugin.testing.stubs.ArtifactStub;
import org.apache.maven.plugins.war.stub.AarArtifactStub;
import org.apache.maven.plugins.war.stub.EJBArtifactStub;
import org.apache.maven.plugins.war.stub.EJBArtifactStubWithClassifier;
import org.apache.maven.plugins.war.stub.EJBClientArtifactStub;
import org.apache.maven.plugins.war.stub.IncludeExcludeWarArtifactStub;
import org.apache.maven.plugins.war.stub.JarArtifactStub;
import org.apache.maven.plugins.war.stub.MarArtifactStub;
import org.apache.maven.plugins.war.stub.MavenProjectArtifactsStub;
import org.apache.maven.plugins.war.stub.MavenProjectBasicStub;
import org.apache.maven.plugins.war.stub.PARArtifactStub;
import org.apache.maven.plugins.war.stub.ResourceStub;
import org.apache.maven.plugins.war.stub.TLDArtifactStub;
import org.apache.maven.plugins.war.stub.WarArtifactStub;
import org.apache.maven.plugins.war.stub.XarArtifactStub;
import org.codehaus.plexus.util.FileUtils;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.LinkedList;
import java.util.Locale;
public class WarExplodedMojoTest
extends AbstractWarExplodedMojoTest
{
protected File getPomFile()
{
return new File( getBasedir(), "/target/test-classes/unit/warexplodedmojo/plugin-config.xml" );
}
protected File getTestDirectory()
{
return new File( getBasedir(), "target/test-classes/unit/warexplodedmojo/test-dir" );
}
/**
* @throws Exception
*/
public void testSimpleExplodedWar()
throws Exception
{
// setup test data
String testId = "SimpleExplodedWar";
MavenProjectBasicStub project = new MavenProjectBasicStub();
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, false );
File webAppResource = new File( getTestDirectory(), testId + "-resources" );
File webAppDirectory = new File( getTestDirectory(), testId );
File sampleResource = new File( webAppResource, "pix/panis_na.jpg" );
ResourceStub[] resources = new ResourceStub[] { new ResourceStub() };
createFile( sampleResource );
assertTrue( "sampeResource not found", sampleResource.exists() );
// configure mojo
resources[0].setDirectory( webAppResource.getAbsolutePath() );
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
setVariableValueToObject( mojo, "webResources", resources );
mojo.execute();
// validate operation
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
File expectedWebResourceFile = new File( webAppDirectory, "pix/panis_na.jpg" );
File expectedWEBINFDir = new File( webAppDirectory, "WEB-INF" );
File expectedMETAINFDir = new File( webAppDirectory, "META-INF" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
assertTrue( "resources doesn't exist: " + expectedWebResourceFile, expectedWebResourceFile.exists() );
assertTrue( "WEB-INF not found", expectedWEBINFDir.exists() );
assertTrue( "META-INF not found", expectedMETAINFDir.exists() );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedWebResourceFile.delete();
}
/**
* @throws Exception
*/
public void testSimpleExplodedWarWTargetPath()
throws Exception
{
// setup test data
String testId = "SimpleExplodedWar";
MavenProjectBasicStub project = new MavenProjectBasicStub();
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, false );
File webAppResource = new File( getTestDirectory(), "resources" );
File webAppDirectory = new File( getTestDirectory(), testId );
File sampleResource = new File( webAppResource, "pix/panis_na.jpg" );
ResourceStub[] resources = new ResourceStub[] { new ResourceStub() };
createFile( sampleResource );
// configure mojo
resources[0].setDirectory( webAppResource.getAbsolutePath() );
resources[0].setTargetPath( "targetPath" );
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
setVariableValueToObject( mojo, "webResources", resources );
mojo.execute();
// validate operation
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
File expectedWebResourceFile = new File( webAppDirectory, "targetPath/pix/panis_na.jpg" );
File expectedWEBINFDir = new File( webAppDirectory, "WEB-INF" );
File expectedMETAINFDir = new File( webAppDirectory, "META-INF" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
assertTrue( "resources doesn't exist: " + expectedWebResourceFile, expectedWebResourceFile.exists() );
assertTrue( "WEB-INF not found", expectedWEBINFDir.exists() );
assertTrue( "META-INF not found", expectedMETAINFDir.exists() );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedWebResourceFile.delete();
}
/**
* @throws Exception
*/
public void testExplodedWar_WithCustomWebXML()
throws Exception
{
// setup test data
String testId = "ExplodedWar_WithCustomWebXML";
MavenProjectBasicStub project = new MavenProjectBasicStub();
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, true );
File xmlSource = createXMLConfigDir( testId, new String[] { "web.xml" } );
File webAppDirectory = new File( getTestDirectory(), testId );
// configure mojo
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
mojo.setWebXml( new File( xmlSource, "web.xml" ) );
mojo.execute();
// validate operation
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
File expectedWEBXMLFile = new File( webAppDirectory, "WEB-INF/web.xml" );
File expectedMETAINFDir = new File( webAppDirectory, "META-INF" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
assertTrue( "WEB XML not found: " + expectedWEBXMLFile.toString(), expectedWEBXMLFile.exists() );
assertTrue( "META-INF not found", expectedMETAINFDir.exists() );
assertEquals( "WEB XML not correct", mojo.getWebXml().toString(), FileUtils.fileRead( expectedWEBXMLFile ) );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedWEBXMLFile.delete();
expectedMETAINFDir.delete();
}
/**
* @throws Exception
*/
public void testExplodedWar_WithContainerConfigXML()
throws Exception
{
// setup test data
String testId = "ExplodedWar_WithContainerConfigXML";
MavenProjectBasicStub project = new MavenProjectBasicStub();
File classesDir = createClassesDir( testId, true );
File webAppSource = createWebAppSource( testId );
File xmlSource = createXMLConfigDir( testId, new String[] { "config.xml" } );
File webAppDirectory = new File( getTestDirectory(), testId );
// configure mojo
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
mojo.setContainerConfigXML( new File( xmlSource, "config.xml" ) );
mojo.execute();
// validate operation
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
File expectedContainerConfigXMLFile = new File( webAppDirectory, "META-INF/config.xml" );
File expectedWEBINFDir = new File( webAppDirectory, "WEB-INF" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
assertTrue( "WEB-INF not found", expectedWEBINFDir.exists() );
assertTrue( "Container Config XML not found:" + expectedContainerConfigXMLFile.toString(),
expectedContainerConfigXMLFile.exists() );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedContainerConfigXMLFile.delete();
expectedWEBINFDir.delete();
}
/**
* @throws Exception
*/
public void testExplodedWar_WithSimpleExternalWARFile()
throws Exception
{
// setup test data
MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
WarArtifactStub warArtifact = new WarArtifactStub( getBasedir() );
String testId = "ExplodedWar_WithSimpleExternalWARFile";
File webAppDirectory = new File( getTestDirectory(), testId );
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, true );
File workDirectory = new File( getTestDirectory(), "/war/work-" + testId );
File simpleWarFile = warArtifact.getFile();
assertTrue( "simple war not found: " + simpleWarFile.toString(), simpleWarFile.exists() );
createDir( workDirectory );
// configure mojo
project.addArtifact( warArtifact );
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
setVariableValueToObject( mojo, "workDirectory", workDirectory );
mojo.execute();
// validate operation - META-INF is automatically excluded so remove the file from the list
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
File expectedWEBXMLFile = new File( webAppDirectory, "WEB-INF/web.xml" );
File expectedWARFile = new File( webAppDirectory, "/org/sample/company/test.jsp" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
// check simple.war in the unit test dir under resources to verify the list of files
assertTrue( "web xml not found: " + expectedWEBXMLFile.toString(), expectedWEBXMLFile.exists() );
assertTrue( "war file not found: " + expectedWARFile.toString(), expectedWARFile.exists() );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedWEBXMLFile.delete();
expectedWARFile.delete();
}
/**
* Merge a dependent WAR when a file in the war source directory overrides one found in the WAR.
*/
public void testExplodedWarMergeWarLocalFileOverride()
throws Exception
{
// setup test data
MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
WarArtifactStub warArtifact = new WarArtifactStub( getBasedir() );
String testId = "testExplodedWarMergeWarLocalFileOverride";
File webAppDirectory = new File( getTestDirectory(), testId );
File webAppSource = getWebAppSource( testId );
File simpleJSP = new File( webAppSource, "org/sample/company/test.jsp" );
createFile( simpleJSP );
File workDirectory = new File( getTestDirectory(), "/war/work-" + testId );
createDir( workDirectory );
File classesDir = createClassesDir( testId, true );
// configure mojo
project.addArtifact( warArtifact );
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
setVariableValueToObject( mojo, "workDirectory", workDirectory );
mojo.execute();
// validate operation
File expectedFile = new File( webAppDirectory, "/org/sample/company/test.jsp" );
assertTrue( "file not found: " + expectedFile.toString(), expectedFile.exists() );
assertEquals( "file incorrect", simpleJSP.toString(), FileUtils.fileRead( expectedFile ) );
// check when the merged war file is newer - so set an old time on the local file
long time = new SimpleDateFormat( "yyyy-MM-dd", Locale.US ).parse( "2005-1-1" ).getTime();
simpleJSP.setLastModified( time );
expectedFile.setLastModified( time );
project.addArtifact( warArtifact );
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
setVariableValueToObject( mojo, "workDirectory", workDirectory );
mojo.execute();
assertTrue( "file not found: " + expectedFile.toString(), expectedFile.exists() );
assertEquals( "file incorrect", simpleJSP.toString(), FileUtils.fileRead( expectedFile ) );
// house keeping
expectedFile.delete();
}
// The last modified thingy behavior is not applicable anymore. This is the only test that
// has been removed.
// /**
// * Merge a dependent WAR that gets updated since the last run.
// */
// public void testExplodedWarMergeWarUpdated()
// throws Exception
// {
// // setup test data
// MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
// WarArtifactStub warArtifact = new WarArtifactStub( getBasedir() );
//
// String testId = "testExplodedWarMergeWarUpdated";
// File webAppDirectory = new File( getTestDirectory(), testId );
// FileUtils.deleteDirectory( webAppDirectory );
//
// File webAppSource = getWebAppSource( testId );
//
// File workDirectory = new File( getTestDirectory(), "/war/work-" + testId );
// createDir( workDirectory );
//
// File classesDir = createClassesDir( testId, true );
//
// // configure mojo
// project.addArtifact( warArtifact );
// this.configureMojo( mojo, new LinkedList(), classesDir, webAppSource, webAppDirectory, project );
// setVariableValueToObject( mojo, "workDirectory", workDirectory );
// mojo.execute();
//
// // validate operation
// File expectedFile = new File( webAppDirectory, "/org/sample/company/test.jsp" );
//
// assertTrue( "file not found: " + expectedFile.toString(), expectedFile.exists() );
// assertEquals( "file incorrect", "", FileUtils.fileRead( expectedFile ) );
//
// // update file, so the local one is older
// warArtifact.setFile( new File( warArtifact.getFile().getParentFile(), "simple-updated.war" ) );
//
// mojo.execute();
//
// assertTrue( "file not found: " + expectedFile.toString(), expectedFile.exists() );
// assertEquals( "file incorrect", "updated\n", FileUtils.fileRead( expectedFile ) );
//
// // update file, so the local one is newer
// warArtifact.setFile( new File( warArtifact.getFile().getParentFile(), "simple.war" ) );
//
// mojo.execute();
//
// assertTrue( "file not found: " + expectedFile.toString(), expectedFile.exists() );
// assertEquals( "file incorrect", "updated\n", FileUtils.fileRead( expectedFile ) );
//
// // house keeping
// expectedFile.delete();
// }
/**
* @throws Exception
*/
public void testExplodedWar_WithEJB()
throws Exception
{
// setup test data
String testId = "ExplodedWar_WithEJB";
MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
File webAppDirectory = new File( getTestDirectory(), testId );
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, true );
EJBArtifactStub ejbArtifact = new EJBArtifactStub( getBasedir() );
File ejbFile = ejbArtifact.getFile();
assertTrue( "ejb jar not found: " + ejbFile.toString(), ejbFile.exists() );
// configure mojo
project.addArtifact( ejbArtifact );
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
mojo.execute();
// validate operation
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
// final name form is <artifactId>-<version>.<type>
File expectedEJBArtifact = new File( webAppDirectory, "WEB-INF/lib/ejbartifact-0.0-Test.jar" );
// File expectedEJBArtifact = new File( webAppDirectory, "WEB-INF/lib/ejbartifact-0.0-Test.jar" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
assertTrue( "ejb artifact not found: " + expectedEJBArtifact.toString(), expectedEJBArtifact.exists() );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedEJBArtifact.delete();
}
public void testExplodedWarWithJar()
throws Exception
{
// setup test data
String testId = "ExplodedWarWithJar";
MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
File webAppDirectory = new File( getTestDirectory(), testId );
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, true );
ArtifactHandler artifactHandler = (ArtifactHandler) lookup( ArtifactHandler.ROLE, "jar" );
ArtifactStub jarArtifact = new JarArtifactStub( getBasedir(), artifactHandler );
File jarFile = jarArtifact.getFile();
assertTrue( "jar not found: " + jarFile.toString(), jarFile.exists() );
// configure mojo
project.addArtifact( jarArtifact );
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
mojo.execute();
// validate operation
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
// final name form is <artifactId>-<version>.<type>
File expectedJarArtifact = new File( webAppDirectory, "WEB-INF/lib/jarartifact-0.0-Test.jar" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
assertTrue( "jar artifact not found: " + expectedJarArtifact.toString(), expectedJarArtifact.exists() );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedJarArtifact.delete();
}
/**
* @throws Exception
*/
public void testExplodedWar_WithEJBClient()
throws Exception
{
// setup test data
String testId = "ExplodedWar_WithEJB";
MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
File webAppDirectory = new File( getTestDirectory(), testId );
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, true );
EJBClientArtifactStub ejbArtifact = new EJBClientArtifactStub( getBasedir() );
File ejbFile = ejbArtifact.getFile();
assertTrue( "ejb jar not found: " + ejbFile.toString(), ejbFile.exists() );
// configure mojo
project.addArtifact( ejbArtifact );
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
mojo.execute();
// validate operation
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
// final name form is <artifactId>-<version>.<type>
File expectedEJBArtifact = new File( webAppDirectory, "WEB-INF/lib/ejbclientartifact-0.0-Test-client.jar" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
assertTrue( "ejb artifact not found: " + expectedEJBArtifact.toString(), expectedEJBArtifact.exists() );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedEJBArtifact.delete();
}
/**
* @throws Exception
*/
public void testExplodedWar_WithTLD()
throws Exception
{
// setup test data
String testId = "ExplodedWar_WithTLD";
MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
File webAppDirectory = new File( getTestDirectory(), testId );
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, true );
TLDArtifactStub tldArtifact = new TLDArtifactStub( getBasedir() );
File tldFile = tldArtifact.getFile();
assertTrue( "tld jar not found: " + tldFile.getAbsolutePath(), tldFile.exists() );
// configure mojo
project.addArtifact( tldArtifact );
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
mojo.execute();
// validate operation
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
// final name form is <artifactId>-<version>.<type>
File expectedTLDArtifact = new File( webAppDirectory, "WEB-INF/tld/tldartifact-0.0-Test.tld" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
assertTrue( "tld artifact not found: " + expectedTLDArtifact.toString(), expectedTLDArtifact.exists() );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedTLDArtifact.delete();
}
/**
* @throws Exception
*/
public void testExplodedWar_WithPAR()
throws Exception
{
// setup test data
String testId = "ExplodedWar_WithPAR";
MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
File webAppDirectory = new File( getTestDirectory(), testId );
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, true );
PARArtifactStub parartifact = new PARArtifactStub( getBasedir() );
File parFile = parartifact.getFile();
assertTrue( "par not found: " + parFile.getAbsolutePath(), parFile.exists() );
// configure mojo
project.addArtifact( parartifact );
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
mojo.execute();
// validate operation
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
// final name form is <artifactId>-<version>.<type>
File expectedPARArtifact = new File( webAppDirectory, "WEB-INF/lib/parartifact-0.0-Test.jar" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
assertTrue( "par artifact not found: " + expectedPARArtifact.toString(), expectedPARArtifact.exists() );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedPARArtifact.delete();
}
public void testExplodedWarWithAar()
throws Exception
{
// setup test data
String testId = "ExplodedWarWithAar";
MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
File webAppDirectory = new File( getTestDirectory(), testId );
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, true );
// Fake here since the aar artifact handler does not exist: no biggie
ArtifactHandler artifactHandler = (ArtifactHandler) lookup( ArtifactHandler.ROLE, "jar" );
ArtifactStub aarArtifact = new AarArtifactStub( getBasedir(), artifactHandler );
File aarFile = aarArtifact.getFile();
assertTrue( "jar not found: " + aarFile.toString(), aarFile.exists() );
// configure mojo
project.addArtifact( aarArtifact );
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
mojo.execute();
// validate operation
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
// final name form is <artifactId>-<version>.<type>
File expectedJarArtifact = new File( webAppDirectory, "WEB-INF/services/aarartifact-0.0-Test.jar" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
assertTrue( "jar artifact not found: " + expectedJarArtifact.toString(), expectedJarArtifact.exists() );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedJarArtifact.delete();
}
public void testExplodedWarWithMar()
throws Exception
{
// setup test data
String testId = "ExplodedWarWithMar";
MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
File webAppDirectory = new File( getTestDirectory(), testId );
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, true );
// Fake here since the mar artifact handler does not exist: no biggie
ArtifactHandler artifactHandler = (ArtifactHandler) lookup( ArtifactHandler.ROLE, "jar" );
ArtifactStub marArtifact = new MarArtifactStub( getBasedir(), artifactHandler );
File marFile = marArtifact.getFile();
assertTrue( "jar not found: " + marFile.toString(), marFile.exists() );
// configure mojo
project.addArtifact( marArtifact );
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
mojo.execute();
// validate operation
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
// final name form is <artifactId>-<version>.<type>
File expectedJarArtifact = new File( webAppDirectory, "WEB-INF/modules/marartifact-0.0-Test.jar" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
assertTrue( "jar artifact not found: " + expectedJarArtifact.toString(), expectedJarArtifact.exists() );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedJarArtifact.delete();
}
public void testExplodedWarWithXar()
throws Exception
{
// setup test data
String testId = "ExplodedWarWithXar";
MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
File webAppDirectory = new File( getTestDirectory(), testId );
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, true );
// Fake here since the xar artifact handler does not exist: no biggie
ArtifactHandler artifactHandler = (ArtifactHandler) lookup( ArtifactHandler.ROLE, "jar" );
ArtifactStub xarArtifact = new XarArtifactStub( getBasedir(), artifactHandler );
File xarFile = xarArtifact.getFile();
assertTrue( "jar not found: " + xarFile.toString(), xarFile.exists() );
// configure mojo
project.addArtifact( xarArtifact );
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
mojo.execute();
// validate operation
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
// final name form is <artifactId>-<version>.<type>
File expectedJarArtifact = new File( webAppDirectory, "WEB-INF/extensions/xarartifact-0.0-Test.jar" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
assertTrue( "jar artifact not found: " + expectedJarArtifact.toString(), expectedJarArtifact.exists() );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedJarArtifact.delete();
}
/**
* @throws Exception
*/
public void testExplodedWar_WithDuplicateDependencies()
throws Exception
{
// setup test data
String testId = "ExplodedWar_WithDuplicateDependencies";
MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
File webAppDirectory = new File( getTestDirectory(), testId );
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, true );
EJBArtifactStub ejbArtifact = new EJBArtifactStub( getBasedir() );
EJBArtifactStub ejbArtifactDup = new EJBArtifactStub( getBasedir() );
File ejbFile = ejbArtifact.getFile();
// ejbArtifact has a hard coded file, only one assert is needed
assertTrue( "ejb not found: " + ejbFile.getAbsolutePath(), ejbFile.exists() );
// configure mojo
ejbArtifact.setGroupId( "org.sample.ejb" );
ejbArtifactDup.setGroupId( "org.dup.ejb" );
project.addArtifact( ejbArtifact );
project.addArtifact( ejbArtifactDup );
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
mojo.execute();
// validate operation
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
// final name form is <artifactId>-<version>.<type>
File expectedEJBArtifact = new File( webAppDirectory, "WEB-INF/lib/org.sample.ejb-ejbartifact-0.0-Test.jar" );
File expectedEJBDupArtifact = new File( webAppDirectory, "WEB-INF/lib/org.dup.ejb-ejbartifact-0.0-Test.jar" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
assertTrue( "ejb artifact not found: " + expectedEJBArtifact.toString(), expectedEJBArtifact.exists() );
assertTrue( "ejb dup artifact not found: " + expectedEJBDupArtifact.toString(), expectedEJBDupArtifact.exists() );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedEJBArtifact.delete();
expectedEJBDupArtifact.delete();
}
/**
* @throws Exception
*/
public void testExplodedWar_DuplicateWithClassifier()
throws Exception
{
// setup test data
String testId = "ExplodedWar_DuplicateWithClassifier";
MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
File webAppDirectory = new File( getTestDirectory(), testId );
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, true );
EJBArtifactStub ejbArtifact = new EJBArtifactStub( getBasedir() );
EJBArtifactStubWithClassifier ejbArtifactDup = new EJBArtifactStubWithClassifier( getBasedir() );
File ejbFile = ejbArtifact.getFile();
// ejbArtifact has a hard coded file, only one assert is needed
assertTrue( "ejb not found: " + ejbFile.getAbsolutePath(), ejbFile.exists() );
// configure mojo
ejbArtifact.setGroupId( "org.sample.ejb" );
ejbArtifactDup.setGroupId( "org.sample.ejb" );
ejbArtifactDup.setClassifier( "classifier" );
project.addArtifact( ejbArtifact );
project.addArtifact( ejbArtifactDup );
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
mojo.execute();
// validate operation
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
// final name form is <artifactId>-<version>.<type>
File expectedEJBArtifact = new File( webAppDirectory, "WEB-INF/lib/ejbartifact-0.0-Test.jar" );
File expectedEJBDupArtifact = new File( webAppDirectory, "WEB-INF/lib/ejbartifact-0.0-Test-classifier.jar" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
assertTrue( "ejb artifact not found: " + expectedEJBArtifact.toString(), expectedEJBArtifact.exists() );
assertTrue( "ejb dup artifact not found: " + expectedEJBDupArtifact.toString(), expectedEJBDupArtifact.exists() );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedEJBArtifact.delete();
expectedEJBDupArtifact.delete();
}
/**
* @throws Exception
*/
public void testExplodedWar_WithClasses()
throws Exception
{
// setup test data
String testId = "ExplodedWar_WithClasses";
MavenProjectBasicStub project = new MavenProjectBasicStub();
File webAppDirectory = new File( getTestDirectory(), testId );
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, false );
// configure mojo
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
mojo.execute();
// validate operation
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
// final name form is <artifactId>-<version>.<type>
File expectedClass = new File( webAppDirectory, "WEB-INF/classes/sample-servlet.class" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
assertTrue( "classes not found: " + expectedClass.toString(), expectedClass.exists() );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedClass.delete();
}
public void testExplodedWar_WithSourceIncludeExclude()
throws Exception
{
// setup test data
String testId = "ExplodedWar_WithSourceIncludeExclude";
MavenProjectBasicStub project = new MavenProjectBasicStub();
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, true );
File webAppDirectory = new File( getTestDirectory(), testId );
// configure mojo
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
setVariableValueToObject( mojo, "warSourceIncludes", "**/*sit.jsp" );
setVariableValueToObject( mojo, "warSourceExcludes", "**/last*.*" );
mojo.execute();
// validate operation
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
File expectedWEBXMLDir = new File( webAppDirectory, "WEB-INF" );
File expectedMETAINFDir = new File( webAppDirectory, "META-INF" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertFalse( "source files found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
assertTrue( "WEB XML not found: " + expectedWEBXMLDir.toString(), expectedWEBXMLDir.exists() );
assertTrue( "META-INF not found", expectedMETAINFDir.exists() );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedWEBXMLDir.delete();
expectedMETAINFDir.delete();
}
public void testExplodedWar_WithWarDependencyIncludeExclude()
throws Exception
{
// setup test data
String testId = "ExplodedWar_WithWarDependencyIncludeExclude";
MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
IncludeExcludeWarArtifactStub includeexcludeWarArtifact = new IncludeExcludeWarArtifactStub( getBasedir() );
File webAppDirectory = new File( getTestDirectory(), testId );
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, true );
File workDirectory = new File( getTestDirectory(), "/war/work-" + testId );
File includeExcludeWarFile = includeexcludeWarArtifact.getFile();
assertTrue( "war not found: " + includeExcludeWarFile.toString(), includeExcludeWarFile.exists() );
createDir( workDirectory );
// configure mojo
project.addArtifact( includeexcludeWarArtifact );
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
setVariableValueToObject( mojo, "dependentWarIncludes", "**/*Include.jsp,**/*.xml" );
setVariableValueToObject( mojo, "dependentWarExcludes", "**/*Exclude*,**/MANIFEST.MF" );
setVariableValueToObject( mojo, "workDirectory", workDirectory );
mojo.execute();
// validate operation
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
File expectedManifestFile = new File( webAppDirectory, "META-INF/MANIFEST.MF" );
File expectedWEBXMLFile = new File( webAppDirectory, "WEB-INF/web.xml" );
File expectedIncludedWARFile = new File( webAppDirectory, "/org/sample/company/testInclude.jsp" );
File expectedExcludedWarfile = new File( webAppDirectory, "/org/sample/companyExclude/test.jsp" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
// check include-exclude.war in the unit test dir under resources to verify the list of files
assertTrue( "web xml not found: " + expectedWEBXMLFile.toString(), expectedWEBXMLFile.exists() );
assertFalse( "manifest file found: " + expectedManifestFile.toString(), expectedManifestFile.exists() );
assertTrue( "war file not found: " + expectedIncludedWARFile.toString(), expectedIncludedWARFile.exists() );
assertFalse( "war file not found: " + expectedExcludedWarfile.toString(), expectedExcludedWarfile.exists() );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedManifestFile.delete();
expectedWEBXMLFile.delete();
expectedIncludedWARFile.delete();
expectedExcludedWarfile.delete();
}
public void testExplodedWarWithSourceModificationCheck()
throws Exception
{
// setup test data
String testId = "ExplodedWarWithSourceModificationCheck";
MavenProjectBasicStub project = new MavenProjectBasicStub();
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, false );
File webAppDirectory = new File( getTestDirectory(), testId );
// configure mojo
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
// destination file is already created manually containing an "error" string
// source is newer than the destination file
mojo.execute();
// validate operation
File expectedWEBINFDir = new File( webAppDirectory, "WEB-INF" );
File expectedMETAINFDir = new File( webAppDirectory, "META-INF" );
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
assertTrue( "WEB-INF not found", expectedWEBINFDir.exists() );
assertTrue( "META-INF not found", expectedMETAINFDir.exists() );
// 1st phase destination is older than source
// destination starts with a value of error replaced with a blank source
assertFalse( "source files not updated with new copy: " + expectedWebSourceFile.toString(),
"error".equals( FileUtils.fileRead( expectedWebSourceFile ) ) );
// TODO: uncomment when lastModified problem is resolved
// FileWriter writer = new FileWriter(expectedWebSourceFile);
//
// // 2nd phase destination is newer than source
// // destination should not be replaced with an blank source
// writer.write("newdata");
// mojo.execute();
// reader = new FileReader(expectedWebSourceFile);
// reader.read(data);
// assertTrue("source file updated with old copy: "
// +expectedWebSourceFile.toString(),String.valueOf(data).equals("newdata") ); }
// house keeping
expectedWEBINFDir.delete();
expectedMETAINFDir.delete();
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
}
public void testExplodedWarWithOutputFileNameMapping()
throws Exception
{
// setup test data
String testId = "ExplodedWarWithFileNameMapping";
MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
File webAppDirectory = new File( getTestDirectory(), testId );
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, true );
ArtifactHandler artifactHandler = (ArtifactHandler) lookup( ArtifactHandler.ROLE, "jar" );
ArtifactStub jarArtifact = new JarArtifactStub( getBasedir(), artifactHandler );
File jarFile = jarArtifact.getFile();
assertTrue( "jar not found: " + jarFile.toString(), jarFile.exists() );
// configure mojo
project.addArtifact( jarArtifact );
mojo.setOutputFileNameMapping( "@{artifactId}@.@{extension}@" );
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
mojo.execute();
// validate operation
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
// final name form is <artifactId>-<version>.<type>
File expectedJarArtifact = new File( webAppDirectory, "WEB-INF/lib/jarartifact.jar" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
assertTrue( "jar artifact not found: " + expectedJarArtifact.toString(), expectedJarArtifact.exists() );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedJarArtifact.delete();
}
/**
* @throws Exception
*/
public void testExplodedWarWithOutputFileNameMappingAndDuplicateDependencies()
throws Exception
{
// setup test data
String testId = "ExplodedWarWithFileNameMappingAndDuplicateDependencies";
MavenProjectArtifactsStub project = new MavenProjectArtifactsStub();
File webAppDirectory = new File( getTestDirectory(), testId );
File webAppSource = createWebAppSource( testId );
File classesDir = createClassesDir( testId, true );
EJBArtifactStub ejbArtifact = new EJBArtifactStub( getBasedir() );
EJBArtifactStub ejbArtifactDup = new EJBArtifactStub( getBasedir() );
File ejbFile = ejbArtifact.getFile();
// ejbArtifact has a hard coded file, only one assert is needed
assertTrue( "ejb not found: " + ejbFile.getAbsolutePath(), ejbFile.exists() );
// configure mojo
ejbArtifact.setGroupId( "org.sample.ejb" );
ejbArtifactDup.setGroupId( "org.dup.ejb" );
project.addArtifact( ejbArtifact );
project.addArtifact( ejbArtifactDup );
mojo.setOutputFileNameMapping( "@{artifactId}@.@{extension}@" );
this.configureMojo( mojo, new LinkedList<String>(), classesDir, webAppSource, webAppDirectory, project );
mojo.execute();
// validate operation
File expectedWebSourceFile = new File( webAppDirectory, "pansit.jsp" );
File expectedWebSource2File = new File( webAppDirectory, "org/web/app/last-exile.jsp" );
// final name form is <artifactId>-<version>.<type>
File expectedEJBArtifact = new File( webAppDirectory, "WEB-INF/lib/org.sample.ejb-ejbartifact.jar" );
File expectedEJBDupArtifact = new File( webAppDirectory, "WEB-INF/lib/org.dup.ejb-ejbartifact.jar" );
assertTrue( "source files not found: " + expectedWebSourceFile.toString(), expectedWebSourceFile.exists() );
assertTrue( "source files not found: " + expectedWebSource2File.toString(), expectedWebSource2File.exists() );
assertTrue( "ejb artifact not found: " + expectedEJBArtifact.toString(), expectedEJBArtifact.exists() );
assertTrue( "ejb dup artifact not found: " + expectedEJBDupArtifact.toString(), expectedEJBDupArtifact.exists() );
// house keeping
expectedWebSourceFile.delete();
expectedWebSource2File.delete();
expectedEJBArtifact.delete();
expectedEJBDupArtifact.delete();
}
/* --------------------- 2.1 Overlay tests ----------------------------------- */
/*---------------------------*/
}