<?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/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.syncope.ide</groupId>
    <artifactId>syncope-ide-eclipse</artifactId>
    <version>2.1.11</version>
    <relativePath>../../</relativePath>
  </parent>

  <name>Apache Syncope IDE Eclipse Tests</name>
  <description>Apache Syncope IDE Eclipse Tests</description>
  <groupId>org.apache.syncope.ide.eclipse</groupId>
  <artifactId>org.apache.syncope.ide.eclipse.tests</artifactId>
  <packaging>eclipse-test-plugin</packaging>
  
  <properties>
    <rootpom.basedir>${basedir}/../../../..</rootpom.basedir>
  </properties>

  <dependencies>
    <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.syncope.fit</groupId>
      <artifactId>syncope-fit-core-reference</artifactId>
      <version>${project.version}</version>
      <type>war</type>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <profiles>
    <profile>
      <id>eclipse-it</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.eclipse.tycho</groupId>
            <artifactId>target-platform-configuration</artifactId>
            <configuration>
              <dependency-resolution>
                <extraRequirements>
                  <requirement>
                    <type>eclipse-feature</type>
                    <id>org.eclipse.e4.rcp</id>
                    <versionRange>0.0.0</versionRange>
                  </requirement>
                  <requirement>
                    <type>eclipse-feature</type>
                    <id>org.eclipse.pde</id>
                    <versionRange>0.0.0</versionRange>
                  </requirement>
                  <requirement>
                    <type>eclipse-feature</type>
                    <id>org.eclipse.cvs</id>
                    <versionRange>0.0.0</versionRange>
                  </requirement>
                </extraRequirements>
              </dependency-resolution>
            </configuration>
          </plugin>
          
          <plugin>		
            <groupId>org.eclipse.tycho</groupId>		
            <artifactId>tycho-surefire-plugin</artifactId>		
            <configuration>		
              <useUIHarness>true</useUIHarness>		
              <useUIThread>false</useUIThread>		
              <product>org.eclipse.sdk.ide</product>		
              <application>org.eclipse.ui.ide.workbench</application>		
            </configuration>		
          </plugin>
 
          <plugin>
            <groupId>org.codehaus.cargo</groupId>
            <artifactId>cargo-maven2-plugin</artifactId>
            <inherited>true</inherited>
            <configuration>
              <container>
                <dependencies>
                  <dependency>
                    <groupId>com.h2database</groupId>
                    <artifactId>h2</artifactId>
                  </dependency>
                </dependencies>
              </container>
              <configuration>
                <type>standalone</type>
                <properties>
                  <cargo.servlet.port>${cargo.servlet.port}</cargo.servlet.port>
                  <cargo.tomcat.ajp.port>${cargo.tomcat.ajp.port}</cargo.tomcat.ajp.port>
                  <cargo.rmi.port>${cargo.rmi.port}</cargo.rmi.port>

                  <cargo.jvmargs>-XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:MaxPermSize=512m -Xmx1024m -Xms512m</cargo.jvmargs>
                </properties>
              </configuration>
              <deployables>
                <deployable>
                  <location>${basedir}/../../../../fit/core-reference/target/syncope-fit-core-reference-${project.version}.war</location>
                  <pingURL>http://localhost:${cargo.servlet.port}/syncope/cacheStats.jsp</pingURL>
                  <pingTimeout>60000</pingTimeout>
                  <properties>
                    <context>syncope</context>
                  </properties>
                  <type>war</type>
                </deployable>
              </deployables>
            </configuration>
            <executions>
              <execution>
                <id>start-container</id>
                <phase>pre-integration-test</phase>
                <goals>
                  <goal>start</goal>
                </goals>
              </execution>
              <execution>
                <id>stop-container</id>
                <phase>post-integration-test</phase>
                <goals>
                  <goal>stop</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
