| <?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 ANT build file is used to run the JPA 2.0 TCK. It assumes that you have |
| the TCK, config and patches zip files located at: |
| |
| ${user.home}/.m2/privaterepos/jpatck-2.0_15-Aug-2011.zip |
| ${user.home}/.m2/privaterepos/jpatck-2.0_15-Aug-2011_config.zip (may not exist) |
| |
| If you have that file in a different location, it can be specified with |
| the "tck.zip" and "tck_patches.zip" system property. |
| |
| The TCK running process will do the following: |
| 1. Find the TCK zip file and extract it |
| 2. Create an openjpa-provider.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 to fail the build or not |
| |
| Other options are documented in the Maven pom.xml which calls this script. |
| --> |
| <!-- |
| Please keep the project tag on one line to avoid confusing |
| the release plugin. |
| --> |
| <project name="JPA2TCK" default="run-tck"> |
| |
| <!-- Import antlib/ant-contrib for If/then/else/for support --> |
| <taskdef resource="net/sf/antcontrib/antlib.xml"/> |
| |
| <!-- |
| Target: init |
| Description: This initializes required properties and validates that |
| required TCK zip files are present on the system and |
| then extracts them. |
| --> |
| <target name="init"> |
| <property name="tck.level" value="jpatck-2.0_15-Aug-2011" /> |
| <property name="tck.zip" value="${LOCAL_M2_REPO}/../privaterepos/${tck.level}.zip" /> |
| <available property="tck.available" file="${tck.zip}" /> |
| <fail unless="tck.available">The TCK file specified 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 2.0 TCK</fail> |
| <!-- |
| <property name="tck_config.zip" value="${LOCAL_M2_REPO}/../privaterepos/${tck.level}_config.zip" /> |
| <available property="tck_config.available" file="${tck_config.zip}" /> |
| <fail unless="tck_config.available">The TCK config file specified in the "tck_config.zip" system property (${tck_config.zip}) does not exist. This file must be downloaded separately in order to be able to run the JPA 2.0 TCK</fail> |
| |
| <property name="tck_patches.zip" value="${LOCAL_M2_REPO}/../privaterepos/${tck.level}_patches.zip" /> |
| <available property="tck_patches.available" file="${tck_patches.zip}" /> |
| <fail unless="tck_patches.available">The TCK patches file specified in the "tck_patches.zip" system property (${tck_patches.zip}) does not exist. This file must be downloaded separately in order to be able to run the JPA 2.0 TCK</fail> |
| --> |
| |
| <delete dir="${tck.dir}" /> |
| <unzip overwrite="false" src="${tck.zip}" dest="${tck.base}" /> |
| <!-- |
| <unzip overwrite="true" src="${tck_config.zip}" dest="${tck.base}" /> |
| <unzip overwrite="true" src="${tck_patches.zip}" dest="${tck.base}" /> |
| --> |
| <copy overwrite="true" |
| file="${tck.dir}/bin/ts.jte" tofile="${tck.dir}/bin/ts.jte.orig" /> |
| <copy overwrite="true" |
| file="${tck.dir}/bin/ts.jtx" tofile="${tck.dir}/bin/ts.jtx.orig" /> |
| <!-- Pluggability tests using Toplink needs this dir created --> |
| <mkdir dir="${tck.dir}/domains/domain1/logs" /> |
| <!-- create other missing directory --> |
| <mkdir dir="${tck.dir}/weblib" /> |
| </target> |
| |
| |
| <!-- |
| Target: setup |
| Description: This updates the TCK configuration for OpenJPA. |
| --> |
| <target name="setup"> |
| <property name="db.name" value="${tck.db.name}" /> |
| <property name="db.driver" value="${connection.driver.name}" /> |
| <property name="db.url" value="${connection.url}" /> |
| <property name="db.username" value="${connection.username}" /> |
| <property name="db.password" value="${connection.password}" /> |
| |
| <property name="openjpa.Log" value="DefaultLevel=TRACE" /> |
| |
| <property name="jpatck.test" value="" /> |
| |
| <property name="tck.reports" value="${tck.base}/reports" /> |
| <property name="tck.work" value="${tck.base}/work" /> |
| |
| <property name="openjpa.properties" value="${tck.dir}/openjpa-provider.properties" /> |
| <property name="toplink.properties" value="${tck.dir}/bin/toplink-provider.properties" /> |
| <!-- create the OpenJPA properties for the TCK run --> |
| <echo append="false" file="${openjpa.properties}"> |
| jakarta.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=true,NumericTypeName="DECIMAL(18,2)") |
| openjpa.jdbc.SchemaFactory: native(ForeignKeys=true) |
| openjpa.jdbc.SynchronizeMappings: buildSchema(ForeignKeys=true) |
| openjpa.ConnectionFactoryProperties: PrintParameters=True |
| </echo> |
| |
| <path id="javart"> |
| <fileset dir="${java.home}/lib"> |
| <include name="**/*.jar" /> |
| </fileset> |
| </path> |
| <pathconvert property="javart.property" refid="javart" /> |
| |
| <!-- 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=${tck.work} |
| report.dir=${tck.reports} |
| jpa.classes=${cp.property} |
| # jpa.classes includes Derby, so only set database.classes for other DBs |
| database.classes= |
| # different properties needed for pluggability bucket |
| openjpa.properties=${openjpa.properties} |
| toplink.properties=${toplink.properties} |
| # 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=${javart.property}${path.separator}${cp.property} |
| persistence.unit.properties.file.full.path=${provider.properties} |
| jakarta.persistence.jdbc.driver: ${db.driver} |
| jakarta.persistence.jdbc.url: ${db.url} |
| jakarta.persistence.jdbc.user: ${db.username} |
| jakarta.persistence.jdbc.password: ${db.password} |
| database.driver=${db.driver} |
| database.url=${db.url} |
| database.user=${db.username} |
| database.passwd=${db.password} |
| databaseName=${db.name} |
| jdbc.lib.classpath=${cp.test.classpath} |
| # disable initdb.xml table creation |
| create.cmp.tables=false |
| |
| </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" /> |
| |
| <!-- append our updated config properties to a clean ts.jte --> |
| <copy overwrite="true" |
| file="${tck.dir}/bin/ts.jte.orig" tofile="${tck.dir}/bin/ts.jte" /> |
| <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="*-shaded.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> |
| |
| <!-- Use the following values to start Eclipse remote debug |
| <property name="DEBUG" value="-Djava.compiler=NONE -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=7777" /> |
| --> |
| <property name="DEBUG" value="" /> |
| <!-- |
| Add in a javaagent argument (optional in JPA2 TCK.) |
| Also, we need to specify the default MetaDataFactory |
| inorder to allow tests that don't have any |
| persistent classes to work (like the SignatureTest) |
| --> |
| <replace file="${jpatck.config}"> |
| <replacefilter token="-Ddeliverable.class=${deliverable.class}" value="-Ddeliverable.class=${deliverable.class} -javaagent:${agent}${agent.properties} ${DEBUG} -Dopenjpa.MetaDataFactory=jpa(DefaultAccessType=PROPERTY)"/> |
| </replace> |
| |
| <!-- Fix path for java.security.policy --> |
| <replace file="${jpatck.config}"> |
| <replacefilter token="-Djava.security.policy=${bin.dir}/harness.policy" value="-Djava.security.policy=${ts.home}/bin/harness.policy"/> |
| </replace> |
| |
| <!-- cleanup reports/work dirs from any prior runs --> |
| <delete dir="${tck.reports}" /> |
| <delete dir="${tck.work}" /> |
| <echo>Logging JPA 2.0 TCK output to ${tck.log}</echo> |
| </target> |
| |
| |
| <!-- |
| Macro for the TCK harness launcher |
| --> |
| <macrodef name="tsant"> |
| <attribute name="dir" default="${tck.dir}/src" /> |
| <attribute name="buildfile" /> |
| <attribute name="target" /> |
| <attribute name="tmo" default="7200000" /> |
| <sequential> |
| <java classname="org.apache.tools.ant.launch.Launcher" fork="true" failonerror="false" dir="@{dir}" append="true" output="${tck.log}" timeout="@{tmo}" 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="${tck.dir}" /> |
| <sysproperty key="ts.home" value="${tck.dir}" /> |
| |
| <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> |
| <fileset dir="${tck.dir}/lib"> |
| <include name="**/*.jar" /> |
| </fileset> |
| </classpath> |
| </java> |
| </sequential> |
| </macrodef> |
| |
| |
| <!-- |
| Macro to determine how many tests passed/failed |
| --> |
| <macrodef name="results.count"> |
| <!-- Figure out the Passed/Failed counts --> |
| <sequential> |
| <resourcecount property="count.passed"> |
| <tokens> |
| <concat> |
| <filterchain> |
| <tokenfilter> |
| <containsstring contains="Passed."/> |
| </tokenfilter> |
| </filterchain> |
| <fileset dir="${tck.reports}" includes="summary.txt" /> |
| </concat> |
| </tokens> |
| </resourcecount> |
| <resourcecount property="count.failed"> |
| <tokens> |
| <concat> |
| <filterchain> |
| <tokenfilter> |
| <containsstring contains="Failed."/> |
| </tokenfilter> |
| </filterchain> |
| <fileset dir="${tck.reports}" includes="summary.txt" /> |
| </concat> |
| </tokens> |
| </resourcecount> |
| <echo>TCK Results - Passed: ${count.passed}, Failed: ${count.failed}</echo> |
| </sequential> |
| </macrodef> |
| |
| |
| <!-- |
| Target: run-tck |
| Description: This is the main routine that runs the TCK, after |
| all other setup steps have been performed. |
| Input: jpatck.pkg.dir System property defines a commna-spearated list of test cases to be run. |
| If not set or set to empty string, all tck tests will be exercised. |
| Note: Beaware if jpatck.pkg.dir includes pluggability test in the dir hierarchy, the pluggability |
| test will fail (5 failures) due to [enable|disable].ts.persistence.provider targets are |
| not invoked, which is required for the pluggability tests. |
| --> |
| <target name="run-tck"> |
| <echo>Running JPA 2.0 TCK tests</echo> |
| <echo>Init must have been called before running this target!</echo> |
| <property name="tck.log" value="${tck.base}/openjpa-tck.log" /> |
| <property name="provider.properties" value="${openjpa.properties}" /> |
| |
| <!-- call TCK setup with above run specific properties set --> |
| <fail unless="OPENJPA_CLASSPATH">The OPENJPA_CLASSPATH was not provided and needs to point to the required OpenJPA and Derby runtime jars.</fail> |
| <antcall target="setup"> |
| <param name="cp.property" value="${OPENJPA_CLASSPATH}" /> |
| </antcall> |
| |
| <!-- backup our updated ts.jte for later debugging --> |
| <copy overwrite="true" |
| file="${tck.dir}/bin/ts.jte" tofile="${tck.base}/ts.jte.tck" /> |
| |
| <!-- HACK - rebuild jpatck/dist jars for persistence.xml fixes --> |
| <echo>Calling TCK build.all</echo> |
| <tsant buildfile="${tck.dir}/bin/build.xml" target="build.all" /> |
| <echo>TCK build.all returned result=${tsant.result}</echo> |
| |
| <!-- first initialize the database --> |
| <echo>Calling TCK initdb.xml</echo> |
| <tsant dir="${tck.dir}/bin" buildfile="${tck.dir}/bin/initdb.xml" target="init.database" /> |
| <echo>TCK initdb.xml returned result=${tsant.result}</echo> |
| |
| <!-- Database table set up --> |
| <!-- OpenJPA relies on SynchronizeMappings to create the database tables... |
| ... except in a couple of cases where we will pre-create the tables. --> |
| <echo>Calling OpenJPA create.openjpa.sql.xml</echo> |
| <ant antfile="${basedir}/sql/create.openjpa.sql.xml" inheritRefs="true" /> |
| |
| <!-- We are attempting to change TCK build.xml;s incorrect property name |
| for the pluggability test enablement... --> |
| <replace file="${tck.dir}/bin/build.xml"> |
| <replacefilter token="persistence.properties.file" |
| value="persistence.unit.properties.file.full.path"/> |
| </replace> |
| <replace file="${tck.dir}/bin/build.xml"> |
| <replacetoken><![CDATA[<replaceregexp file="${bin.dir}/ts.jte"]]></replacetoken> |
| <replacevalue><![CDATA[<replaceregexp flags="g" file="${bin.dir}/ts.jte"]]></replacevalue> |
| </replace> |
| |
| <property name="jpatck.run.tmo" value="7200000" /> |
| <!-- now run the TCK --> |
| <if> |
| <and> |
| <isset property="jpatck.pkg.dir" /> |
| <not> |
| <length string="${jpatck.pkg.dir}" trim="true" length="0" /> |
| </not> |
| </and> |
| <then> |
| <for list="${jpatck.pkg.dir}" param="for.test" trim="true"> |
| <sequential> |
| <if> |
| <contains string="@{for.test}" substring="pluggability"/> |
| <then> |
| <echo>Calling enable.ts.persistence.provider for pluggability test.</echo> |
| <tsant buildfile="${tck.dir}/bin/build.xml" target="enable.ts.persistence.provider" /> |
| </then> |
| </if> |
| |
| <echo>Calling TCK build.xml for pkg.dir=@{for.test}</echo> |
| <property name="dir" value="${tck.dir}/src/@{for.test}" /> |
| <tsant dir="${dir}" buildfile="${dir}/build.xml" target="runclient" tmo="${jpatck.run.tmo}" /> |
| |
| <if> |
| <contains string="@{for.test}" substring="pluggability"/> |
| <then> |
| <echo>Calling disable.ts.persistence.provider for pluggability test.</echo> |
| <tsant buildfile="${tck.dir}/bin/build.xml" target="disable.ts.persistence.provider" /> |
| </then> |
| </if> |
| </sequential> |
| </for> |
| </then> |
| <else> |
| <echo>Calling TCK build.xml for ALL tests</echo> |
| <property name="dir.all" value="${tck.dir}/bin" /> |
| <tsant dir="${dir.all}" buildfile="${dir.all}/build.xml" target="run.all" tmo="${jpatck.run.tmo}"/> |
| </else> |
| </if> |
| |
| <echo>TCK build.xml returned result=${tsant.result}</echo> |
| |
| <!-- archive the results and check for test failures --> |
| <antcall target="zip-artifacts"> |
| <param name="results.name" value="tck" /> |
| </antcall> |
| </target> |
| |
| |
| <!-- |
| Target: zip-artifacts |
| Description: Collects generic TCK test artifacts for debugging |
| --> |
| <target name="zip-artifacts"> |
| <echo>Gathering test artifacts for Sun JPA 2.0 TCK</echo> |
| <copy overwrite="true" |
| file="${tck.reports}/summary.txt" |
| tofile="${tck.base}/summary-${results.name}.txt" /> |
| <property name="tck.results.archive" value="${tck.base}/openjpa-${results.name}-results.zip" /> |
| <!-- archive the results --> |
| <zip destfile="${tck.results.archive}"> |
| <fileset dir="${tck.work}" /> |
| <fileset dir="${tck.reports}" /> |
| <fileset dir="${tck.base}"> |
| <include name="*${results.name}.log" /> |
| <include name="*${results.name}.txt" /> |
| <include name="ts.jte.${results.name}" /> |
| </fileset> |
| </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. |
| --> |
| <results.count /> |
| <loadfile property="jpatck.results" srcfile="${tck.work}/jtData/log.txt" /> |
| <condition property="jpatck.failed"> |
| <contains string="${jpatck.results}" substring="Completed test run: not ok" /> |
| </condition> |
| <fail if="jpatck.failed">Test Results (${results.name}): FAILED ${count.failed} tests!</fail> |
| <!-- else --> |
| <echo>Test Results (${results.name}): PASSED!</echo> |
| </target> |
| |
| </project> |