<!-- Copyright (c) 2011, 2014 IBM Corporation and others. All rights reserved.
  This program and the accompanying materials are made available under the
  terms of the Eclipse Public License v1.0 which accompanies this distribution,
  and is available at http://www.eclipse.org/legal/epl-v10.html.

  Contributors:
  IBM Corporation - initial API and implementation
-->

<!--
  this script is invoked by the build, on the build machine,
  to signify to hudson "the build is done", pass a few parameters,
  then let Hudson take over.

    wget - -no-verbose -O invokeTestsJSON.xml http://git.eclipse.org/c/platform/eclipse.platform.releng.eclipsebuilder.git/plain/invokeTestsJSON.xml?h=master 2>&1;

-->

<project
  name="Hudson-Tests"
  default="runTests"
  basedir=".">

  <target
    name="runTests"
    depends="init">
    <echo message="== Properties in invokeTestsJSON.xml" />
    <echo message="buildId: ${buildId} " />
    <echo message="eclipseStream: ${eclipseStream}" />
    <echo message="eclipseStreamMajor: ${eclipseStreamMajor}" />
    <echo message="eclipseStreamMinor: ${eclipseStreamMinor}" />
    <echo message="buildType: ${buildType}" />
    <echo message="EBUILDER_HASH: ${EBUILDER_HASH}" />
    <antcall target="JUnitTests" />
    <antcall target="GTK3JUnitTests" />
    <antcall target="PerfTests" />
  </target>


  <target
    name="JUnitTests"
    depends="init">

    <!--
      currently we test on three platforms.
      So, three parallel calls since on different machines (and Hudson queues).
      TODO: Can these be called, in parallel via callant (or, perhaps subant?
      for greater flexibility in what to test?)
    -->

    <antcall target="triggerHudsonTests">
      <param
        name="job"
        value="ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-win32" />
    </antcall>

    <antcall target="triggerHudsonTests">
      <param
        name="job"
        value="ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-mac64" />
    </antcall>

  </target>
  
    <target
    name="GTK3JUnitTests"
    depends="init">

    <!--
      currently we test on four platforms.
      These GTK3 tests are "just like the others", except the URL to "send it to" differs.
    -->

    
    <antcall target="triggerHudsonLinuxTests">
      <param
        name="job"
        value="ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-cen64-gtk2" />
    </antcall>

    <antcall target="triggerHudsonLinuxTests">
      <param
        name="job"
        value="ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-cen64-gtk3" />
    </antcall>

    <antcall target="triggerHudsonLinuxTests">
      <param
        name="job"
        value="ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-cen64-gtk3-java9" />
    </antcall>

  </target>
  
  <target
    name="PerfTests"
    depends="init">

    <!--
      currently we test on three platforms.
      So, three parallel calls since on different machines (and Hudson queues).
      TODO: Can these be called, in parrallel via callant (or, perhaps subant?)
      for greater flexibility in what to test?
    -->

      <antcall target="triggerHudsonPerfTests">
        <param
          name="job"
          value="ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-perf-lin64-baseline" />
      </antcall>
      <!--
        <antcall target="triggerHudsonTests">
        <param
        name="job"
        value="ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-win32" />
        </antcall>

        <antcall target="triggerHudsonTests">
        <param
        name="job"
        value="ep${eclipseStreamMajor}${eclipseStreamMinor}${buildType}-unit-mac64" />
        </antcall>
      -->

  </target>


  <target
    name="triggerHudsonTests"
    depends="init">



    <!--
      baseURL used to be "required parameter" for Hudson job, but seemed overly complicated so
      I compute all this later (based on stream and id) but, I've learned, one disadvantage is this
      restricts test code locations to "downloads". There might be times we want to do from "build"
      locations, or similar. Not to mention, other, internal test systems someday.

      <property
      name="baseURL"
      value="http://download.eclipse.org/eclipse/downloads/${dropsDirSegment}/${buildId}" />
    -->

    <!-- Hudson jobs currently have four required parameters -->
    <property
      name="JSON_buildId"
      value="{&quot;name&quot;:&quot;buildId&quot;,&quot;value&quot;:&quot;${buildId}&quot;}" />
    <property
      name="JSON_eclipseStream"
      value="{&quot;name&quot;:&quot;eclipseStream&quot;,&quot;value&quot;:&quot;${eclipseStream}&quot;}" />
    <property
      name="JSON_EBUILDER_HASH"
      value="{&quot;name&quot;:&quot;EBUILDER_HASH&quot;,&quot;value&quot;:&quot;${EBUILDER_HASH}&quot;}" />

    <property
      name="json"
      value="{&quot;parameter&quot;:[${JSON_buildId},${JSON_eclipseStream},${JSON_EBUILDER_HASH}]}" />

    <echo message="env.HUDSON_PROTOCOL: ${env.HUDSON_PROTOCOL}" />
    <echo message="env.HUDSON_HOST: ${env.HUDSON_HOST}" />
    <echo message="env.HUDSON_PORT: ${env.HUDSON_PORT}" />
    <echo message="env.HUDSON_ROOT_URI: ${env.HUDSON_ROOT_URI}" />
    <echo message="json for unit curl post: ${json}" />
    <echo message="job: ${job}" />
    <echo message="${env.HUDSON_PROTOCOL}://${env.HUDSON_HOST}:${env.HUDSON_PORT}/${env.HUDSON_ROOT_URI}/job/${job}/build" />

    <exec
      executable="curl"
      resultproperty="rcUnit"
      outputproperty="unitOutput"
      errorproperty="unitErrorOutput">
      <arg line="-X POST" />
      <arg value="${env.HUDSON_PROTOCOL}://${env.HUDSON_HOST}:${env.HUDSON_PORT}/${env.HUDSON_ROOT_URI}/job/${job}/build" />
      <arg line="-d token=${env.HUDSON_TOKEN}" />
      <arg value="--fail" />
      <arg value="--data-urlencode" />
      <arg value="json=${json}" />
    </exec>
    <echo message="DEBUG: rcUnit: ${rcUnit}" />
    <condition property="invocationNotOk">
      <not>
        <equals
          arg1="${rcUnit}"
          arg2="0" />
      </not>
    </condition>
    <!--
       TODO: We could produced a "TEST_ARE_RUNNING_ON" file here too, when rc = 0 .. that is unless="invocationNoOk" 
       and included the URL of build or performance machine tests. 
    -->
    <antcall target="checkInvocation">
      <param
        name="returnCode"
        value="${rcUnit}" />
      <param
        name="job"
        value="${job}" />
      <param
        name="output"
        value="${unitOutput}" />
      <param
        name="errorOutput"
        value="${unitErrorOutput}" />
    </antcall>
  </target>
  <target
    name="triggerHudsonLinuxTests"
    depends="init">
    <!--
      baseURL used to be "required parameter" for Hudson job, but seemed overly complicated so
      I compute all this later (based on stream and id) but, I've learned, one disadvantage is this
      restricts test code locations to "downloads". There might be times we want to do from "build"
      locations, or similar. Not to mention, other, internal test systems someday.

      <property
      name="baseURL"
      value="http://download.eclipse.org/eclipse/downloads/${dropsDirSegment}/${buildId}" />
    -->

    <!-- Hudson jobs currently have four required parameters -->
    <property
      name="JSON_buildId"
      value="{&quot;name&quot;:&quot;buildId&quot;,&quot;value&quot;:&quot;${buildId}&quot;}" />
    <property
      name="JSON_eclipseStream"
      value="{&quot;name&quot;:&quot;eclipseStream&quot;,&quot;value&quot;:&quot;${eclipseStream}&quot;}" />
    <property
      name="JSON_EBUILDER_HASH"
      value="{&quot;name&quot;:&quot;EBUILDER_HASH&quot;,&quot;value&quot;:&quot;${EBUILDER_HASH}&quot;}" />

    <property
      name="json"
      value="{&quot;parameter&quot;:[${JSON_buildId},${JSON_eclipseStream},${JSON_EBUILDER_HASH}]}" />

    <echo message="env.HUDSON_PROTOCOL: ${env.HUDSON_PROTOCOL}" />
    <echo message="env.HUDSON_HOST: ${env.HUDSON_HOST}" />
    <echo message="env.HUDSON_PORT: ${env.HUDSON_PORT}" />
    <echo message="env.HUDSON_GTK3_ROOT_URI: ${env.HUDSON_GTK3_ROOT_URI}" />
    <echo message="json for unit curl post: ${json}" />
    <echo message="job: ${job}" />
    <echo message="${env.HUDSON_PROTOCOL}://${env.HUDSON_HOST}:${env.HUDSON_PORT}/${env.HUDSON_GTK3_ROOT_URI}/job/${job}/build" />

    <exec
      executable="curl"
      resultproperty="rcUnit"
      outputproperty="unitOutput"
      errorproperty="unitErrorOutput">
      <arg line="-X POST" />
      <arg value="${env.HUDSON_PROTOCOL}://${env.HUDSON_HOST}:${env.HUDSON_PORT}/${env.HUDSON_GTK3_ROOT_URI}/job/${job}/build" />
      <arg line="-d token=${env.HUDSON_TOKEN}" />
      <arg value="--fail" />
      <arg value="--data-urlencode" />
      <arg value="json=${json}" />
    </exec>
    <echo message="DEBUG: rcUnit: ${rcUnit}" />
    <condition property="invocationNotOk">
      <not>
        <equals
          arg1="${rcUnit}"
          arg2="0" />
      </not>
    </condition>
    <!--
       TODO: We could produced a "TEST_ARE_RUNNING_ON" file here too, when rc = 0 .. that is unless="invocationNoOk" 
       and included the URL of build or performance machine tests. 
    -->
    <antcall target="checkInvocation">
      <param
        name="returnCode"
        value="${rcUnit}" />
      <param
        name="job"
        value="${job}" />
      <param
        name="output"
        value="${unitOutput}" />
      <param
        name="errorOutput"
        value="${unitErrorOutput}" />
    </antcall>
  </target>

  <target
    name="checkInvocation"
    if="invocationNotOk">
    <echo
      message="&lt;p&gt;Invocation of Curl did not return 0 return code for ${job}.&lt;br /&gt;${line.separator}"
      file="${postingDirectory}/TEST_INVOCATION_FAILED.html"
      append="true" />
    <echo
      message="   return code was ${returnCode}&lt;br /&gt;${line.separator}"
      file="${postingDirectory}/TEST_INVOCATION_FAILED.html"
      append="true" />
    <echo
      message="   Likely due to Hudson job not being defined (or, possibly network issues).&lt;br /&gt;${line.separator}"
      file="${postingDirectory}/TEST_INVOCATION_FAILED.html"
      append="true" />
    
     <echo
      message="ERROR: Invocation of Curl did not return 0 return code for ${job}." />
    <echo
      message="= = = standard out = = ${line.separator}${output}" />
    <echo
      message="= = = standard err = = ${line.separator}${errorOutput}${line.separator}${line.separator}" />
    <!-- We don't want to fail automatically here, since just one machine may be "offline". -->
    <echo message="Curl invocation failed. See ${postingDirectory}/TEST_INVOCATION_FAILED.html" />
  </target>

  <target
    name="triggerHudsonPerfTests"
    depends="init">

    <!--
      baseURL used to be "required parameter" for Hudson job, but seemed overly complicated so
      I compute all this later (based on stream and id) but, I've learned, one disadvantage is this
      restricts test code locations to "downloads". There might be times we want to do from "build"
      locations, or similar. Not to mention, other, internal test systems someday.

      <property
      name="baseURL"
      value="http://download.eclipse.org/eclipse/downloads/${dropsDirSegment}/${buildId}" />
    -->

    <!-- Hudson jobs currently have 3 required parameters -->
    <property
      name="JSON_buildId"
      value="{&quot;name&quot;:&quot;buildId&quot;,&quot;value&quot;:&quot;${buildId}&quot;}" />
    <property
      name="JSON_eclipseStream"
      value="{&quot;name&quot;:&quot;eclipseStream&quot;,&quot;value&quot;:&quot;${eclipseStream}&quot;}" />
    <property
      name="JSON_EBUILDER_HASH"
      value="{&quot;name&quot;:&quot;EBUILDER_HASH&quot;,&quot;value&quot;:&quot;${EBUILDER_HASH}&quot;}" />

    <property
      name="JSON_defaultTestSuite"
      value="{&quot;name&quot;:&quot;testToRun&quot;,&quot;value&quot;:&quot;selectPerformance&quot;}" />

    <property
      name="json"
      value="{&quot;parameter&quot;:[${JSON_buildId},${JSON_eclipseStream},${JSON_EBUILDER_HASH},${JSON_defaultTestSuite}]}" />

    <!-- TODO: "segment" varies by test, and/or environment ... must be an easier way? -->
    <property
      name="env.LINUX_PERF_SEGMENT"
      value="perftests" />

    <echo message="env.HUDSON_PERF_PROTOCOL: ${env.HUDSON_PERF_PROTOCOL}" />
    <echo message="env.HUDSON_PERF_HOST: ${env.HUDSON_PERF_HOST}" />
    <echo message="env.HUDSON_PERF_PORT: ${env.HUDSON_PERF_PORT}" />
    <echo message="json for perf curl post: ${json}" />
    <echo message="${env.HUDSON_PERF_PROTOCOL}://${env.HUDSON_PERF_HOST}:${env.HUDSON_PERF_PORT}/${env.LINUX_PERF_SEGMENT}/job/${job}/build" />

    <exec
      executable="curl"
      resultproperty="rcPerf"      
      outputproperty="perfOutput"
      errorproperty="perfErrorOutput">
      <arg line="-X POST" />
      <arg
        value="${env.HUDSON_PERF_PROTOCOL}://${env.HUDSON_PERF_HOST}:${env.HUDSON_PERF_PORT}/${env.LINUX_PERF_SEGMENT}/job/${job}/build" />
      <arg line="-d token=${env.HUDSON_TOKEN}" />
      <arg value="--fail" />
      <arg value="--data-urlencode" />
      <arg value="json=${json}" />
    </exec>
    <echo message="DEBUG: rcPerf: ${rcPerf}" />
    <condition property="invocationNotOk">
      <not>
        <equals
          arg1="${rcPerf}"
          arg2="0" />
      </not>
    </condition>
    <antcall target="checkInvocation">
      <param
        name="returnCode"
        value="${rcPerf}" />
      <param
        name="job"
        value="${job}" />
      <param
        name="output"
        value="${perfOutput}" />
      <param
        name="errorOutput"
        value="${perfErrorOutput}" />
    </antcall>
  </target>


  <target
    name="init"
    depends="initStreamVariables"
    unless="invokeTestsJSONinitialized">

    <property environment="env" />
    
    <!-- posting directory should be passed in to us ... but, in case not 
         we will at least define it.
    -->
    <property
      name="postingDirectory"
      value="${basedir}/postingDirectory" />

    <property
      name="env.HUDSON_HOST"
      value="hudson.eclipse.org" />
    <property
      name="env.HUDSON_PROTOCOL"
      value="https" />
    <property
      name="env.HUDSON_PORT"
      value="443" />
    <property
      name="env.HUDSON_ROOT_URI"
      value="shared" />
    <property
      name="env.HUDSON_GTK3_ROOT_URI"
      value="platform" />
    <property
      name="env.HUDSON_PERF_HOST"
      value="hudson.eclipse.org" />
    <property
      name="env.HUDSON_PERF_PROTOCOL"
      value="https" />
    <property
      name="env.HUDSON_PERF_PORT"
      value="443" />

    <script language="javascript">
          <![CDATA[
            var buildId = project.getProperty("buildId");
            var pattern = new RegExp(/^([IMXYPNSRU])(\d{8})-(\d{4})$/);

            var sArray = pattern.exec(buildId);
            // sArray 0 is "whole match"
            project.setProperty("buildType", sArray[1]);
          ]]>
    </script>
    <echo message="Computed buildType of ${buildType} from ${buildId}" />
    <property
      name="invokeTestsJSONinitialized"
      value="true" />
  </target>

  <target name="initStreamVariables">

    <fail
      unless="eclipseStream"
      message="eclipseStream must be provided by caller" />
    <condition property="streamOK">
      <matches
        pattern="\d\.\d\.\d"
        string="${eclipseStream}" />
    </condition>
    <fail
      message="eclipseStream variable had unexpected format. Should be digit.digit.digit, but was ${eclipseStream}"
      unless="streamOK" />
    <script language="javascript">
          <![CDATA[
            var eclipseStream = project.getProperty("eclipseStream");
            var pattern = new
            RegExp(/(\d+)\.(\d+)\.(\d+)/);

            var sArray = pattern.exec(eclipseStream);
            // sArray[0] is "whole match"
            project.setProperty("eclipseStreamMajor", sArray[1]);
            project.setProperty("eclipseStreamMinor", sArray[2]);
            project.setProperty("eclipseStreamService", sArray[3]);
           ]]>
    </script>

  </target>

</project>
