blob: 01e2e3332fe4e5dbe09c17ddee991fd92b83b5e3 [file] [log] [blame]
<?xml version="1.0"?>
<!--/*******************************************************************************
* Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Ant naming conventions:
* - regardless of the actual OS platform,'/' is the directory separator
* (Ant will convert as appropriate).
* - multi-word properties use periods '.'
* - properties ending in .jar define jarfile names only (no path)
* - properties ending in .lib are fully qualified jars (path and filename)
* - properties ending in .dir are directory paths
* - properties ending in .path are path refid names or explicit classpath fragments
* - multi-word targets use hyphens '-'
* - targets beginning with test- are reserved for high level test targets,
* and are used in test results parsing
* - targets typically use the form <action>-<object>-<type> (ie. package-bundle-zip)
* - multi-word macros use underscores '_'
* - multi-word macro attributes are concatenated
* e.g. 'runpathref'
* - multi-word tasks (taskdef) names are concatenated
* e.g. 'validateconnection'
* - OS environment variables are in ALLCAPS and have 'env' as a prefix
* e.g. ${env.XXX}.
* - Ant properties are lower case.
*
* Contributors:
* Martin Vojtek - initial implementation
#******************************************************************************/-->
<project name="eclipselink.perf.test" default="test" basedir=".">
<dirname property="perftest.build.location_temp" file="${ant.file.eclipselink.perf.test}"/>
<pathconvert targetos="unix" property="perftest.build.location">
<path>
<pathelement location="${perftest.build.location_temp}"/>
</path>
</pathconvert>
<echo message="perftest.build.location = '${perftest.build.location}'"/>
<condition property="perftest.2.trunk.dir" value="../.." else="..">
<contains string="${perftest.build.location}" substring="performance/${ant.project.name}"/>
</condition>
<echo message="perftest.2.trunk.dir = '${perftest.2.trunk.dir}'"/>
<property name="perftest.2.common.plugins.dir" value="${perftest.2.trunk.dir}/plugins"/>
<property name="perftest.2.moxy.dir" value="${perftest.2.trunk.dir}/moxy/org.eclipse.persistence.moxy"/>
<property name="perftest.2.core.dir" value="${perftest.2.trunk.dir}/foundation/org.eclipse.persistence.core"/>
<property name="perftest.2.jpa.dir" value="${perftest.2.trunk.dir}/jpa/org.eclipse.persistence.jpa"/>
<!-- Temporary until eclipselink.jar property is globally renamed -->
<property name="eclipselink.jar" value="eclipselink.jar"/>
<!-- Allows a user to override certain user specific properties. -->
<property name="env" environment="env" value="env"/>
<!-- Allows a user to overide certain user specific properties. -->
<!-- local property overrides -->
<condition property="custom.bld.properties.message" value="Loading user-defined overrides from '${user.home}/build.properties'..."
else="No user-defined overrides found to load ('${user.home}/build.properties' non-existant).">
<available file="${user.home}/build.properties"/>
</condition>
<echo message="${custom.bld.properties.message}"/>
<property file="${user.home}/build.properties"/>
<condition property="custom.tst.properties.message" value="Loading user-defined test overrides from '${user.home}/test.properties'..."
else="No user-defined test overrides found to load ('${user.home}/test.properties' non-existant).">
<available file="${user.home}/test.properties"/>
</condition>
<condition property="custom.cmd.properties.message"
value="Loading ${test.properties}"
else="Skipping ${test.properties}, file does not exist">
<and>
<isset property="test.properties"/>
<available file="${test.properties}"/>
</and>
</condition>
<echo message="${custom.tst.properties.message}"/>
<property file="${user.home}/test.properties"/>
<echo message="${custom.cmd.properties.message}"/>
<property file="${test.properties}"/>
<!-- Allows overriding defaults where access to user.home isn't allowed -->
<condition property="custom.local.properties.message" value="Loading local overrides from '${basedir}/local.build.properties'..."
else="No Local overrides found to load. ('${basedir}/local.build.properties' non-existant).">
<available file="${basedir}/local.build.properties"/>
</condition>
<echo message="${custom.local.properties.message}"/>
<property file="${basedir}/local.build.properties"/>
<property file="${perftest.build.location}/antbuild.properties"/>
<property name="extensions.depend.dir" value="../../../extension.lib.external"/>
<property name="asm.lib" value="${perftest.2.common.plugins.dir}/${asm.jar}"/>
<property name="eclipselink.lib" value="${perftest.2.trunk.dir}/${eclipselink.jar}"/>
<property name="javax.validation.lib" value="${perftest.2.common.plugins.dir}/${javax.validation.jar}"/>
<property name="jpa21.lib" value="${perftest.2.trunk.dir}/jpa/plugins/${persistence22.jar}"/>
<property name="json.lib" value="${perftest.2.common.plugins.dir}/${json.jar}"/>
<property name="validation-impl.lib" value="${extensions.depend.dir}/${validation-impl.jar}"/>
<property name="jboss-logging.lib" value="${extensions.depend.dir}/${jboss-logging.jar}"/>
<property name="javax.el-api.lib" value="${extensions.depend.dir}/${javax.el-api.jar}"/>
<property name="classmate.lib" value="${extensions.depend.dir}/${classmate.jar}"/>
<property name="jmh-core.lib" value="${extensions.depend.dir}/${jmh-core.jar}"/>
<property name="jmh-generator-annprocess.lib" value="${extensions.depend.dir}/${jmh-generator-annprocess.jar}"/>
<property name="commons-math.lib" value="${extensions.depend.dir}/${commons-math.jar}"/>
<!-- Loaded from ${user.home}/test.properties -->
<property name="jdbc.driver.lib" value="${jdbc.driver.jar}"/>
<property name="persistence.xml" value="resource/META-INF/persistence.xml"/>
<property name="additional.jvmargs" value="-Ddummy2=dummy"/>
<!-- Compile/run paths -->
<path id="perf.compile.path">
<pathelement path="${jmh-core.lib}"/>
<pathelement path="${jmh-generator-annprocess.lib}"/>
<pathelement path="${json.lib}"/>
<pathelement path="${jpa21.lib}"/>
<pathelement path="${perftest.2.core.dir}/target/${classes.dir}"/>
<pathelement path="${perftest.2.jpa.dir}/target/${classes.dir}"/>
<pathelement path="${perftest.2.moxy.dir}/target/${classes.dir}"/>
<pathelement path="${javax.validation.lib}"/>
</path>
<path id="perf.run.path">
<pathelement path="${jmh-core.lib}"/>
<pathelement path="${jmh-generator-annprocess.lib}"/>
<pathelement path="${commons-math.lib}"/>
<pathelement path="${jpa21.lib}"/>
<pathelement path="${jdbc.driver.lib}"/>
<pathelement path="${javax.validation.lib}"/>
<pathelement path="${validation-impl.lib}"/>
<pathelement path="${jboss-logging.lib}"/>
<pathelement path="${javax.el-api.lib}"/>
<pathelement path="${classmate.lib}"/>
<pathelement path="${asm.lib}"/>
<pathelement path="${json.lib}"/>
<pathelement path="${perftest.2.moxy.dir}/target/${classes.dir}"/>
<pathelement path="${perftest.2.core.dir}/target/${classes.dir}"/>
<pathelement path="${perftest.2.jpa.dir}/target/${classes.dir}"/>
<pathelement path="${classes.dir}"/>
</path>
<!-- The following compile/run paths reference eclipselink.jar for non-test classes and resources -->
<path id="perf.compile.against.jar.path">
<pathelement path="${jmh-core.lib}"/>
<pathelement path="${jmh-generator-annprocess.lib}"/>
<pathelement path="${json.lib}"/>
<pathelement path="${jpa21.lib}"/>
<pathelement path="${eclipselink.lib}"/>
<pathelement path="${javax.validation.lib}"/>
</path>
<path id="perf.run.against.jar.path">
<pathelement path="${jmh-core.lib}"/>
<pathelement path="${jmh-generator-annprocess.lib}"/>
<pathelement path="${commons-math.lib}"/>
<pathelement path="${jpa21.lib}"/>
<pathelement path="${jdbc.driver.lib}"/>
<pathelement path="${javax.validation.lib}"/>
<pathelement path="${validation-impl.lib}"/>
<pathelement path="${jboss-logging.lib}"/>
<pathelement path="${javax.el-api.lib}"/>
<pathelement path="${classmate.lib}"/>
<pathelement path="${asm.lib}"/>
<pathelement path="${eclipselink.lib}"/>
<pathelement path="${json.lib}"/>
<pathelement path="${classes.dir}"/>
</path>
<!-- Test targets -->
<target name="test" depends="clean, clean-reports, filter-tokens, compile-and-run-tests"
description="run perf tests"/>
<target name="test-against-jar"
depends="clean, clean-reports, filter-tokens, compile-and-run-tests-against-jar"
description="run perf tests against eclipselink.jar"/>
<target name="test-jpa"
depends="clean, clean-reports, filter-tokens, compile-and-run-tests-against-jar"
description="run perf tests against eclipselink.jar"/>
<!-- Build targets -->
<target name="compile-tests" depends="clean" description="build perf test classes">
<compile_perf_tests subcomponent="perf" compilepathref="perf.compile.path"/>
</target>
<target name="compile-tests-against-jar" depends="clean" description="build perf test classes against eclipselink.jar">
<echo message="Compiling performance tests..."/>
<compile_perf_tests subcomponent="perf" compilepathref="perf.compile.against.jar.path"/>
<echo message=""/>
</target>
<!-- Build & Run targets -->
<target name="compile-and-run-tests" depends="compile-tests" description="build and run perf tests">
<run_perf_tests runpathref="perf.run.path"/>
</target>
<target name="compile-and-run-tests-against-jar" depends="compile-tests-against-jar" description="build and run perf tests against eclipselink.jar">
<available file="${eclipselink.lib}" property="eclipselink.lib.exists"/>
<fail unless="${eclipselink.lib.exists}" message="${eclipselink.lib} not found"/>
<run_jpa_perf_tests runpathref="perf.run.against.jar.path"/>
</target>
<!-- Clean targets -->
<target name="clean" description="clean the build">
<delete includeEmptyDirs="true" failonerror="false">
<fileset dir="${classes.dir}"/>
</delete>
<mkdir dir="${classes.dir}"/>
</target>
<target name="clean-reports" description="clean jmh report directory">
<delete dir="${report.dir}" includeEmptyDirs="true" failonerror="false"/>
<mkdir dir="${report.dir}"/>
</target>
<target name="filter-tokens" description="Filter tokens in configuration files.">
<filter token="driver" value="${db.driver}"/>
<filter token="url" value="${db.url}"/>
<filter token="user" value="${db.user}"/>
<filter token="pwd" value="${db.pwd}"/>
<copy todir="classes/META-INF" filtering="true" overwrite="true">
<fileset dir="resource/META-INF" includes="persistence.xml"/>
</copy>
</target>
<target name="restore-tokens" description="Restore token symbols from template.">
<copy file="${persistence.xml}.template" tofile="${persistence.xml}" overwrite="true"/>
</target>
<macrodef name="run_jpa_perf_tests">
<attribute name="runpathref" />
<sequential>
<run_perf_test runpathref="@{runpathref}" clsname="org.eclipse.persistence.testing.perf.JPABenchmarks"/>
</sequential>
</macrodef>
<macrodef name="run_perf_tests">
<attribute name="runpathref" />
<sequential>
<run_perf_test runpathref="@{runpathref}" clsname="org.eclipse.persistence.testing.perf.Benchmarks"/>
</sequential>
</macrodef>
<!-- Test run macros -->
<macrodef name="run_perf_test">
<attribute name="runpathref"/>
<attribute name="clsname"/>
<sequential>
<property name="eclipselink.agent.path" location="${eclipselink.lib}"/>
<java classname="@{clsname}" dir="${report.dir}" fork="true" failonerror="false">
<jvmarg line="-Declipselink.agent=${eclipselink.agent.path}"/>
<jvmarg line="${additional.jvmargs}"/>
<arg value="${warmup.iterations}"/>
<arg value="${run.iterations}"/>
<arg value="${jmh.resultFile}"/>
<arg value="${jmh.resultFormat}"/>
<classpath>
<path refid="@{runpathref}"/>
</classpath>
</java>
</sequential>
</macrodef>
<!-- Compile macros -->
<macrodef name="compile_perf_tests">
<attribute name="subcomponent"/>
<attribute name="compilepathref"/>
<sequential>
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}"
destdir="${classes.dir}"
debug="${javac.debug}"
debuglevel="${javac.debuglevel}"
encoding="UTF-8"
optimize="${javac.optimize}"
source="${javac.version}"
deprecation="${javac.deprecation}"
failonerror="false"
includes="org/eclipse/samples/**/*.java,org/eclipse/persistence/testing/@{subcomponent}/**/*.java">
<classpath>
<path refid="@{compilepathref}"/>
</classpath>
</javac>
<copy todir="${classes.dir}">
<fileset dir="${src.dir}">
<include name="**/*.properties" />
</fileset>
<fileset dir="${resource.dir}">
<exclude name="**/persistence.xml"/>
</fileset>
</copy>
</sequential>
</macrodef>
</project>