blob: 103fe4fe086649032e8edfa9cff65933b61d12cd [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.myfaces.test.cargo;
import java.io.File;
import junit.extensions.TestSetup;
import junit.framework.Test;
import org.codehaus.cargo.container.InstalledLocalContainer;
import org.codehaus.cargo.container.ContainerType;
import org.codehaus.cargo.container.tomcat.Tomcat5xInstalledLocalContainer;
import org.codehaus.cargo.container.deployable.Deployable;
import org.codehaus.cargo.container.deployable.DeployableType;
import org.codehaus.cargo.container.configuration.LocalConfiguration;
import org.codehaus.cargo.container.configuration.ConfigurationType;
import org.codehaus.cargo.generic.deployable.DefaultDeployableFactory;
import org.codehaus.cargo.generic.configuration.ConfigurationFactory;
import org.codehaus.cargo.generic.configuration.DefaultConfigurationFactory;
import org.codehaus.cargo.generic.DefaultContainerFactory;
import org.codehaus.cargo.util.log.FileLogger;
/**
* <p>Convenience <code>TestSetup</code> class which uses Cargo to start
* and stop a Servlet container.</p>
*
* @since 1.0.0
*/
public class CargoTestSetup extends TestSetup
{
// ------------------------------------------------------------ Constructors
/**
* <p>Construct a new instance of this test setup.</p>
*
* @param test Tests to be run within this test setup.
*/
public CargoTestSetup(Test test)
{
super(test);
}
// ------------------------------------------------------ Instance Variables
/**
* <p>The installed local container for this test setup.</p>
*/
private InstalledLocalContainer container;
// ------------------------------------------------------ Test Setup Methods
/**
* <p>Start the container prior to running the tests.</p>
* <p>The following System properties are used:
* <ul>
* <li>cargo.container.id - ID of the container to use. [tomcat5x]</li>
* <li>cargo.container.home - Full path to a local installation of the container.
* If not set, uses the value of the TOMCAT_HOME environment variable.
* One of cargo.container.home or TOMCAT_HOME is REQUIRED.</li>
* <li>cargo.deployable - Full path to the war file to deploy. REQUIRED.</li>
* <li>cargo.container.output - Full path to a file to use for output. [none]</li>
* <li>cargo.container.log - Full path to a file to use for logging. [none]</li>
* <li>cargo.servlet.port - The port on which the container should listen. [8080]</li>
* </ul>
* </p>
*
* @throws Exception if an error occurs.
*/
protected void setUp() throws Exception
{
super.setUp();
// If there is no container id, default to Tomcat 5x
String containerId = System.getProperty("cargo.container.id");
if (containerId == null)
{
containerId = Tomcat5xInstalledLocalContainer.ID;
}
System.out.println("[INFO] container id: " + containerId);
// Construct the war, using the container id and the path to the war file
String deployablePath = System.getProperty("cargo.deployable");
System.out.println("[INFO] deployable: " + deployablePath);
Deployable war = new DefaultDeployableFactory().createDeployable(
containerId, deployablePath, DeployableType.WAR);
// Container configuration
ConfigurationFactory configurationFactory = new DefaultConfigurationFactory();
LocalConfiguration configuration = (LocalConfiguration) configurationFactory
.createConfiguration(containerId, ConfigurationType.STANDALONE);
// Find and (if provided) set the port to use for the container.
String servletPort = System.getProperty("cargo.servlet.port");
if (servletPort != null)
{
configuration.setProperty("cargo.servlet.port", servletPort);
System.out.println("[INFO] servlet port: " + servletPort);
}
configuration.addDeployable(war);
container = (InstalledLocalContainer) new DefaultContainerFactory()
.createContainer(containerId, ContainerType.INSTALLED,
configuration);
// If 'cargo.container.home' is not set, or if an expression was
// passed through, try to use the TOMCAT_HOME environment variable.
String containerHome = System.getProperty("cargo.container.home");
if (containerHome == null || containerHome.startsWith("$"))
{
containerHome = System.getenv("TOMCAT_HOME");
}
System.out.println("[INFO] container home: " + containerHome);
container.setHome(new File(containerHome));
// Find and (if provided) set the path to a log file
String containerLog = System.getProperty("cargo.container.log");
if (containerLog != null)
{
System.out.println("[INFO] container log: " + containerLog);
container.setLogger(new FileLogger(containerLog, false));
}
// Find and (if provided) set the path to an output file
String containerOutput = System.getProperty("cargo.container.output");
if (containerOutput != null)
{
System.out.println("[INFO] container output: " + containerOutput);
container.setOutput(new File(containerOutput));
}
container.start();
}
/**
* Stop the container after running the tests.
*
* @throws Exception if an error occurs.
*/
protected void tearDown() throws Exception
{
container.stop();
super.tearDown();
}
/**
* Return the name of the test setup.
* (Temporarily required due to MSUREFIRE-119.)
*
* @return the name of the test setup.
* @deprecated No replacement.
*/
public String getName()
{
return "CargoTestSetup";
}
}