<?xml version="1.0" encoding="UTF-8"?>
<!--
    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.
-->
<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>org.apache.sling</groupId>
        <artifactId>sling</artifactId>
        <version>10</version>
    </parent>

    <artifactId>org.apache.sling.testing.samples.integrationtests</artifactId>
    <version>1.0.6</version>
    <packaging>jar</packaging>

    <name>Apache Sling Sample Integration Tests</name>
    <description>
        Sample project that demonstrates the various tools and techniques
        available to test Sling applications: plain build-time JUnit tests,
        HTTP-based integration tests, server-side JUnit tests injected via
        bundles and server-side scriptable tests.
    </description>
    
    <!-- 
        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>
         -->
         
        <!-- Set this to run tests against an existing server instance -->
        <keepJarRunning>false</keepJarRunning>
        
        <!-- URL of a server against which to run tests -->
        <test.server.url />
        
         <!-- Set this to run tests against a specific hostname, if test.server.url is not set-->
         <test.server.hostname />
        
        <!-- 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>
    
    <scm>
        <connection>scm:svn:http://svn.apache.org/repos/asf/sling/tags/org.apache.sling.testing.samples.integrationtests-1.0.6</connection>
        <developerConnection> scm:svn:https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.testing.samples.integrationtests-1.0.6</developerConnection>
        <url>http://svn.apache.org/viewvc/sling/tags/org.apache.sling.testing.samples.integrationtests-1.0.6</url>
    </scm>

    <build>
        <plugins>
           <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <version>2.2</version>
                <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>
                <version>2.5</version>
                <configuration>
                    <!-- We run all tests in the integration-tests phase -->
                    <excludes>
                        <exclude>**</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.7.2</version>
                <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>
                        <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>60</server.ready.timeout.seconds>
                        <sling.testing.timeout.multiplier>${sling.testing.timeout.multiplier}</sling.testing.timeout.multiplier>
                        <server.ready.path.1>/:script src="system/sling.js"</server.ready.path.1>
                        <server.ready.path.2>/.explorer.html:href="/libs/sling/explorer/css/explorer.css"</server.ready.path.2>
                        <server.ready.path.3>/sling-test/sling/sling-test.html:Sling client library tests</server.ready.path.3>
                        
                        <!-- 
                            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>org.apache.sling.testing.samples.sampletests</sling.additional.bundle.3>
                        <sling.additional.bundle.4>org.apache.sling.testing.samples.failingtests</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>
                    </systemPropertyVariables>
                </configuration>
            </plugin>
         </plugins>
    </build>

    <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.6</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.junit.scriptable</artifactId>
            <version>1.0.6</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.testing.samples.sampletests</artifactId>
            <version>1.0.6</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.testing.samples.failingtests</artifactId>
            <version>1.0.6</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <version>1.0.6</version>
            <artifactId>org.apache.sling.junit.remote</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.testing.tools</artifactId>
            <version>1.0.2</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>
            <version>1.5.11</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.5.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>