<?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">
  <parent>
    <artifactId>tck</artifactId>
    <groupId>org.apache.openejb</groupId>
    <version>4.6.0.1-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <artifactId>bval-tomee</artifactId>
  <name>OpenEJB :: TCK :: Bean Validation TomEE</name>
  <description>Aggregates dependencies and runs the JSR-303 TCK in TomEE</description>

  <properties>
    <openejb.home>${project.build.directory}${file.separator}apache-tomee-webprofile-${tomee.version}</openejb.home>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.bval</groupId>
      <artifactId>bval-core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.bval</groupId>
      <artifactId>bval-jsr303</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.openejb</groupId>
      <artifactId>tck-common</artifactId>
      <version>${project.version}</version>
      <exclusions>
        <exclusion>
          <groupId>org.jboss.test-harness</groupId>
          <artifactId>jboss-test-harness</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>openejb-core</artifactId>
      <version>${project.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.openejb</groupId>
      <artifactId>apache-tomee</artifactId>
      <type>zip</type>
      <version>1.6.0.1-SNAPSHOT</version>
      <classifier>webprofile</classifier>
    </dependency>
    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
    </dependency>
    <dependency>
      <groupId>org.hibernate.jsr303.tck</groupId>
      <artifactId>jsr303-tck</artifactId>
      <version>1.0.6.GA</version>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>org.testng</groupId>
          <artifactId>testng</artifactId>
        </exclusion>
        <exclusion>
          <groupId>javax.validation</groupId>
          <artifactId>validation-api</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>

  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <id>reserve-network-port</id>
            <phase>pre-integration-test</phase>
            <goals>
              <goal>reserve-network-port</goal>
            </goals>
            <configuration>
              <portNames>
                <portName>tomee.ssl.port</portName>
                <portName>tomee.ajp.port</portName>
                <portName>tomee.http.port</portName>
                <portName>tomee.shutdown.port</portName>
              </portNames>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.6</version>
        <executions>
          <execution>
            <id>unpack</id>
            <phase>pre-integration-test</phase>
            <goals>
              <goal>unpack</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>org.apache.openejb</groupId>
                  <artifactId>apache-tomee</artifactId>
                  <version>${tomee.version}</version>
                  <type>zip</type>
                  <classifier>webprofile</classifier>
                  <outputDirectory>${project.build.directory}</outputDirectory>
                </artifactItem>
              </artifactItems>
            </configuration>
          </execution>
          <execution>
            <id>copy</id>
            <phase>pre-integration-test</phase>
            <goals>
              <goal>copy</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>org.apache.openejb</groupId>
                  <artifactId>tck-common</artifactId>
                  <version>${project.version}</version>
                  <outputDirectory>${project.build.directory}/dependency/lib</outputDirectory>
                </artifactItem>
                <artifactItem>
                  <groupId>org.apache.openejb</groupId>
                  <artifactId>bval-tomee</artifactId>
                  <version>${project.version}</version>
                  <outputDirectory>${project.build.directory}/dependency/lib</outputDirectory>
                </artifactItem>
              </artifactItems>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.13</version>
        <configuration>
		  <useFile>false</useFile>
		  <disableXmlReport>true</disableXmlReport>
          <skip>true</skip>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>2.13</version>
        <configuration>
          <suiteXmlFiles>
            <suiteXmlFile>src/test/resources/jsr303-tck-suite.xml</suiteXmlFile>
          </suiteXmlFiles>
          <systemPropertyVariables>
            <org.jboss.testharness.standalone>false</org.jboss.testharness.standalone>
            <org.jboss.testharness.runIntegrationTests>true</org.jboss.testharness.runIntegrationTests>
            <org.jboss.testharness.container.forceRestart>true</org.jboss.testharness.container.forceRestart>
            <org.jboss.testharness.libraryDirectory>${project.build.directory}/dependency/lib</org.jboss.testharness.libraryDirectory>
            <org.jboss.testharness.host>localhost:${tomee.http.port}</org.jboss.testharness.host>
            <deleteArtifacts>true</deleteArtifacts>

            <force.deployment>true</force.deployment>
            <validation.provider>org.apache.bval.jsr303.ApacheValidationProvider</validation.provider>

            <!--<maven.failsafe.debug>true</maven.failsafe.debug>-->
            <!--<openejb.server.debug>true</openejb.server.debug>-->
            <java.naming.provider.url>http://localhost:${tomee.http.port}/tomee/ejb</java.naming.provider.url>
            <connect.tries>90</connect.tries>
            <server.http.port>${tomee.http.port}</server.http.port>
            <server.shutdown.port>${tomee.shutdown.port}</server.shutdown.port>
            <java.opts>-Xmx512m -Xss2048k -XX:PermSize=64m -XX:MaxPermSize=256m -XX:ReservedCodeCacheSize=64m</java.opts>
            <openejb.home>${openejb.home}</openejb.home>
          </systemPropertyVariables>
        </configuration>
        <executions>
          <execution>
            <id>integration-test</id>
            <phase>integration-test</phase>
            <goals>
              <goal>integration-test</goal>
            </goals>
          </execution>
          <execution>
            <id>verify</id>
            <phase>verify</phase>
            <goals>
              <goal>verify</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <id>remove-apps</id>
            <phase>pre-integration-test</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <delete dir="${openejb.home}/webapps/docs" />
                <delete dir="${openejb.home}/webapps/manager" />
                <delete dir="${openejb.home}/webapps/host-manager" />
                <replace file="${openejb.home}/conf/server.xml" token="8080" value="${tomee.http.port}" />
                <replace file="${openejb.home}/conf/server.xml" token="8443" value="${tomee.ssl.port}" />
                <replace file="${openejb.home}/conf/server.xml" token="8005" value="${tomee.shutdown.port}" />
                <replace file="${openejb.home}/conf/server.xml" token="8009" value="${tomee.ajp.port}" />

                <!-- validator provider property -->
                <copy file="src/main/tomcat/conf/system.properties" tofile="${openejb.home}/conf/system.properties" overwrite="true" />
              </target>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>