<?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.
-->

<!--
    This build file is used to run the JPA TCK. It assumes that you have
    the TCK zip file located at:

        For JPA 1.0 -
            ${user.home}/.m2/privaterepos/jpa-1_0b-tck.zip
        For JPA 2.0 -
            ${user.home}/.m2/privaterepos/jpatck-2.0_15-Jun-2010.zip

    If you have that file in a different location, it can be specified with
    the "tck.zip" system property.

    The TCK will only be run if you have one of the following profiles enabled:

        For JPA 1.0 -
            -Ptck-profile
        For JPA 2.0 -
            -Ptck2-profile

    For the JPA 2.0 TCK, the default level used will be the latest available,
    but you can also test against prior levels by setting:
        -Dtck2.level=20091209

    To set the TCK run time limit, use the "jpatck.run.tmo" system property to
    specify the timeout value in milliseconds. Default to 7200000 (2 hours).

    To run a specific package of tests, use the "jpatck.pkg.dir" system
    property to specify the parent directory of the tests you want to run.
    E.g.:

        mvn integration-test -Ptck-profile -Djpatck.pkg.dir=com/sun/ts/tests/ejb30/persistence/inheritance/mappedsc/descriptors

    You can also run using another database (e.g., oracle) using command
    line properties. For example:

        mvn integration-test -Ddb.name=oracle -Ddb.driver=oracle.jdbc.driver.OracleDriver -Ddb.url=jdbc:oracle:thin:@dbhost:1526:dbname -Ddb.username=scott -Ddb.password=tiger -Ddb.jar=/tmp/oracle-jdbc.jar -Dtest=false -Ptck-profile -Djpatck.pkg.dir=com/sun/ts/tests/ejb30/persistence/query/apitests -Djpatck.test=queryAPITest15

    The TCK running process will do the following:

    1. Fine the TCK zip file and extract it
    2. Create an openjpa-provier.properties file with the OpenJPA config
    3. Modify the TCK's main configuration file (ts.jte) to use OpenJPA
    4. Run the database initialization script
    5. Run the TCK script
    6. Parse the TCK result log to determine whether to fail the build or not
-->
<!--
    Please keep the project tag on one line to avoid confusing
    the release plugin.
