<project name="Targets to run Automated Tests Locally and Remotely" default="main" basedir=".">
<!--
This script must be called with the ${tester} property set.
The testing.properties file must contain definitions for all other properties in this script if they are not
set in a calling script or command line. See test.properties.template for property descriptions.
-->
<property name="customTest" value="${tester}/customTest.xml" />
<property name="testing.properties" value="${tester}/testing.properties" />
<property file="${testing.properties}" />
<property name="dropLocation" value="${buildDirectory}" />
<target name="main">
<antcall target="${testTarget}" />
</target>
<!--
Targets for setting up and running tests remotely
It is assumed that keys are set up on test machines to permit connections without user name and password prompts.
-->
<target name="runtests-remote" depends="setRemoteLoginClient,setRemoteCopyClient">
<property name="testResults" value="${dropLocation}/${buildLabel}/testresults" />
<exec dir="." executable="${loginClient}">
<arg line="${testMachine} mkdir ${testDir}" />
</exec>
<!--install the vm used for testing-->
<antcall target="installVmForRemote" />
<!--set up the automated testing framework-->
<exec dir="." executable="${copyClient}">
<arg line="${dropLocation}/${buildLabel}/${testFramework} ${testMachine}:${testDir}" />
</exec>
<exec dir="." executable="${loginClient}">
<arg line="${testMachine} unzip -o -qq ${testDir}/${testFramework} -d ${testDir}" />
</exec>
<exec dir="." executable="${copyClient}">
<arg line="${dropLocation}/${buildLabel}/${runtime} ${testMachine}:${executionDir}" />
</exec>
<!--callback to custom script for post setup-->
<ant antfile="${customTest}" target="customSetup" dir="${basedir}"/>
<exec dir="." executable="${loginClient}">
<arg line="${testMachine} ${testScript} ${args}" />
</exec>
<!--${testResults} and ${testResults}/consolelogs must exist before rcp and scp copy operations.
Directories contents are copied flattened if the destination directories don't exist.-->
<mkdir dir="${testResults}/consolelogs" />
<exec dir="." executable="${copyClient}">
<arg line="-r ${testMachine}:${executionDir}/results/* ${testResults}"/>
</exec>
<!-- copy the console log from testing -->
<exec dir="." executable="${copyClient}">
<arg line="-r ${testMachine}:${executionDir}/${consolelog} ${testResults}/consolelogs"/>
</exec>
</target>
<target name="setRemoteLoginClient">
<!--use rsh if rsh is set, otherwise use default, ssh-->
<condition property="loginClient" value="rsh">
<isset property="rsh" />
</condition>
<!--default remote login client-->
<property name="loginClient" value="ssh" />
</target>
<target name="setRemoteCopyClient">
<!--use rcp if rsh is set, otherwise use default, scp-->
<condition property="copyClient" value="rcp">
<isset property="rsh" />
</condition>
<!--default remote copy client-->
<property name="copyClient" value="scp" />
</target>
<target name="installVmForRemote" unless="skipVmInstall">
<available file="${vmDest}" property="vmExists" />
<antcall target="getVM" />
<exec dir="." executable="${copyClient}">
<arg line="${vmDest} ${testMachine}:${testDir}" />
</exec>
<exec dir="." executable="${loginClient}">
<arg line="${testMachine} ${vmInstallCommand}" />
</exec>
</target>
<!--
Targets for setting up and running tests locally
-->
<target name="runtests-local">
<delete dir="${testDir}" quiet="true"/>
<mkdir dir="${testDir}" />
<property name="testResults" value="${dropLocation}/${buildLabel}/testresults" />
<!--set up testing directory-->
<unzip src="${dropLocation}/${buildLabel}/${testFramework}" dest="${testDir}" />
<!--install the vm used for testing-->
<antcall target="installVmForLocal" />
<!--copy in the runtime to test-->
<copy todir="${executionDir}" file="${dropLocation}/${buildLabel}/${runtime}" />
<!--callback to custom script for additional setup-->
<ant antfile="${customTest}" target="customSetup" dir="${basedir}" />
<!--run the tests-->
<exec dir="${executionDir}" executable="${testExecutable}">
<arg line="${args}" />
</exec>
<mkdir dir="${testResults}" />
<mkdir dir="${testResults}/consolelogs" />
<copy todir="${testResults}">
<fileset dir="${executionDir}/results" />
</copy>
<copy todir="${testResults}/consolelogs" file="${executionDir}/${consolelog}" />
</target>
<target name="installVmForLocal" unless="skipVmInstall">
<available file="${vmDest}" property="vmExists" />
<antcall target="getVM" />
<exec dir="${testDir}" executable="${vmInstallExecutable}">
<arg line="${vmInstallCommand}" />
</exec>
</target>
<target name="getVM" unless="vmExists">
<get src="${vmUrl}" dest="${vmDest}" usetimestamp="true"/>
</target>
</project>