OPENJPA-1453 Add support for testing with JPA 2.0 TCK

git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@895723 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Donald Woods 2010-01-04 17:47:19 +00:00
parent c6459391c8
commit 02b5554036
1 changed files with 247 additions and 23 deletions

View File

@ -22,12 +22,20 @@
This build file is used to run the JPA TCK. It assumes that you have
the TCK zip file located at:
${user.home}/.m2/privaterepos/jpa-1_0b-tck.zip
For JPA 1.0 -
${user.home}/.m2/privaterepos/jpa-1_0b-tck.zip
For JPA 2.0 -
${user.home}/.m2/privaterepos/jpatck-2.0_09-Dec-2009.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 the "tck-profile" enabled.
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
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.
@ -66,10 +74,225 @@
</parent>
<profiles>
<profile>
<id>tck-profile</id>
<build>
<plugins>
<profile>
<!-- JPA 2.0 TCK Profile -->
<id>tck2-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 2.0 TCK</echo>
<property name="tck.zip" value="${settings.localRepository}/../privaterepos/jpatck-2.0_09-Dec-2009.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.level" value="WARN" />
<property name="jpatck.pkg.dir" value="com" />
<property name="jpatck.test" value="" />
<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: DefaultLevel=${openjpa.log.level}
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=${tck.dir}/../reports
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 -->
<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="7200000">
<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 2.0 TCK output to ${tck.log}</echo>
<!-- first initialize the database -->
<tsant buildfile="${tck.dir}/bin/initdb.xml" target="init.database" />
<!-- now run the TCK -->
<tsant buildfile="${tck.dir}/bin/build.xml" target="runclient" />
<!--
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>
<echo>JPA TCK Passed 100%!</echo>
<property name="tck.results.archive" value="${tck.base}/openjpa-tck-results.zip" />
<zip destfile="${tck.results.archive}" basedir="${jpatck.work.dir}" />
<echo>Results archive at: ${tck.results.archive}</echo>
</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>${pom.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>
@ -268,33 +491,34 @@ databaseName=${db.name}
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<!-- only used for old JPA 1.0 RI API, which we don't use anymore
<repositories>
<repository>
</plugins>
</build>
<!-- only used for old JPA 1.0 RI API, which we don't use anymore
<repositories>
<repository>
<id>java.net</id>
<name>Java.net Maven Repository</name>
<url>https://maven-repository.dev.java.net/nonav/repository</url>
<layout>legacy</layout>
</repository>
</repositories>
-->
<dependencies>
<dependency>
</repository>
</repositories>
-->
<dependencies>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jpa_2.0_spec</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
</dependency>
<dependency>
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa-kernel</artifactId>
<version>${pom.version}</version>
</dependency>
</dependency>
</dependencies>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>