-->
<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.openjpa</groupId>
        <artifactId>openjpa-integration</artifactId>
        <version>2.2.1</version>
    </parent>

    <groupId>org.apache.openjpa</groupId>
    <artifactId>openjpa-integration-tck</artifactId>
    <packaging>pom</packaging>
    <name>OpenJPA Integration Tests - JPA TCK</name>
    <description>OpenJPA Integration Tests - JPA TCK</description>

    <properties>
        <openjpa.Log>DefaultLevel=WARN</openjpa.Log>
        <tck2.level>20101205</tck2.level>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <configuration>
                    <!-- Don't publish these artifacts to central -->
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <profiles>
      <profile>
        <!-- JPA 2.0 TCK Profile -->
        <id>tck2-profile</id>
        <build>
          <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <requireJavaVersion>
                                    <version>[1.6,)</version>
                                </requireJavaVersion>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-antrun-plugin</artifactId>
              <executions>
                <execution>
                  <id>tckinit</id>
                  <phase>pre-integration-test</phase>
                  <configuration>
                    <tasks>
                        <echo>Running Sun JPA 2.0 TCK Init</echo>
                        <property name="tck.base" value="${basedir}/target/tck" />
                        <property name="tck.dir" value="${tck.base}/jpatck" />
                        <property name="LOCAL_M2_REPO" value="${settings.localRepository}" />
                        <ant antfile="${basedir}/tck2-${tck2.level}.xml">
                            <target name="init" />
                        </ant>
                    </tasks>
                  </configuration>
                  <goals>
                    <goal>run</goal>
                  </goals>
                </execution>
                <execution>
                  <id>run-tck</id>
                  <phase>integration-test</phase>
                  <configuration>
                    <tasks>
                        <echo>Running Sun JPA 2.0 TCK</echo>

                        <property name="tck.base" value="${basedir}/target/tck" />
                        <property name="tck.dir" value="${tck.base}/jpatck" />
                        <property name="tck.reports" value="${tck.dir}/reports" />
                        <property name="tck.work" value="${tck.dir}/work" />

                        <!--
                            Setup jpa.classes to only use the Maven artifacts
                            that we specified as dependencies
                        -->
                        <path id="cp.openjpa">
                            <path refid="maven.compile.classpath" />
                        </path>
                        <pathconvert property="OPENJPA_CLASSPATH" refid="cp.openjpa" />

                        <!--
                            Setup jpa.classes to use the Maven artifacts AND
                            the toplink provider required for pluggability tests
                        -->
                        <path id="cp.toplink">
                            <path refid="maven.compile.classpath" />
                            <!-- need to include the toplink jars for pluggability tests -->
                            <fileset dir="${tck.dir}/lib">
                                <include name="**/*toplink*.jar" />
                            </fileset>
                        </path>
                        <pathconvert property="TOPLINK_CLASSPATH" refid="cp.toplink" />

                        <path id="cp">
                            <path refid="maven.compile.classpath" />
                        </path>

                        <ant antfile="${basedir}/tck2-${tck2.level}.xml" inheritRefs="true">
                            <target name="run-tck" />
                        </ant>
                    </tasks>
                  </configuration>
                  <goals>
                    <goal>run</goal>
                  </goals>
                </execution>
              </executions>
            </plugin>
          </plugins>
        </build>
        <!-- Just pull in openjpa-all, which will include all required deps -->
        <dependencies>
          <dependency>
            <groupId>org.apache.openjpa</groupId>
            <artifactId>openjpa-all</artifactId>
            <version>${project.version}</version>
          </dependency>
        </dependencies>
      </profile>

      <profile>
        <!-- JPA 1.0b TCK Profile -->
        <id>tck-profile</id>
        <build>
          <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-antrun-plugin</artifactId>
              <executions>
                <execution>
                  <id>run-tck</id>
                  <phase>integration-test</phase>
                  <configuration>
                    <tasks>
                        <echo>Running Sun JPA 1.0b TCK</echo>

                        <property name="tck.zip" value="${settings.localRepository}/../privaterepos/jpa-1_0b-tck.zip" />
                         <available property="tck.available" file="${tck.zip}" />
                        <fail unless="tck.available">The TCK file ${tck.zip} does not exist. This file must be downloaded separately in order to be able to run the JPA TCK</fail>


                        <available property="tck.available" file="${tck.zip}" />
                        <fail unless="tck.available">The TCK file specific in the "tck.zip" system property (${tck.zip}) does not exist. This file must be downloaded separately in order to be able to run the JPA TCK</fail>

                        <property name="tck.base" value="${basedir}/target/tck" />
                        <property name="tck.dir" value="${tck.base}/jpatck" />

                        <delete dir="${tck.dir}" />

                        <unzip overwrite="false" src="${tck.zip}" dest="${tck.base}" />

                        <path id="cp">
                            <path refid="maven.compile.classpath" />

                            <!-- use official JPA API instead of GM's -->
                            <fileset dir="${tck.dir}/lib">
                                <include name="**/*.jar" />
                            </fileset>
                            <pathelement path="${java.class.path}" />
                            <pathelement path="${db.jar}" />
                        </path>
                        <pathconvert property="cp.property" refid="cp" />

                        <property name="db.name" value="derby" />
                        <property name="db.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
                        <property name="db.url" value="jdbc:derby:derby-database;create=true" />
                        <property name="db.username" value="nousername" />
                        <property name="db.password" value="nopassword" />

                        <property name="openjpa.Log" value="${openjpa.Log}" />

                        <property name="jpatck.pkg.dir" value="com" />
                        <property name="jpatck.test" value="" />

                        <property name="jpatck.reports.dir" value="${tck.dir}/../reports" />
                        <property name="jpatck.work.dir" value="${tck.dir}/../work" />
                        <property name="tck.log" value="${tck.base}/openjpa-tck.log" />

                        <property name="openjpa.properties" value="${tck.dir}/openjpa-provier.properties" />

                        <!-- create the OpenJPA properties for the TCK run -->
                        <echo append="false" file="${openjpa.properties}">
javax.persistence.provider: org.apache.openjpa.persistence.PersistenceProviderImpl
openjpa.ConnectionDriverName: ${db.driver}
openjpa.ConnectionURL: ${db.url}
openjpa.ConnectionUserName: ${db.username}
openjpa.ConnectionPassword: ${db.password}
openjpa.FetchBatchSize: -1
openjpa.Compatibility: StrictIdentityValues=true
openjpa.Sequence: time
openjpa.Log: ${openjpa.Log}
openjpa.jdbc.DBDictionary: StoreCharsAsNumbers=false
openjpa.jdbc.SchemaFactory: native(ForeignKeys=true)
                        </echo>

                        <!-- Append OpenJPA-specific configuration -->
                        <property name="jpatck.config" value="${tck.dir}/bin/ts.jte" />

                        <echo append="false" file="${jpatck.config}.tmp">


#########################################################################
## OpenJPA specific properties follow
#########################################################################

