Author: wsmoak Date: Sat Jun 17 22:46:26 2006 New Revision: 415096 URL: http://svn.apache.org/viewvc?rev=415096&view=rev Log: [SHALE-193] Added CargoTestSetup to start and stop a container for integration testing. Shale Test now has an optional dependency on Cargo.
Added: struts/shale/trunk/shale-test/src/main/java/org/apache/shale/test/cargo/ struts/shale/trunk/shale-test/src/main/java/org/apache/shale/test/cargo/CargoTestSetup.java (with props) Modified: struts/shale/trunk/shale-test/pom.xml Modified: struts/shale/trunk/shale-test/pom.xml URL: http://svn.apache.org/viewvc/struts/shale/trunk/shale-test/pom.xml?rev=415096&r1=415095&r2=415096&view=diff ============================================================================== --- struts/shale/trunk/shale-test/pom.xml (original) +++ struts/shale/trunk/shale-test/pom.xml Sat Jun 17 22:46:26 2006 @@ -45,6 +45,18 @@ </exclusion> </exclusions> </dependency> + <dependency> + <groupId>org.codehaus.cargo</groupId> + <artifactId>cargo-core-uberjar</artifactId> + <version>0.8</version> + <optional>true</optional> + </dependency> + <dependency> + <groupId>org.codehaus.cargo</groupId> + <artifactId>cargo-ant</artifactId> + <version>0.8</version> + <optional>true</optional> + </dependency> </dependencies> </project> Added: struts/shale/trunk/shale-test/src/main/java/org/apache/shale/test/cargo/CargoTestSetup.java URL: http://svn.apache.org/viewvc/struts/shale/trunk/shale-test/src/main/java/org/apache/shale/test/cargo/CargoTestSetup.java?rev=415096&view=auto ============================================================================== --- struts/shale/trunk/shale-test/src/main/java/org/apache/shale/test/cargo/CargoTestSetup.java (added) +++ struts/shale/trunk/shale-test/src/main/java/org/apache/shale/test/cargo/CargoTestSetup.java Sat Jun 17 22:46:26 2006 @@ -0,0 +1,175 @@ +/* + * Copyright 2006 The Apache Software Foundation. + * + * Licensed 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. + * + * $Id$ + */ + +package org.apache.shale.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> + */ +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"; + } + +} + Propchange: struts/shale/trunk/shale-test/src/main/java/org/apache/shale/test/cargo/CargoTestSetup.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: struts/shale/trunk/shale-test/src/main/java/org/apache/shale/test/cargo/CargoTestSetup.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL