<?xml version="1.0" encoding="UTF-8"?>
<!--
 |  Copyright 2015 Adobe Systems Incorporated
 |
 |  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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.aftia</groupId>
        <artifactId>fbp</artifactId>
        <version>1.0.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <!-- ====================================================================== -->
    <!-- P R O J E C T  D E S C R I P T I O N                                   -->
    <!-- ====================================================================== -->
    <artifactId>fbp.it.launcher</artifactId>
    <packaging>jar</packaging>
    <name>Aftia FBP - Integration Tests Launcher</name>
    <description>Integration Tests Launcher for Aftia FBP</description>

    <!-- <scm>
        <connection></connection>
        <developerConnection></developerConnection>
        <url></url>
        <tag>HEAD</tag>
    </scm-->

    <!-- 
        To keep the instance under test running and run individual tests
        against it, use:
        
            mvn clean verify -DkeepJarRunning=true -Dhttp.port=8080
            
        optionally using jar.executor.vm.options to enable remote debugging,
        and in another console:
        
            mvn -o verify -Dtests.to.run=**/**Test.java -Dtest.server.url=http://localhost:8080
            
        optionally using -Dmaven.surefire.debug to enable debugging.            
     -->
    <properties>
        <!-- Set this to run the server on a specific port
        <http.port></http.port>
         -->
        
        <!-- URL of a server against which to run tests -->
        <test.server.url>http://${aem.host}:${aem.port}</test.server.url>
        
        <!-- Set this to run tests against an existing server instance -->
        <keepJarRunning>false</keepJarRunning>
        
        <!-- Set this to run tests against a specific hostname, if test.server.url is not set-->
        <test.server.hostname />

        <!-- Set this to use a different username for remote execution of sling junit tests -->
        <test.server.username />

        <!-- Set this to use a different password for remote execution of sling junit tests -->
        <test.server.password />
        
        <!-- Options for the VM that executes our runnable jar -->
        <jar.executor.vm.options>-Xmx512m</jar.executor.vm.options>
        
        <!-- Change this to use longer or shorter timeouts for testing -->
        <sling.testing.timeout.multiplier>1.0</sling.testing.timeout.multiplier>
        
        <!-- Set this to run the executable jar in a specified filesystem folder -->
        <jar.executor.work.folder />
        
        <!-- Options for the jar to execute. $JAREXEC_SERVER_PORT$ is replaced by the
            selected port number -->
        <jar.executor.jar.options>-p $JAREXEC_SERVER_PORT$</jar.executor.jar.options>
        
        <!-- Change this to run selected tests only -->
        <tests.to.run>**/**Test.java</tests.to.run>
    </properties>
    
    <build>
        <plugins>
           <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <configuration>
                    <filesets>
                        <fileset>
                            <directory>${basedir}</directory>
                            <includes>
                                <!-- sling folder is the workdir of the executable jar that we test -->
                                <include>sling/**</include>
                            </includes>
                        </fileset>
                    </filesets>
                </configuration>
            </plugin>
           <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-runnable-jar</id>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                            <phase>process-resources</phase>
                        <configuration>
                            <includeArtifactIds>org.apache.sling.launchpad</includeArtifactIds>
                            <excludeTransitive>true</excludeTransitive>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                        </configuration>
                    </execution>
                    <execution>
                        <!-- 
                            Consider all dependencies as candidates to be installed
                            as additional bundles. We use system properties to define
                            which bundles to install in which order.  
                        -->
                        <id>copy-additional-bundles</id>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                            <phase>process-resources</phase>
                        <configuration>
                            <outputDirectory>${project.build.directory}/sling/additional-bundles</outputDirectory>
                            <excludeTransitive>true</excludeTransitive>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <!-- Find free ports to run our server -->
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>reserve-server-port</id>
                        <goals>
                            <goal>reserve-network-port</goal>
                        </goals>
                        <phase>process-resources</phase>
                        <configuration>
                            <portNames>
                                <portName>http.port</portName>
                            </portNames>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <!-- We run all tests in the integration-tests phase -->
                    <excludes>
                        <exclude>**</exclude>
                    </excludes>
                </configuration>
            </plugin>
         </plugins>
    </build>

    <profiles>
        <profile>
            <id>integrationTests</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>integration-test</id>
                                <goals>
                                    <goal>integration-test</goal>
                                </goals>
                            </execution>
                            <execution>
                                <id>verify</id>
                                <goals>
                                    <goal>verify</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <debugForkedProcess>${maven.surefire.debug}</debugForkedProcess>
                            <includes>
                                <include>${tests.to.run}</include>
                            </includes>
                            <systemPropertyVariables>
                                <test.server.url>${test.server.url}</test.server.url>
                                <test.server.hostname>${test.server.hostname}</test.server.hostname>
                                <test.server.username>${test.server.username}</test.server.username>
                                <test.server.password>${test.server.password}</test.server.password>
                                <jar.executor.server.port>${http.port}</jar.executor.server.port>
                                <jar.executor.vm.options>${jar.executor.vm.options}</jar.executor.vm.options>
                                <jar.executor.jar.folder>${project.basedir}/target/dependency</jar.executor.jar.folder>
                                <jar.executor.jar.name.regexp>org.apache.sling.launchpad.*jar$</jar.executor.jar.name.regexp>
                                <jar.executor.work.folder>${jar.executor.work.folder}</jar.executor.work.folder>
                                <jar.executor.jar.options>${jar.executor.jar.options}</jar.executor.jar.options>
                                <additional.bundles.path>${project.basedir}/target/sling/additional-bundles</additional.bundles.path>
                                <keepJarRunning>${keepJarRunning}</keepJarRunning>
                                <server.ready.timeout.seconds>90</server.ready.timeout.seconds>
                                <sling.testing.timeout.multiplier>${sling.testing.timeout.multiplier}</sling.testing.timeout.multiplier>
                                <server.ready.path.1>/projects.html:html</server.ready.path.1>
                                <start.bundles.timeout.seconds>40</start.bundles.timeout.seconds>
                                <bundle.install.timeout.seconds>30</bundle.install.timeout.seconds>

                                <!-- 
                                    Define additional bundles to install by specifying the beginning of their artifact name.
                                    The bundles are installed in lexical order of these property names.
                                    All bundles must be listed as dependencies in this pom, or they won't be installed. 
                                -->
                                <sling.additional.bundle.1>org.apache.sling.junit.core</sling.additional.bundle.1>
                                <sling.additional.bundle.2>org.apache.sling.junit.scriptable</sling.additional.bundle.2>
                                <sling.additional.bundle.3>fbp.it.tests</sling.additional.bundle.3>
                                <sling.additional.bundle.4>fbp.core</sling.additional.bundle.4>
                                <sling.additional.bundle.5>org.apache.sling.junit.remote</sling.additional.bundle.5>
                                <sling.additional.bundle.6>org.apache.sling.testing.tools</sling.additional.bundle.6>
                                <sling.additional.bundle.7>httpclient-osgi</sling.additional.bundle.7>
                                <sling.additional.bundle.8>httpcore-osgi</sling.additional.bundle.8>
                            </systemPropertyVariables>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <dependencies>
        <!-- Additional bundles needed by the Sling instance under test -->
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.junit.core</artifactId>
            <version>1.0.8</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.junit.scriptable</artifactId>
            <version>1.0.12</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.junit.remote</artifactId>
            <version>1.0.8</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.testing.tools</artifactId>
            <version>1.0.8</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.servlets.post</artifactId>
            <version>2.3.4</version>
            <scope>provided</scope>
        </dependency>
        
        <!-- sling testing tools bundles requires httpclient -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient-osgi</artifactId>
            <version>4.5.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore-osgi</artifactId>
            <version>4.4.5</version>
            <scope>provided</scope>
        </dependency>
        
        <!-- actual dependencies -->
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.commons.json</artifactId>
            <version>2.0.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.launchpad</artifactId>
            <classifier>standalone</classifier>
            <version>6</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.aftia</groupId>
            <artifactId>fbp.it.tests</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.aftia</groupId>
            <artifactId>fbp.core</artifactId>
            <version>1.0.0</version>
        </dependency>
         <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>osgi.core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>osgi.cmpn</artifactId>
        </dependency>
        
    </dependencies>
</project>
