<?xml version="1.0"?> <project xmlns:antcontrib="antlib:net.sf.antcontrib" xmlns:ivy="antlib:org.apache.ivy.ant" name="Vaadin Integration Tests" basedir="." default="integration-test-all"> <!-- Import common targets --> <import file="../common.xml" /> <dirname file="${ant.file.Vaadin Integration Tests}" property="integration_test.dir" /> <!-- Target deploying demo.war --> <fail unless="test.integration.server" message="test.integration.server must be set for integration tests to run" /> <fail unless="test.integration.user" message="test.integration.user must be set for integration tests to run" /> <fail unless="test.integration.antfile" message="test.integration.antfile must be set for integration tests to run" /> <!-- Test with these browsers --> <property name="test_browsers" value="winxp-firefox17-esr" /> <!-- Path to key file. Default value --> <property name="sshkey.file" value="id_dsa" /> <!-- path and name for demo.war to be deployed --> <property name="demo.war" value="demo.war" /> <!-- Host running Testbench RC or Testbench Hub. Default value --> <property name="com.vaadin.testbench.tester.host" value="127.0.0.1" /> <!-- Base url where the testable application is deployed --> <property name="deployment.url" value="http://${test.integration.server}:8080" /> <!-- TestBench license parameter --> <property name="vaadin.testbench.developer.license" value="" /> <property name="report.dir" location="${integration_test.dir}/result/reports-integration" /> <!-- ssh host values --> <property name="ant.hub" value="${test.integration.antfile}" /> <property name="user" value="${test.integration.user}" /> <property name="passphrase" value="" /> <ivy:resolve file="ivy.xml" conf="build, build-provided" /> <ivy:cachepath pathid="classpath.tb3.lib" conf="build, build-provided" /> <path id="classpath.tb3"> <path refid="classpath.tb3.lib" /> <path location="result/classes" /> </path> <!-- Upload war to deploy to ssh host --> <target name="integration-test-upload-demo"> <scp file="${demo.war}" todir="${user}@${test.integration.server}:integration-tests/servers/demo.war" keyfile="${sshkey.file}" passphrase="${passphrase}" /> </target> <!-- Run basic integration test test --> <target name="legacy-integration-test"> <fail unless="testfiles" message="You need to specify the files to run using the 'testfiles' property" /> <subant target="run-tb2-tests" failonerror="false" antfile="test.xml"> <property name="com.vaadin.testbench.lib.dir" value="${com.vaadin.testbench.lib.dir}" /> <property name="com.vaadin.testbench.tester.host" value="${com.vaadin.testbench.tester.host}" /> <property name="com.vaadin.testbench.deployment.url" value="${deployment.url}" /> <property name="server.start.succeeded" value="1" /> <property name="browsers" value="${test_browsers}" /> <property name="testfiles" value="${testfiles}" /> <property name="test-output-dir" value="${integration_test.dir}/result/integration-test-output/${server-name}" /> <property name="retries" value="0" /> <property name="report.qualifier" value="integration-tb2/${server-name}" /> <fileset dir="." includes="test.xml" /> </subant> </target> <target name="integration-test-theme"> <subant target="run-tb2-tests" failonerror="false" antfile="test.xml"> <property name="com.vaadin.testbench.lib.dir" value="${com.vaadin.testbench.lib.dir}" /> <property name="com.vaadin.testbench.tester.host" value="${com.vaadin.testbench.tester.host}" /> <property name="com.vaadin.testbench.deployment.url" value="${deployment.url}" /> <property name="server.start.succeeded" value="1" /> <property name="testfiles" value="${testfiles-theme}" /> <property name="test-output-dir" value="${integration_test.dir}/result/integration-test-output/${server-name}" /> <property name="report.qualifier" value="integration-theme-tb2/${server-name}" /> <fileset dir="." includes="test.xml" /> </subant> </target> <!-- Run integration test on GAE --> <target name="integration-test-test-GAE"> <fileset dir="integration-testscripts" id="html-test-files" includes="GoogleAppEngine/integration-test-GAE.html" /> <pathconvert pathsep=" " property="test-GAE" refid="html-test-files" /> <subant target="run-tb2-tests" failonerror="false" antfile="test.xml"> <property name="com.vaadin.testbench.lib.dir" value="${com.vaadin.testbench.lib.dir}" /> <property name="com.vaadin.testbench.tester.host" value="${com.vaadin.testbench.tester.host}" /> <property name="com.vaadin.testbench.deployment.url" value="http://vaadin-integration-test.appspot.com/" /> <property name="server.start.succeeded" value="1" /> <property name="browsers" value="${test_browsers}" /> <property name="testfiles" value="${test-GAE}" /> <property name="test-output-dir" value="../build/integration-test-gae-output" /> <property name="report.qualifier" value="integration-gae-tb2/${server-name}" /> <fileset dir="." includes="test.xml" /> </subant> </target> <target name="integration-test-deploy-to-GAE"> <sshexec host="${test.integration.server}" username="${user}" keyfile="${sshkey.file}" command="ant -f ${ant.hub} deploy-to-GAE" /> </target> <target name="run-tb3-servlet-test"> <antcall target="run-tb3-test" inheritall="true"> <param name="junit.test.suite" value="com.vaadin.tests.tb3.ServletIntegrationTests" /> </antcall> </target> <target name="run-tb3-test"> <fail unless="server-name" message="Server name must be defined in server-name" /> <fail unless="deployment.url" message="Deplyoment url must be defined in deployment.url" /> <fail unless="com.vaadin.testbench.screenshot.directory" message="Screenshot directory must be defined in com.vaadin.testbench.screenshot.directory" /> <property name="server.report.dir" location="${report.dir}/integration-test-tb3/${server-name}" /> <!-- The junit task does not create the report dir... --> <mkdir dir="${server.report.dir}" /> <junit showoutput="no" printsummary="no" fork="yes"> <formatter type="xml" /> <classpath refid="classpath.tb3" /> <jvmarg value="-Dcom.vaadin.testbench.screenshot.directory=${com.vaadin.testbench.screenshot.directory}" /> <jvmarg value="-Ddeployment.url=${deployment.url}" /> <jvmarg value="-Dserver-name=${server-name}" /> <jvmarg value="-Djava.awt.headless=true" /> <jvmarg value="-Ddemo.war=${demo.war}" /> <jvmarg value="-Dvaadin.testbench.developer.license=${vaadin.testbench.developer.license}" /> <test name="${junit.test.suite}" todir="${server.report.dir}" /> </junit> </target> <target name="integration-test-tomcat7"> <antcall target="run-generic-integration-test"> <param name="startDelay" value="10" /> <param name="target-server" value="tomcat7" /> </antcall> </target> <target name="integration-test-tomcat7apacheproxy"> <antcall target="run-generic-integration-test"> <param name="startDelay" value="10" /> <param name="target-server" value="tomcat7apacheproxy" /> </antcall> </target> <target name="integration-test-tomcat8"> <antcall target="run-generic-integration-test"> <param name="startDelay" value="10" /> <param name="target-server" value="tomcat8" /> </antcall> </target> <target name="integration-test-osgi"> <antcall target="run-generic-integration-test"> <param name="startDelay" value="10" /> <param name="target-server" value="osgi" /> </antcall> </target> <target name="integration-test-tomcat6"> <antcall target="run-generic-integration-test"> <param name="startDelay" value="10" /> <param name="target-server" value="tomcat6" /> </antcall> </target> <target name="integration-test-jetty7"> <antcall target="run-generic-integration-test"> <param name="target-server" value="jetty7" /> </antcall> </target> <target name="integration-test-jetty8"> <antcall target="run-generic-integration-test"> <param name="startDelay" value="300" /> <param name="target-server" value="jetty8" /> </antcall> </target> <target name="integration-test-jetty9"> <antcall target="run-generic-integration-test"> <param name="startDelay" value="300" /> <param name="target-server" value="jetty9" /> </antcall> </target> <target name="integration-test-jboss4"> <antcall target="run-generic-integration-test"> <param name="startDelay" value="10" /> <param name="target-server" value="jboss4" /> </antcall> </target> <target name="integration-test-jboss5"> <antcall target="run-generic-integration-test"> <param name="startDelay" value="10" /> <param name="target-server" value="jboss5" /> </antcall> </target> <target name="integration-test-jboss6"> <antcall target="run-generic-integration-test"> <param name="startDelay" value="10" /> <param name="target-server" value="jboss6" /> </antcall> </target> <target name="integration-test-jboss7"> <antcall target="run-generic-integration-test"> <param name="startDelay" value="10" /> <param name="target-server" value="jboss7" /> </antcall> </target> <target name="integration-test-jboss-eap6"> <antcall target="run-generic-integration-test"> <param name="startDelay" value="10" /> <param name="target-server" value="jbosseap6" /> </antcall> </target> <target name="integration-test-wildfly8"> <antcall target="run-generic-integration-test"> <param name="startDelay" value="10" /> <param name="target-server" value="wildfly8" /> </antcall> </target> <target name="integration-test-glassfish3"> <antcall target="run-generic-integration-test"> <param name="startDelay" value="10" /> <param name="target-server" value="glassfish3" /> </antcall> </target> <target name="integration-test-glassfish4"> <antcall target="run-generic-integration-test"> <param name="startDelay" value="10" /> <param name="target-server" value="glassfish4" /> </antcall> </target> <target name="integration-test-liferay6"> <fileset dir="integration-testscripts" id="html-test-files" includes="Liferay-6/integration-test-liferay-6.0.5.html" /> <pathconvert pathsep=" " property="testfiles" refid="html-test-files" /> <antcall target="run-generic-integration-test"> <param name="startDelay" value="600" /> <param name="test_browsers" value="winxp-firefox17-esr" /> <param name="target-server" value="liferay6" /> </antcall> </target> <target name="integration-test-liferay6-theme"> <fileset dir="integration-testscripts" id="html-test-files" includes="Liferay-6/Liferay6-and-6EE-theme-deploy.html" /> <pathconvert pathsep=" " property="testfiles" refid="html-test-files" /> <fileset dir="integration-testscripts" id="html-theme-files" includes="Liferay-6/Liferay6-theme.html" /> <pathconvert pathsep=" " property="testfiles-theme" refid="html-theme-files" /> <antcall target="run-generic-integration-test"> <param name="startDelay" value="600" /> <param name="test_browsers" value="winxp-firefox17-esr" /> <param name="target-server" value="liferay6" /> </antcall> </target> <target name="integration-test-liferay5"> <fileset dir="integration-testscripts" id="html-test-files" includes="Liferay-5/integration-test-liferay-5.2.3-portlet2.html" /> <pathconvert pathsep=" " property="testfiles" refid="html-test-files" /> <antcall target="run-generic-integration-test"> <param name="startDelay" value="600" /> <param name="test_browsers" value="winxp-firefox17-esr" /> <param name="target-server" value="liferay5" /> </antcall> </target> <target name="integration-test-liferay6ee"> <fileset dir="integration-testscripts" id="html-test-files" includes="Liferay-6EE/integration-test-liferay-6ee.html" /> <pathconvert pathsep=" " property="testfiles" refid="html-test-files" /> <antcall target="run-generic-integration-test"> <param name="startDelay" value="600" /> <param name="test_browsers" value="winxp-firefox17-esr" /> <param name="target-server" value="liferay6ee" /> </antcall> </target> <target name="integration-test-liferay6ee-theme"> <fileset dir="integration-testscripts" id="html-test-files" includes="Liferay-6/Liferay6-and-6EE-theme-deploy.html" /> <pathconvert pathsep=" " property="testfiles" refid="html-test-files" /> <fileset dir="integration-testscripts" id="html-theme-files" includes="Liferay-6EE/Liferay6EE-theme.html" /> <pathconvert pathsep=" " property="testfiles-theme" refid="html-theme-files" /> <antcall target="run-generic-integration-test"> <param name="startDelay" value="600" /> <param name="test_browsers" value="winxp-firefox17-esr" /> <param name="target-server" value="liferay6ee" /> </antcall> </target> <target name="integration-test-gatein3"> <fileset dir="integration-testscripts" id="html-test-files" includes="GateIn-3/integration-test-GateIn-3.1.0-portlet2.html" /> <pathconvert pathsep=" " property="testfiles" refid="html-test-files" /> <antcall target="run-generic-integration-test"> <param name="startDelay" value="600" /> <param name="test_browsers" value="winxp-googlechrome21" /> <param name="target-server" value="gatein3" /> </antcall> </target> <target name="integration-test-websphere8"> <antcall target="run-generic-integration-test"> <param name="startDelay" value="600" /> <param name="target-port" value="9080" /> <param name="target-server" value="websphere8" /> </antcall> </target> <target name="integration-test-websphereportal8"> <concat>##teamcity[testStarted name='websphereportal8' flowId='websphereportal8']</concat> <antcall target="run-tb3-test" inheritall="true"> <param name="junit.test.suite" value="com.vaadin.tests.integration.WebSpherePortalIntegrationTest" /> <param name="server-name" value="websphereportal8" /> <!-- Fill out dummy values for params required by run-tb3-test target --> <param name="test.integration.server" value="" /> <param name="test.integration.user" value="" /> <param name="test.integration.antfile" value="" /> </antcall> <concat>##teamcity[testFinished name='websphereportal8' flowId='websphereportal8']"</concat> </target> <target name="integration-test-weblogic10"> <antcall target="run-generic-integration-test"> <param name="startDelay" value="600" /> <param name="target-port" value="7001" /> <param name="target-server" value="weblogic10" /> </antcall> </target> <target name="integration-test-weblogic12"> <antcall target="run-generic-integration-test"> <param name="startDelay" value="600" /> <param name="target-port" value="7001" /> <param name="target-server" value="weblogic12" /> </antcall> </target> <target name="integration-test-weblogicPortal"> <fileset dir="integration-testscripts" id="html-test-files" includes="weblogic-portal/integration-test-WebLogic-Portal-10.3.2-portlet2.html" /> <pathconvert pathsep=" " property="testfiles" refid="html-test-files" /> <antcall target="run-generic-integration-test"> <param name="startDelay" value="600" /> <param name="target-port" value="7001" /> <param name="target-server" value="weblogicportal" /> </antcall> </target> <target name="integration-test-GAE"> <antcall target="integration-test-deploy-to-GAE" /> <antcall target="integration-test-test-GAE" /> </target> <!-- Upload demo, clean error screenshots and test deployment on all servers --> <target name="integration-test-all" unless="tests.integration.skip"> <property name="passphrase" value="${passphrase}" /> <fail unless="sshkey.file" message="You must define an ssh.keyfile parameter" /> <fail unless="com.vaadin.testbench.screenshot.directory" message="You must define a com.vaadin.testbench.screenshot.directory parameter" /> <delete dir="${report.dir}" /> <mkdir dir="${report.dir}" /> <parallel> <antcontrib:trycatch property="tried"> <try> <!-- Still running GAE test from the old server which requires its own lock --> <echo message="Getting lock" /> <antcall target="integration-test-get-lock" /> <echo message="Got lock" /> <antcall target="integration-test-upload-demo" /> <antcall target="run-integration-test"> <param name="target-server" value="GAE" /> </antcall> <antcall target="integration-test-clean" /> <echo message="Getting lock" /> <antcall target="integration-test-release-lock" /> <echo message="Lock released" /> </try> <catch> <echo message="Uploading of demo.war failed. ${tried}" /> </catch> </antcontrib:trycatch> <antcall target="integration-test-liferay6" /> <antcall target="integration-test-liferay6ee" /> <antcall target="integration-test-liferay6-theme" /> <antcall target="integration-test-liferay6ee-theme" /> <antcall target="integration-test-weblogicPortal" /> <antcall target="integration-test-liferay5" /> <antcall target="integration-test-weblogic10" /> <antcall target="integration-test-weblogic12" /> <antcall target="integration-test-gatein3" /> <antcall target="integration-test-glassfish3" /> <antcall target="integration-test-glassfish4" /> <antcall target="integration-test-jboss4" /> <antcall target="integration-test-jboss5" /> <antcall target="integration-test-jboss6" /> <antcall target="integration-test-jboss7" /> <antcall target="integration-test-jboss-eap6" /> <antcall target="integration-test-wildfly8" /> <antcall target="integration-test-jetty7" /> <antcall target="integration-test-jetty8" /> <antcall target="integration-test-jetty9" /> <antcall target="integration-test-tomcat6" /> <antcall target="integration-test-tomcat7" /> <antcall target="integration-test-tomcat8" /> <antcall target="integration-test-osgi" /> <antcall target="integration-test-tomcat7apacheproxy" /> <antcall target="integration-test-websphere8" /> <antcall target="integration-test-websphereportal8" /> </parallel> </target> <target name="do-run-generic-test"> <property name="target-host" value="${target-server}.devnet.vaadin.com" /> <property name="target-port" value="8080" /> <antcontrib:if> <isset property="startDelay" /> <then> <antcontrib:math result="sleepTime" datatype="int"> <op op="rint"> <op op="*"> <num value="${startDelay}" /> <op op="random" /> </op> </op> </antcontrib:math> <echo>Delaying startup of ${target-server} with ${sleepTime} seconds</echo> <sleep seconds="${sleepTime}" /> </then> </antcontrib:if> <scp todir="${user}@${target-host}:." keyfile="${sshkey.file}" trust="yes" passphrase="${passphrase}"> <fileset dir="integration_base_files"> <include name="*" /> </fileset> </scp> <!-- trycatch probably not needed any more as it just fails with the original message and doesn't do anything in the finally block --> <antcontrib:trycatch property="error_message"> <try> <!-- timeout in one hour (remote end should timeout in 55 minutes) --> <sshexec host="${target-host}" outputproperty="lock-output" timeout="3600000" username="${user}" keyfile="${sshkey.file}" trust="yes" command="chmod +x *.sh; ant -f deploy.xml get-lock" /> <antcall target="echo-prefix"> <param name="prefix" value="${target-server}: " /> <param name="message" value="${lock-output}" /> </antcall> <scp file="${demo.war}" todir="${user}@${target-host}:demo.war" keyfile="${sshkey.file}" trust="yes" passphrase="${passphrase}" /> <!-- timeout in 15 minutes --> <sshexec host="${target-host}" outputproperty="start-output" timeout="900000" username="${user}" keyfile="${sshkey.file}" trust="yes" command="ant -f deploy.xml startup-and-deploy" failonerror="false" /> <antcall target="echo-prefix"> <param name="prefix" value="${target-server}: " /> <param name="message" value="${start-output}" /> </antcall> <fail message="${start-output}"> <condition> <not> <contains string="${start-output}" substring="Demo deployed successfully" /> </not> </condition> </fail> <antcontrib:if> <isset property="testfiles" /> <antcontrib:then> <echo>Starting legacy (TB2) test for ${target-server}</echo> <antcall target="legacy-integration-test"> <param name="server-name" value="${target-server}" /> <param name="deployment.url" value="http://${target-host}:${target-port}" /> </antcall> </antcontrib:then> <antcontrib:else> <echo>Starting TB3 test for ${target-server}</echo> <antcall target="run-tb3-servlet-test"> <param name="server-name" value="${target-server}" /> <param name="deployment.url" value="http://${target-host}:${target-port}" /> </antcall> </antcontrib:else> </antcontrib:if> <!-- Run theme tests in all browsers if there's a property with the test files --> <antcontrib:if> <isset property="testfiles-theme" /> <antcontrib:then> <antcall target="integration-test-theme"> <param name="server-name" value="${target-server}" /> <param name="deployment.url" value="http://${target-host}:${target-port}" /> </antcall> </antcontrib:then> </antcontrib:if> <!-- timeout in five minutes --> <sshexec host="${target-host}" outputproperty="stop-output" timeout="600000" username="${user}" keyfile="${sshkey.file}" trust="yes" command="ant -f deploy.xml shutdown-and-cleanup" failonerror="false" /> <antcall target="echo-prefix"> <param name="prefix" value="${target-server}: " /> <param name="message" value="${stop-output}" /> </antcall> </try> <catch> <fail message="${error_message}" /> </catch> </antcontrib:trycatch> </target> <target name="echo-prefix"> <antcontrib:propertyregex property="message-prefixed" input="${prefix}${message}" regexp="\n" replace="\0${prefix}" global="true" defaultValue="${prefix}${message}" /> <echo message="${message-prefixed}" /> </target> <target name="run-generic-integration-test"> <concat>##teamcity[testStarted name='${target-server}' flowId='${target-server}']</concat> <antcontrib:trycatch property="tried"> <try> <antcall target="do-run-generic-test" /> </try> <catch> <antcontrib:antcallback target="teamcity-escape" return="tried-escaped"> <param name="returnTo" value="tried-escaped" /> <param name="message" value="${tried}" /> </antcontrib:antcallback> <concat>##teamcity[testFailed name='${target-server}' flowId='${target-server}' message='Integration test for ${target-server} failed.' details='${tried-escaped}']</concat> </catch> </antcontrib:trycatch> <concat>##teamcity[testFinished name='${target-server}' flowId='${target-server}']"</concat> </target> <target name="teamcity-escape"> <property name="returnTo" value="return" /> <!-- Should also perform other escaping (\u0085, \u2028 and \u2029) - see http://confluence.jetbrains.net/display/TCD65/Build+Script+Interaction+with+TeamCity --> <!-- Immutable properties -> needs to create a new one every time --> <antcontrib:propertyregex property="details-escaped1" input="${message}" regexp="['|\[\]]" replace="|\0" global="true" defaultValue="${message}" /> <antcontrib:propertyregex property="details-escaped2" input="${details-escaped1}" regexp="\n" replace="|n" global="true" defaultValue="${details-escaped1}" /> <antcontrib:propertyregex property="details-escaped3" input="${details-escaped2}" regexp="\r" replace="|r" global="true" defaultValue="${details-escaped2}" /> <property name="${returnTo}" value="${details-escaped3}" /> </target> <target name="run-integration-test"> <concat>##teamcity[testStarted name='${target-server}' flowId='${target-server}']</concat> <antcontrib:trycatch property="tried"> <try> <antcall target="integration-test-${target-server}" /> </try> <catch> <antcallback target="teamcity-escape" return="tried-escaped"> <param name="returnTo" value="tried-escaped" /> <param name="message" value="${tried}" /> </antcallback> <concat>##teamcity[testFailed name='${target-server}' flowId='${target-server}' message='Integration test for ${target-server} failed.' details='${tried-escaped}']"</concat> </catch> </antcontrib:trycatch> <concat>##teamcity[testFinished name='${target-server}' flowId='${target-server}']"</concat> </target> <target name="integration-test-get-lock"> <sshexec host="${test.integration.server}" username="${user}" keyfile="${sshkey.file}" command="ant -f ${ant.hub} get-lock" /> </target> <target name="integration-test-release-lock"> <sshexec host="${test.integration.server}" username="${user}" keyfile="${sshkey.file}" command="ant -f ${ant.hub} release-lock" /> </target> <!-- Remove demo.war --> <target name="integration-test-clean"> <sshexec host="${test.integration.server}" username="${user}" keyfile="${sshkey.file}" command="ant -f ${ant.hub} clean" /> </target> </project>