<?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>26</version>
        <relativePath/>
    </parent>

    <artifactId>org.apache.sling.resourceaccesssecurity.it</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>bundle</packaging>

    <name>Apache Sling Resource Access Security Integration Tests</name>
    <description>
        Project that tests functionality for org.apache.sling.resourceaccesssecurity bundle.
    </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>http://localhost:8080</test.server.url> -->
        <test.server.url />
        
         <!-- 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 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -Xnoagent -Djava.compiler=NONE</jar.executor.vm.options> -->
        <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:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceaccesssecurity-it.git</connection>
        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceaccesssecurity-it.git</developerConnection>
        <url>https://gitbox.apache.org/repos/asf?p=sling-org-apache-sling-resourceaccesssecurity-it.git</url>
    </scm>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-scr-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.sling</groupId>
                <artifactId>maven-sling-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>org.apache.sling.resourceaccesssecurity.it</Bundle-SymbolicName>
                        <Sling-Initial-Content>SLING-CONTENT/content/test;path:=/content/test;overwrite:=true,
                            SLING-CONTENT/libs/test;path:=/libs/test;overwrite:=true</Sling-Initial-Content>
                        <Export-Package>
                            org.apache.sling.resourceaccesssecurity.it
                        </Export-Package>
                    </instructions>
                </configuration>
            </plugin>
           <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>sling/**</exclude>
                        <exclude>derby.log</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
            </plugin>

           <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>
            <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>
                        <server.ready.timeout.seconds>300</server.ready.timeout.seconds>
                        <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.build.directory},${project.build.directory}/sling/additional-bundles</additional.bundles.path>
                        <keepJarRunning>${keepJarRunning}</keepJarRunning>
                        <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>
                        <start.bundles.timeout.seconds>30</start.bundles.timeout.seconds>
                        <bundle.install.timeout.seconds>20</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.5>org.apache.sling.resourceaccesssecurity-</sling.additional.bundle.5>
                        <sling.additional.bundle.7>${project.build.finalName}.jar</sling.additional.bundle.7>
                    </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.testing.tools</artifactId>
            <version>1.0.12</version>
            <scope>provided</scope>
        </dependency>
        
        <!-- sling testing tools bundles requires httpclient -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient-osgi</artifactId>
            <version>4.1.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore-osgi</artifactId>
            <version>4.1.2</version>
            <scope>provided</scope>
        </dependency>
        
        <!-- actual dependencies -->
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.launchpad</artifactId>
            <classifier>standalone</classifier>
            <version>7</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.6</version>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</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>
            <version>1.7.6</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.api</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.jackrabbit</groupId>
            <artifactId>jackrabbit-api</artifactId>
            <version>2.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.jackrabbit</groupId>
            <artifactId>jackrabbit-jcr-commons</artifactId>
            <version>2.7.5</version>
        </dependency>
        <dependency>
            <groupId>javax.jcr</groupId>
            <artifactId>jcr</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.resourceaccesssecurity</artifactId>
            <version>1.0.1-SNAPSHOT</version>
        </dependency>

    </dependencies>
</project>
