<?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.directory.server</groupId>
    <artifactId>apacheds-parent</artifactId>
    <version>1.5.8-SNAPSHOT</version>
  </parent>
  
  <artifactId>apacheds-server-integ</artifactId>
  <name>ApacheDS Server Integration</name>
  <packaging>jar</packaging>  

  <description>
    Integration testing framework for Apache Directory Server.
  </description>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>commons-net</groupId>
      <artifactId>commons-net</artifactId>
      <version>${commons.net.version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <artifactId>apacheds-interceptor-kerberos</artifactId>
      <groupId>${groupId}</groupId>
      <version>${version}</version>
    </dependency>  

    <dependency>
      <artifactId>apacheds-core-integ</artifactId>
      <groupId>${groupId}</groupId>
      <version>${version}</version>
    </dependency>  

    <dependency>
      <groupId>ldapsdk</groupId>
      <artifactId>ldapsdk</artifactId>
      <version>${ldapsdk.version}</version>
    </dependency>  
    
    <dependency>
      <groupId>org.apache.directory.client.ldap</groupId>
      <artifactId>ldap-client-api</artifactId>
      <version>0.1</version>
    </dependency>  
  </dependencies>

  <profiles>
    <profile>
      <id>integration</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <includes>
                <include>**/*ISuite.java</include>
                <include>**/*IndexedNegationSearchIT.java</include>
                <!-- commenting this test makes running the test suite with -Dintegration pass
                     so far no clue why is this test despite having it own instance of LdapServer
                     causes the StartTlsIT tests fail
                 <include>**/*LdapsIT.java</include> -->
                <include>**/*MiscBindIT.java</include>
                <include>**/*SaslBindIT.java</include>
                <include>**/*KeyDerivationServiceIT.java</include>
                <include>**/*PasswordPolicyServiceIT.java</include>
                <include>**/*StoredProcedureIT.java</include>
              </includes>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

    <!-- Runs tests three times: with JDBM partition, AVL partition, LDIF partition -->
    <profile>
      <id>integration-all-partitions</id>
      <activation>
        <property><name>test-all-partitions</name></property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <!-- default/JDBM execution -->
            <configuration>
              <includes>
                <include>**/*ISuite.java</include>
                <include>**/*IndexedNegationSearchIT.java</include>
                <!-- commenting this test makes running the test suite with -Dintegration pass
                     so far no clue why is this test despite having it own instance of LdapServer
                     causes the StartTlsIT tests fail
                 <include>**/*LdapsIT.java</include> -->
                <include>**/*MiscBindIT.java</include>
                <include>**/*SaslBindIT.java</include>
                <include>**/*KeyDerivationServiceIT.java</include>
                <include>**/*PasswordPolicyServiceIT.java</include>
                <include>**/*StoredProcedureIT.java</include>
              </includes>
              <systemPropertyVariables>
                <apacheds.partition.factory>org.apache.directory.server.core.factory.JdbmPartitionFactory</apacheds.partition.factory>
              </systemPropertyVariables>              
            </configuration>
            <executions>
              <!-- AVL execution -->
       		  <execution>
       		    <id>avl</id>
       		    <goals>
       		      <goal>test</goal>
       		    </goals>
                <configuration>
                  <systemPropertyVariables>
                    <apacheds.partition.factory>org.apache.directory.server.core.factory.AvlPartitionFactory</apacheds.partition.factory>
                  </systemPropertyVariables>
                </configuration>
              </execution>
              <!-- LDIF execution -->
       		  <execution>
       		    <id>ldif</id>
       		    <goals>
       		      <goal>test</goal>
       		    </goals>
                <configuration>
                  <systemPropertyVariables>
                    <apacheds.partition.factory>org.apache.directory.server.core.factory.LdifPartitionFactory</apacheds.partition.factory>
                  </systemPropertyVariables>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>

