Package org.apache.myfaces.test.cargo

Source Code of org.apache.myfaces.test.cargo.CargoTestSetup

/*
* 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";
    }

}
TOP

Related Classes of org.apache.myfaces.test.cargo.CargoTestSetup

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.