jpa.home=${tck.dir}
work.dir=${jpatck.work.dir}
report.dir=${jpatck.reports.dir}
jpa.classes=${cp.property}
database.classes=${jpa.classes}
# Need to specify java.* classes, both in Windows/UNIX locations as well as Mac.
# This includes a few different possible locations; only one of them needs to
# actually work for a given environment.
sigTestClasspath=${JAVA_HOME}/lib/rt.jar${path.separator}${JAVA_HOME}/jre/lib/rt.jar${path.separator}${JAVA_HOME}/../Classes/classes.jar${path.separator}$${jpa.classes}
persistence.unit.properties.file.full.path=${openjpa.properties}
database.user=${db.username}
database.passwd=${db.password}
database.url=${db.url}
database.driver=${db.driver}
databaseName=${db.name}

                        </echo>

                        <!-- convert backslashes and known paths with spaces
                            to get around a problem with the TCK testrunner
                            on windows -->
                        <echo>Update directory paths if running on Windows</echo>
                        <replace summary="yes" file="${jpatck.config}.tmp" replacefilterfile="windows-replacefilter.properties" />
                        <concat append="true" destfile="${jpatck.config}">
                            <fileset file="${jpatck.config}.tmp" />
                        </concat>

                        <path id="agent.path">
                            <fileset dir="../../openjpa/target">
                                <include name="*.jar" />
                                <exclude name="*-sources.jar" />
                                <exclude name="original-*.jar" />
                                <exclude name="*-tests.jar" />
                                <exclude name="*-javadoc.jar" />
                            </fileset>
                        </path>
                        <pathconvert dirsep="/" property="agent" refid="agent.path" />
                        <property name="agent.properties" value="" />
                        <echo>AGENT: ${agent}${agent.properties}</echo>

                        <!--
                            Replace the existing javaagent argument (which
                            uses Toplink's enhancer) with our own. Also, we
                            need to specify the default MetaDataFactory in
                            order to allow tests that don't have any
                            persistent classes to work (like the SignatureTest)
                        -->
                        <replace file="${jpatck.config}">
                            <replacefilter token="-javaagent:${jpa.home}/lib/toplink-essentials-agent.jar" value="-javaagent:${agent}${agent.properties} -Dopenjpa.MetaDataFactory=jpa(DefaultAccessType=PROPERTY)" />
                        </replace>

                        <!-- make a macro for the TCK harness launcher -->
                        <macrodef name="tsant">
                            <attribute name="buildfile" />
                            <attribute name="target" />
                            <sequential>
                                <java classname="org.apache.tools.ant.launch.Launcher" fork="true" failonerror="true" dir="${tck.dir}/src" append="true" output="${tck.log}" timeout="14400000" resultproperty="tsant.result">
                                    <arg value="-emacs" />
                                    <arg value="-buildfile" />
                                    <arg value="@{buildfile}" />
                                    <arg value="-listener" />
                                    <arg value="com.sun.ant.TSBuildListener" />
                                    <arg value="-logger" />
                                    <arg value="com.sun.ant.TSLogger" />
                                    <arg value="@{target}" />

                                    <env key="TS_HOME" value=".." />
                                    <sysproperty key="ts.home" value=".." />

                                    <env key="ANT_HOME" value="${tck.dir}/tools/ant" />
                                    <sysproperty key="ant.home" value="${tck.dir}/tools/ant" />

                                    <sysproperty key="pkg.dir" value="${jpatck.pkg.dir}" />
                                    <!--
                                    <sysproperty key="test" value="${jpatck.test}" />
                                    -->

                                    <classpath>
                                        <path refid="cp" />
                                        <fileset dir="${tck.dir}/tools/ant/lib">
                                            <include name="**/*.jar" />
                                        </fileset>
                                    </classpath>
                                </java>
                            </sequential>
                        </macrodef>

                        <echo>Logging JPA TCK output to ${tck.log}</echo>

                        <!-- first initialize the database -->
                        <echo>Calling TCK initdb.xml</echo>
                        <tsant buildfile="${tck.dir}/bin/initdb.xml" target="init.database" />
                        <echo>TCK initdb.xml returned result=${tsant.result}</echo>

                        <!-- now run the TCK -->
                        <echo>Calling TCK build.xml</echo>
                        <tsant buildfile="${tck.dir}/bin/build.xml" target="runclient" />
                        <echo>TCK build.xml returned result=${tsant.result}</echo>

                        <!-- archive the results -->
                        <property name="tck.results.archive" value="${tck.base}/openjpa-tck-results.zip" />
                        <zip destfile="${tck.results.archive}">
                            <fileset dir="${jpatck.work.dir}" />
                        </zip>
                        <echo>Results archive at: ${tck.results.archive}</echo>

                        <!--
                            The TCK's Java process doesn't actually fail when
                            tests fail, so we need to parse the results file
                            for a string indicating whether or not it passed.
                        -->
                        <loadfile property="jpatck.results" srcfile="${jpatck.work.dir}/jtData/log.txt" />
                        <condition property="jpatck.failed">
                            <contains string="${jpatck.results}" substring="Completed test run: not ok" />
                        </condition>
                        <fail if="jpatck.failed">Some tests failed</fail>
                        <!-- else -->
                        <echo>JPA TCK Passed 100%!</echo>

                    </tasks>
                  </configuration>
                  <goals>
                    <goal>run</goal>
                  </goals>
                </execution>
              </executions>
            </plugin>
          </plugins>
        </build>

        <dependencies>
          <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-jpa_2.0_spec</artifactId>
            <scope>compile</scope>
          </dependency>
          <dependency>
            <groupId>org.apache.openjpa</groupId>
            <artifactId>openjpa-kernel</artifactId>
            <version>${project.version}</version>
          </dependency>
        </dependencies>
      </profile>
    </profiles>

    <dependencies>
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <version>${derby.version}</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</project>
