mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

neil_a_wilson
01.53.2007 5f2bea4576ac094aa5358e3782b35021cab91d5d
Add the svn:eol-style property to a file that was missing it.
1 files modified
1214 ■■■■ changed files
opends/tests/functional-tests/staf-installer.xml 1214 ●●●● patch | view | raw | blame | history
opends/tests/functional-tests/staf-installer.xml
@@ -1,607 +1,607 @@
<!--
 ! CDDL HEADER START
 !
 ! The contents of this file are subject to the terms of the
 ! Common Development and Distribution License, Version 1.0 only
 ! (the "License").  You may not use this file except in compliance
 ! with the License.
 !
 ! You can obtain a copy of the license at
 ! trunk/opends/resource/legal-notices/OpenDS.LICENSE
 ! or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 ! See the License for the specific language governing permissions
 ! and limitations under the License.
 !
 ! When distributing Covered Code, include this CDDL HEADER in each
 ! file and include the License file at
 ! trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
 ! add the following below this CDDL HEADER, with the fields enclosed
 ! by brackets "[]" replaced with your own identifying * information:
 !      Portions Copyright [yyyy] [name of copyright owner]
 !
 ! CDDL HEADER END
 !
 !
 !      Portions Copyright 2007 Sun Microsystems, Inc.
 ! -->
<project name="opends-staf-installer" basedir="." default="usage">
  <description>
        Installer ant file for the staf platform
        This allows tests that need a running instance of staf to easily
        get one and hides all the complexity under the hood
  </description>
  <!-- installer wide settings - top -->
    <property file="../../PRODUCT"/>
    <property name="product.name"
              value="${SHORT_NAME}-${MAJOR_VERSION}.${MINOR_VERSION}" />
    <!-- this is the file where the default values are defined                -->
    <property file="staf-installer/staf-installer.properties"                  />
    <!-- Define the os name in case we're on windows
         why do this ?
         the jvm returns different strings for os.name on different flavors
         of windows ('Windows 2000', 'Windows 2003', 'Windows XP', ...)
    -->
    <condition property="os.myname" value="windows" else="${os.name}">
      <os family="windows"/>
    </condition>
    <!-- Check if the current platform is supported                           -->
    <condition property="platform.supported">
      <available file="staf-installer/${os.myname}.properties"/>
    </condition>
    <!-- Load architecture specific properties
        loading this one first allows to override common properties with platform
        specific properties
    -->
    <property file="staf-installer/${os.myname}-${os.arch}-${sun.arch.data.model}.properties" />
    <property file="staf-installer/${os.myname}-${os.arch}.properties"         />
    <!-- Load properties common to the OS regardless of architecture          -->
    <property file="staf-installer/${os.myname}.properties"                    />
    <!-- Daily build properties -->
    <tstamp>
      <format property="todays.date" pattern="yyyyMMdd"/>
    </tstamp>
    <tstamp>
      <format property="yesterdays.date" pattern="yyyyMMdd" offset="-24" unit="hour"/>
    </tstamp>
    <condition property="daily.date" value="${todays.date}" else="${yesterdays.date}">
      <http url="${daily.build.url}/${todays.date}${daily.build.time}/${SHORT_NAME}/build/package/${product.name}.zip"/>
    </condition>
    <property name="daily.package.dir"
              value="${staf.home}/daily-builds/${daily.date}"/>
    <property name="daily.package"
              value="${daily.package.dir}/${product.name}.zip"/>
    <property name="daily.package.url"
              value="${daily.build.url}/${daily.date}${daily.build.time}/${SHORT_NAME}/build/package/${product.name}.zip"/>
  <!-- installer wide settings - bottom  -->
<!-- Usage section - top     -->
  <!-- Default target => how to use this file -->
    <target name="usage"
          description="Gives a message that helps using this file">
        <echo>Installer usage:
 main targets=
   usage      : print this message
   status     : report if the staf is installed and running
   bootstrap  : install and start the staf
   run-tests  : run the functional tests (requires staf installed and started)
   run-daily  : run the functional tests on today's build
   wipeout    : stop and uninstall the staf
 subtargets=
   download   : download the archives necessary to install the staf
   install    : install the staf
   start      : start the staf unless it is already running
   stop       : stop the staf if it is already running
   uninstall  : uninstall the staf if it is installed</echo>
    </target>
<!-- Usage section - bottom  -->
<!-- Downloader section - top    -->
  <target name="download-do-prepare-check-proxy">
    <echo>Checking for proxy [${proxy.host}:${proxy.port}] as user [${proxy.user}].</echo>
    <echo>Note: If these values do not match your environment, </echo>
    <echo>      please edit the following config file:</echo>
    <echo>      [${basedir}${file.separator}staf-installer${file.separator}staf-installer.properties]</echo>
    <condition property="proxy.enabled">
      <and>
        <not>
          <http url="${bits.download.url}"/>
        </not>
        <isreachable host="${proxy.host}" timeout="5"/>
      </and>
    </condition>
  </target>
  <target name="download-do-prepare-set-proxy" if="proxy.enabled" >
    <echo>Proxy detected. Configuring.</echo>
    <setproxy
      proxyhost="${proxy.host}"
      proxyport="${proxy.port}"
      proxyuser="${proxy.user}"
      proxypassword="${proxy.pass}"/>
  </target>
  <target
    name="download-do-prepare"
    depends="download-do-prepare-check-proxy,download-do-prepare-set-proxy">
    <mkdir dir="${bits.download.dir}" />
  </target>
  <target name="download-do-failed" unless="bits.all.downloaded" >
    <echo>Couldn't get the bits, sorry.</echo>
  </target>
  <target name="download-do-succeeded" if="bits.all.downloaded" >
    <echo>Successfully downloaded all the archives needed for installation.</echo>
  </target>
  <target name="download-do-get-staf"  unless="bits.staf.downloaded.before">
    <get src="${bits.download.url}/${bits.staf.archive}"
         dest="${bits.download.dir}/${bits.staf.archive}" />
    <property name="bits.staf.downloaded" value="true"/>
  </target>
  <target name="download-do-get-stax"  unless="bits.stax.downloaded.before">
    <get src="${bits.download.url}/${bits.stax.archive}"
         dest="${bits.download.dir}/${bits.stax.archive}" />
    <property name="bits.stax.downloaded" value="true" />
  </target>
  <target name="download-do"
          if="platform.supported"
          depends="status-do,download-do-prepare,download-do-get-staf,download-do-get-stax">
    <condition property="bits.all.downloaded" >
      <and>
        <or>
          <isset property="bits.staf.downloaded"/>
          <isset property="bits.staf.downloaded.before" />
        </or>
        <or>
          <isset property="bits.stax.downloaded"/>
          <isset property="bits.stax.downloaded.before" />
        </or>
      </and>
    </condition>
    <antcall target="download-do-succeeded" />
    <antcall target="download-do-failed"    />
  </target>
  <target name="download-dont" unless="platform.supported">
    <echo>${os.myname}-${os.arch} is not a supported platform</echo>
  </target>
  <target name="download"
          depends="status-do,download-do,download-dont"
          description="Download the bits necessary to install staf"/>
  <target name="download-daily" depends="status-do,download-do-prepare" unless="daily.package.downloaded">
    <mkdir dir="${daily.package.dir}"/>
    <get src="${daily.package.url}"
         dest="${daily.package}"/>
  </target>
  <!-- Downloader section - bottom -->
<!-- Installation section - top    -->
  <target name="install-config" if="staf.install.successful">
    <copy file="${staf.config.stubs}" tofile="${staf.config}">
      <filterchain>
        <expandproperties/>
      </filterchain>
    </copy>
  </target>
  <target name="install-stax" if="staf.install.successful">
    <unzip
        src="${bits.download.dir}/${bits.stax.archive}"
        dest="${staf.install.dir}/services"/>
  </target>
    <target name="install-staf-jar"
          description="deploy the staf bits"
          if="staf.archive.is.jar">
    <echo message="Installing staf, please wait, it'll take some time..."    />
    <java jar="${bits.download.dir}/${bits.staf.archive}" fork="true">
      <arg value="-silent" />
      <arg line="-W license.selection=&quot;Accept&quot;" />
      <arg line="-W stafinstalldirectory.defaultInstallLocation=&quot;${staf.install.dir}&quot;"/>
    </java>
    <condition property="staf.install.successful">
      <available file="${staf.install.dir}/bin/STAF.cfg"/>
    </condition>
  </target>
  <target name="install-staf-tar" if="staf.archive.is.tar">
    <gunzip
      src="${bits.download.dir}/${bits.staf.archive}"
      dest="${bits.download.dir}"/>
    <untar dest="${bits.download.dir}">
      <fileset dir="${bits.download.dir}">
        <include name="*.tar"/>
      </fileset>
    </untar>
    <exec executable="${bits.download.dir}/staf/STAFInst">
      <arg value="-source"/>
      <arg value="${bits.download.dir}/staf"/>
      <arg value="-target"/>
      <arg value="${staf.install.dir}"/>
      <arg value="-acceptlicense"/>
    </exec>
    <condition property="staf.install.successful">
      <available file="${staf.install.dir}/bin/STAF.cfg"/>
    </condition>
  </target>
  <target name="install-staf"
          depends="install-staf-jar,install-staf-tar">
    <fail unless="staf.install.successful" />
  </target>
  <target name="install-prepare" >
    <mkdir dir="${staf.install.dir}"/>
    <mkdir dir="${staf.install.dir}/services"/>
    <mkdir dir="${staf.config.dir}"/>
  </target>
  <target name="install"
          description="Perform framework installation"
          depends="status-do,install-prepare,install-staf,install-stax,install-config"
          if="bits.all.downloaded"/>
<!-- Installation section - bottom -->
<!-- Gui section - top -->
  <target name="gui"
          description="brings up the stax gui" >
    <java classname="com.ibm.staf.service.stax.STAXMonitor"
          classpath="${staf.install.dir}/services/stax/STAXMon.jar${path.separator}${staf.install.dir}/bin/JSTAF.jar"
          fork="true"
          spawn="true"/>
  </target>
<!-- Gui section - bottom -->
<!-- Run tests section - top    -->
  <target name="get-pkg">
    <condition property="product.package.dir"
               value="${daily.package.dir}"
               else="${project.home}/build/package">
       <isset property="tests.run.daily"/>
     </condition>
     <property name="product.package"
               value="${product.package.dir}/${product.name}.zip"/>
  </target>
  <target name="run-tests-prepare"
          depends="status-do,get-pkg"
          if="staf.running">
    <condition property="staf.lib.dir"
      value="${staf.install.dir}${file.separator}bin"
      else="${staf.install.dir}${file.separator}lib">
      <os family="windows"/>
    </condition>
    <!-- python config - top -->
      <!-- 1. get a timestamp for step 3 -->
      <tstamp>
        <format property="tests.run.time" pattern="yyyy.MM.dd-HH.mm.ss"/>
      </tstamp>
      <!-- make all the necessary directories for this test run -->
      <mkdir dir="${staf.tmp.dir}"/>
      <mkdir dir="${tests.run.dir}/${tests.run.time}"/>
      <mkdir dir="${tests.run.dir}/${tests.run.time}/config"/>
      <mkdir dir="${tests.run.dir}/${tests.run.time}/report"/>
      <!-- these will serve for after-the-fact archiving the logs -->
      <mkdir dir="${tests.run.dir}/${tests.run.time}/staf-logs"/>
      <mkdir dir="${tests.run.dir}/${tests.run.time}/server-logs"/>
      <mkdir dir="${tests.run.dir}/${tests.run.time}/coverage"/>
      <!-- 3. perform the config back up if necessary -->
      <copy file="${tests.config}"
            tofile="${tests.config.backup}"
            overwrite="false"/>
      <!-- 4. generate the timestamped config file that will be used for this run -->
      <copy file="${tests.config.stubs}"
            tofile="${tests.run.dir}/${tests.run.time}/config/${tests.config.file}">
        <filterchain>
          <expandproperties/>
        </filterchain>
      </copy>
      <!-- 5. this is a windows-specific measure to replace the windows file
              separator by a forward slash. Staf otherwise fails to find the
              files.
       -->
      <replace file="${tests.run.dir}/${tests.run.time}/config/${tests.config.file}" token="\" value="/"/>
      <!-- 6. copy the generated config in place of the previous one -->
      <copy file="${tests.run.dir}/${tests.run.time}/config/${tests.config.file}"
            tofile="${tests.config}"
            overwrite="true"/>
    <!-- python config - bottom -->
  </target>
  <target name="run-tests"
    depends="status-do,run-tests-prepare"
    if="staf.running">
    <property name="tests.request" value="EXECUTE FILE ${tests.xml} JOBNAME OpenDS_Functional_Tests SCRIPTFILE ${tests.config} SCRIPTFILE ${tests.python} WAIT CLEARLOGS"/>
    <condition property="tests.replay.script" value="replay.bat" else="replay.sh">
      <os family="windows"/>
    </condition>
    <echo>Generating replay script to allow you to re-execute the tests in the same conditions</echo>
    <copy file="${staf.installer.dir}${file.separator}${tests.replay.script}"
          tofile="${tests.run.dir}${file.separator}${tests.run.time}${file.separator}${tests.replay.script}">
      <filterchain>
        <expandproperties/>
      </filterchain>
    </copy>
    <echo>Running tests. This will take more than a while.</echo>
    <property name="CLASSPATH" value="${staf.lib.dir}/JSTAF.jar${path.separator}${e.CLASSPATH}"/>
    <exec
      dir="${staf.bin.dir}"
      executable="${staf.executable}"
      >
      <arg line="LOCAL STAX ${tests.request}"/>
      <env key="CLASSPATH" path="${staf.lib.dir}/JSTAF.jar${path.separator}${e.CLASSPATH}"/>
      <env key="STAFCONVDIR" value="${staf.install.dir}/codepage"/>
      <env key="STAFCODEPAGE" value="LATIN_1"/>
    </exec>
    <!-- restore the original config file to avoid it to be mistakenly commited
         with the generated values    -->
    <delete file="${tests.config}"/>
    <move file="${tests.config.backup}"
          tofile="${tests.config}"/>
    <echo file="${tests.run.dir}/last.run">${tests.run.time}</echo>
    <echo>Saving server logs</echo>
    <copy todir="${tests.run.dir}/${tests.run.time}/server-logs">
      <fileset dir="${staf.tmp.dir}/${product.name}/logs"/>
    </copy>
    <echo>Saving Staf/Stax logs</echo>
    <copy todir="${tests.run.dir}/${tests.run.time}/staf-logs">
      <fileset dir="${staf.home}/logs"/>
    </copy>
    <delete dir="${staf.home}/logs" />
    <echo>Saving report</echo>
    <copy todir="${tests.run.dir}/${tests.run.time}/report">
      <fileset dir="${staf.tmp.dir}">
        <include name="r*"/>
      </fileset>
    </copy>
  </target>
  <target name="daily">
    <property name="tests.run.daily" value="true"/>
  </target>
  <target name="run-daily" depends="status-do,daily,download-daily,coverage-instrument,run-tests"/>
  <target name="coverage-on">
    <property name="coverage.on" value="true"/>
  </target>
  <target name="coverage-instrument" depends="status-do,get-pkg" if="coverage.on">
    <mkdir dir="${staf.tmp.dir}/coverage-instr"/>
    <unzip src="${product.package}"
           dest="${staf.tmp.dir}/coverage-instr"/>
    <move file="${product.package}" tofile="${product.package}.nocov"/>
    <replace file="${staf.tmp.dir}/coverage-instr/${product.name}/bin/start-ds.bat"
             token="start &quot;OpenDS %DIR_HOME%&quot; /B &quot;%JAVA_BIN%&quot;"
             value="start &quot;OpenDS %DIR_HOME%&quot; /B &quot;%JAVA_BIN%&quot; -cp &quot;${project.home}${file.separator}ext${file.separator}emma${file.separator}lib${file.separator}emma.jar&quot; emmarun -cp &quot;%CLASSPATH%&quot; -sp &quot;${project.home}${file.separator}src${file.separator}server&quot; -ix org.opends.server.* -r html"/>
   <zip basedir="${staf.tmp.dir}/coverage-instr" destfile="${product.package}"/>
   <delete dir="${staf.tmp.dir}/coverage-instr"/>
  </target>
  <target name="restore-pkg" if="coverage-on">
    <delete file="${product.package}"/>
    <move file="${product.package}.nocov" tofile="${product.package}"/>
  </target>
  <target name="daily-coverage" depends="coverage-on,run-daily,restore-pkg"/>
  <target name="testwithcoverage" depends="coverage-on,coverage-instrument,run-tests,restore-pkg"/>
<!-- Run tests section - bottom -->
<!-- Uninstallation section - top    -->
  <target name="uninstall-do"
          description="Uninstall the staf"
                    if="staf.installed"            >
    <echo message="Uninstalling staf, please wait..."                        />
    <java jar="${staf.install.dir}/_uninst/uninstall.jar" fork="true">
      <arg value="-silent" />
    </java>
    <sleep seconds="5" />
    <delete dir="${staf.install.dir}" />
  </target>
  <target name="uninstall-dont-not-installed" unless="staf.installed">
    <echo>Staf is not installed.</echo>
  </target>
  <target name="uninstall-dont-running" if="staf.running">
    <echo>Staf is running. Stop staf before uninstalling.</echo>
    <echo>Use either the 'stop' or the 'wipeout' target.</echo>
  </target>
  <target
    name="uninstall-dont"
    depends="uninstall-dont-running,uninstall-dont-not-installed" />
    <target name="uninstall" depends="status-do,uninstall-do,uninstall-dont">
    </target>
<!-- Uninstallation section - bottom -->
<!-- Start section - top       -->
  <target name="start-do"
          description="start the staf"
          if="staf.installed"
          unless="staf.running" >
        <echo message="Starting staf daemon ... on ${os.myname}" />
    <exec
      dir="${staf.bin.dir}"
      executable="${staf.daemon}"
      spawn="true">
     <arg value="${staf.config}"/>
     <env key="${path.var}" path="${java.home}${file.separator}bin${path.separator}${staf.install.dir}${file.separator}bin${path.separator}${path.current}"/>
     <env key="LD_LIBRARY_PATH" path="${staf.install.dir}/lib"/>
     <env key="CLASSPATH" path="${staf.install.dir}/bin/JSTAF.jar${path.separator}${e.CLASSPATH}"/>
     <env key="STAFCONVDIR" value="${staf.install.dir}/codepage"/>
     <env key="STAFCODEPAGE" value="LATIN_1"/>
     <env key="STAF_INSTANCE_NAME" value="STAF"/>
   </exec>
   </target>
  <target name="start-dont" if="staf.running">
    <echo>Staf is already running.</echo>
  </target>
    <target name="start" depends="status-do">
        <antcall target="start-do"/>
    <antcall target="start-dont"/>
    </target>
<!-- Start section - bottom    -->
<!-- Stop section - top     -->
    <target name="stop-do" if="staf.running">
        <echo>Stopping staf...</echo>
    <exec
      executable="${staf.executable}"
      spawn="true"                                  >
      <arg line="local shutdown shutdown"/>
    </exec>
    <echo>staf has been instructed to close the shop.</echo>
    <echo>Please allow some time as staf wipes the plate clean</echo>
  </target>
  <target name="stop-dont" unless="staf.running">
    <echo>Staf is not running.</echo>
  </target>
  <target name="stop" depends="status-do">
        <antcall target="stop-do"/>
    <antcall target="stop-dont"/>
    </target>
<!-- Stop section - bottom  -->
<!-- Status section - top -->
  <!-- Bits status section - top -->
    <target name="status-archive-downloaded?" if="bits.all.downloaded.before">
      <echo>Staf bits are ready to be installed. Use 'install' target.</echo>
    </target>
    <target name="status-archive-not-downloaded?" unless="bits.all.downloaded.before">
      <echo>No staf bits found. Use the get-bits or bootstrap target.</echo>
    </target>
  <!-- Bits status section - bottom -->
  <!-- Installation status section - top -->
    <target name="status-staf-installed?" if="staf.installed">
      <echo>Found staf installed in [${staf.install.dir}]</echo>
      <antcall target="status-staf-running?"       />
      <antcall target="status-staf-not-running?"   />
    </target>
    <target name="status-staf-not-installed?" unless="staf.installed">
      <echo>Could not find staf installation.</echo>
      <echo>Checking if the bits here and ready for installation...</echo>
      <antcall target="status-archive-downloaded?" />
      <antcall target="status-archive-not-downloaded?" />
    </target>
  <!-- Installation status section - bottom -->
  <!-- Running status section - top -->
    <target name="status-staf-running?" if="staf.running">
      <echo>staf is listening on port [${staf.port.default}]</echo>
      <echo>You're all set to run the functional tests.</echo>
    </target>
    <target name="status-staf-not-running?" unless="staf.running">
      <echo>staf is NOT running. Use the 'start' target.</echo>
    </target>
  <!-- Running status section - bottom -->
  <!-- Get status section - top -->
    <target name="status-do" unless="status-do.already.run" >
      <!-- check if the various archives needed have already been downloaded -->
      <condition property="bits.staf.downloaded.before">
        <available file="${bits.download.dir}/${bits.staf.archive}"/>
      </condition>
      <condition property="bits.stax.downloaded.before" >
        <available file="${bits.download.dir}/${bits.stax.archive}" />
      </condition>
      <condition property="bits.all.downloaded.before">
        <and>
          <isset property="bits.staf.downloaded.before"/>
          <isset property="bits.stax.downloaded.before"/>
        </and>
      </condition>
      <available file="${daily.package}" property="daily.package.downloaded"/>
      <available file="${staf.install.dir}"
                type="dir"
                property="staf.installed" />
      <condition property="staf.running">
        <socket port="${staf.port}" server="${host.name}"/>
      </condition>
      <condition property="staf.archive.is.jar">
        <contains string="${bits.staf.archive}" substring=".jar"/>
      </condition>
      <condition property="staf.archive.is.tar">
        <not>
          <contains string="${bits.staf.archive}" substring=".jar"/>
        </not>
      </condition>
      <condition property="binary.extension" value=".exe" else="">
          <os family="windows"/>
      </condition>
      <condition property="script.extension" value=".bat" else="">
          <os family="windows"/>
      </condition>
      <condition property="path.var" value="Path" else="PATH">
        <os family="windows"/>
      </condition>
      <macrodef name="propertycopy">
        <attribute name="name"/>
        <attribute name="from"/>
        <sequential>
          <property name="@{name}" value="${@{from}}"/>
        </sequential>
      </macrodef>
      <property environment="e"/>
      <propertycopy name="path.current" from="e.${path.var}"/>
      <property name="staf.executable"
                value="${staf.bin.dir}${file.separator}STAF${binary.extension}"/>
      <property name="staf.daemon"
                value="${staf.bin.dir}${file.separator}STAFProc${binary.extension}"/>
      <property name="status-do.already.run" value="true"/>
    </target>
  <!-- Get status section - bottom -->
  <!-- Status cli section - top -->
    <target name="status" depends="status-do">
      <condition property="is.platform.supported" value="yes" else="no" >
        <isset property="platform.supported"/>
      </condition>
      <echo>Operating System Family  - ${os.myname}</echo>
      <echo>Operating System Name    - ${os.name}</echo>
      <echo>Operating System Version - ${os.version}</echo>
      <echo>Machine Architecture     - ${os.arch}</echo>
      <echo>Platform Supported       - ${is.platform.supported}</echo>
      <echo>Java Home                - ${java.home}</echo>
      <echo>Java Version             - ${java.version}</echo>
      <echo>PATH                     - ${path.current}</echo>
      <echo>CLASSPATH                - ${e.CLASSPATH}</echo>
      <antcall target="status-staf-installed?"     />
      <antcall target="status-staf-not-installed?" />
    </target>
  <!-- Status cli section - bottom -->
<!--  Status section - bottom -->
<!-- Macros section - top -->
    <target name="bootstrap">
    <antcall target="download"  />
        <antcall target="install"   />
        <antcall target="start"     />
    </target>
    <target name="wipeout">
        <antcall target="stop"/>
    <sleep seconds="10"/>
        <antcall target="uninstall"/>
    </target>
<!--  Macros section - bottom -->
</project>
<!--
 ! CDDL HEADER START
 !
 ! The contents of this file are subject to the terms of the
 ! Common Development and Distribution License, Version 1.0 only
 ! (the "License").  You may not use this file except in compliance
 ! with the License.
 !
 ! You can obtain a copy of the license at
 ! trunk/opends/resource/legal-notices/OpenDS.LICENSE
 ! or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 ! See the License for the specific language governing permissions
 ! and limitations under the License.
 !
 ! When distributing Covered Code, include this CDDL HEADER in each
 ! file and include the License file at
 ! trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
 ! add the following below this CDDL HEADER, with the fields enclosed
 ! by brackets "[]" replaced with your own identifying * information:
 !      Portions Copyright [yyyy] [name of copyright owner]
 !
 ! CDDL HEADER END
 !
 !
 !      Portions Copyright 2007 Sun Microsystems, Inc.
 ! -->
<project name="opends-staf-installer" basedir="." default="usage">
  <description>
        Installer ant file for the staf platform
        This allows tests that need a running instance of staf to easily
        get one and hides all the complexity under the hood
  </description>
  <!-- installer wide settings - top -->
    <property file="../../PRODUCT"/>
    <property name="product.name"
              value="${SHORT_NAME}-${MAJOR_VERSION}.${MINOR_VERSION}" />
    <!-- this is the file where the default values are defined                -->
    <property file="staf-installer/staf-installer.properties"                  />
    <!-- Define the os name in case we're on windows
         why do this ?
         the jvm returns different strings for os.name on different flavors
         of windows ('Windows 2000', 'Windows 2003', 'Windows XP', ...)
    -->
    <condition property="os.myname" value="windows" else="${os.name}">
      <os family="windows"/>
    </condition>
    <!-- Check if the current platform is supported                           -->
    <condition property="platform.supported">
      <available file="staf-installer/${os.myname}.properties"/>
    </condition>
    <!-- Load architecture specific properties
        loading this one first allows to override common properties with platform
        specific properties
    -->
    <property file="staf-installer/${os.myname}-${os.arch}-${sun.arch.data.model}.properties" />
    <property file="staf-installer/${os.myname}-${os.arch}.properties"         />
    <!-- Load properties common to the OS regardless of architecture          -->
    <property file="staf-installer/${os.myname}.properties"                    />
    <!-- Daily build properties -->
    <tstamp>
      <format property="todays.date" pattern="yyyyMMdd"/>
    </tstamp>
    <tstamp>
      <format property="yesterdays.date" pattern="yyyyMMdd" offset="-24" unit="hour"/>
    </tstamp>
    <condition property="daily.date" value="${todays.date}" else="${yesterdays.date}">
      <http url="${daily.build.url}/${todays.date}${daily.build.time}/${SHORT_NAME}/build/package/${product.name}.zip"/>
    </condition>
    <property name="daily.package.dir"
              value="${staf.home}/daily-builds/${daily.date}"/>
    <property name="daily.package"
              value="${daily.package.dir}/${product.name}.zip"/>
    <property name="daily.package.url"
              value="${daily.build.url}/${daily.date}${daily.build.time}/${SHORT_NAME}/build/package/${product.name}.zip"/>
  <!-- installer wide settings - bottom  -->
<!-- Usage section - top     -->
  <!-- Default target => how to use this file -->
    <target name="usage"
          description="Gives a message that helps using this file">
        <echo>Installer usage:
 main targets=
   usage      : print this message
   status     : report if the staf is installed and running
   bootstrap  : install and start the staf
   run-tests  : run the functional tests (requires staf installed and started)
   run-daily  : run the functional tests on today's build
   wipeout    : stop and uninstall the staf
 subtargets=
   download   : download the archives necessary to install the staf
   install    : install the staf
   start      : start the staf unless it is already running
   stop       : stop the staf if it is already running
   uninstall  : uninstall the staf if it is installed</echo>
    </target>
<!-- Usage section - bottom  -->
<!-- Downloader section - top    -->
  <target name="download-do-prepare-check-proxy">
    <echo>Checking for proxy [${proxy.host}:${proxy.port}] as user [${proxy.user}].</echo>
    <echo>Note: If these values do not match your environment, </echo>
    <echo>      please edit the following config file:</echo>
    <echo>      [${basedir}${file.separator}staf-installer${file.separator}staf-installer.properties]</echo>
    <condition property="proxy.enabled">
      <and>
        <not>
          <http url="${bits.download.url}"/>
        </not>
        <isreachable host="${proxy.host}" timeout="5"/>
      </and>
    </condition>
  </target>
  <target name="download-do-prepare-set-proxy" if="proxy.enabled" >
    <echo>Proxy detected. Configuring.</echo>
    <setproxy
      proxyhost="${proxy.host}"
      proxyport="${proxy.port}"
      proxyuser="${proxy.user}"
      proxypassword="${proxy.pass}"/>
  </target>
  <target
    name="download-do-prepare"
    depends="download-do-prepare-check-proxy,download-do-prepare-set-proxy">
    <mkdir dir="${bits.download.dir}" />
  </target>
  <target name="download-do-failed" unless="bits.all.downloaded" >
    <echo>Couldn't get the bits, sorry.</echo>
  </target>
  <target name="download-do-succeeded" if="bits.all.downloaded" >
    <echo>Successfully downloaded all the archives needed for installation.</echo>
  </target>
  <target name="download-do-get-staf"  unless="bits.staf.downloaded.before">
    <get src="${bits.download.url}/${bits.staf.archive}"
         dest="${bits.download.dir}/${bits.staf.archive}" />
    <property name="bits.staf.downloaded" value="true"/>
  </target>
  <target name="download-do-get-stax"  unless="bits.stax.downloaded.before">
    <get src="${bits.download.url}/${bits.stax.archive}"
         dest="${bits.download.dir}/${bits.stax.archive}" />
    <property name="bits.stax.downloaded" value="true" />
  </target>
  <target name="download-do"
          if="platform.supported"
          depends="status-do,download-do-prepare,download-do-get-staf,download-do-get-stax">
    <condition property="bits.all.downloaded" >
      <and>
        <or>
          <isset property="bits.staf.downloaded"/>
          <isset property="bits.staf.downloaded.before" />
        </or>
        <or>
          <isset property="bits.stax.downloaded"/>
          <isset property="bits.stax.downloaded.before" />
        </or>
      </and>
    </condition>
    <antcall target="download-do-succeeded" />
    <antcall target="download-do-failed"    />
  </target>
  <target name="download-dont" unless="platform.supported">
    <echo>${os.myname}-${os.arch} is not a supported platform</echo>
  </target>
  <target name="download"
          depends="status-do,download-do,download-dont"
          description="Download the bits necessary to install staf"/>
  <target name="download-daily" depends="status-do,download-do-prepare" unless="daily.package.downloaded">
    <mkdir dir="${daily.package.dir}"/>
    <get src="${daily.package.url}"
         dest="${daily.package}"/>
  </target>
  <!-- Downloader section - bottom -->
<!-- Installation section - top    -->
  <target name="install-config" if="staf.install.successful">
    <copy file="${staf.config.stubs}" tofile="${staf.config}">
      <filterchain>
        <expandproperties/>
      </filterchain>
    </copy>
  </target>
  <target name="install-stax" if="staf.install.successful">
    <unzip
        src="${bits.download.dir}/${bits.stax.archive}"
        dest="${staf.install.dir}/services"/>
  </target>
    <target name="install-staf-jar"
          description="deploy the staf bits"
          if="staf.archive.is.jar">
    <echo message="Installing staf, please wait, it'll take some time..."    />
    <java jar="${bits.download.dir}/${bits.staf.archive}" fork="true">
      <arg value="-silent" />
      <arg line="-W license.selection=&quot;Accept&quot;" />
      <arg line="-W stafinstalldirectory.defaultInstallLocation=&quot;${staf.install.dir}&quot;"/>
    </java>
    <condition property="staf.install.successful">
      <available file="${staf.install.dir}/bin/STAF.cfg"/>
    </condition>
  </target>
  <target name="install-staf-tar" if="staf.archive.is.tar">
    <gunzip
      src="${bits.download.dir}/${bits.staf.archive}"
      dest="${bits.download.dir}"/>
    <untar dest="${bits.download.dir}">
      <fileset dir="${bits.download.dir}">
        <include name="*.tar"/>
      </fileset>
    </untar>
    <exec executable="${bits.download.dir}/staf/STAFInst">
      <arg value="-source"/>
      <arg value="${bits.download.dir}/staf"/>
      <arg value="-target"/>
      <arg value="${staf.install.dir}"/>
      <arg value="-acceptlicense"/>
    </exec>
    <condition property="staf.install.successful">
      <available file="${staf.install.dir}/bin/STAF.cfg"/>
    </condition>
  </target>
  <target name="install-staf"
          depends="install-staf-jar,install-staf-tar">
    <fail unless="staf.install.successful" />
  </target>
  <target name="install-prepare" >
    <mkdir dir="${staf.install.dir}"/>
    <mkdir dir="${staf.install.dir}/services"/>
    <mkdir dir="${staf.config.dir}"/>
  </target>
  <target name="install"
          description="Perform framework installation"
          depends="status-do,install-prepare,install-staf,install-stax,install-config"
          if="bits.all.downloaded"/>
<!-- Installation section - bottom -->
<!-- Gui section - top -->
  <target name="gui"
          description="brings up the stax gui" >
    <java classname="com.ibm.staf.service.stax.STAXMonitor"
          classpath="${staf.install.dir}/services/stax/STAXMon.jar${path.separator}${staf.install.dir}/bin/JSTAF.jar"
          fork="true"
          spawn="true"/>
  </target>
<!-- Gui section - bottom -->
<!-- Run tests section - top    -->
  <target name="get-pkg">
    <condition property="product.package.dir"
               value="${daily.package.dir}"
               else="${project.home}/build/package">
       <isset property="tests.run.daily"/>
     </condition>
     <property name="product.package"
               value="${product.package.dir}/${product.name}.zip"/>
  </target>
  <target name="run-tests-prepare"
          depends="status-do,get-pkg"
          if="staf.running">
    <condition property="staf.lib.dir"
      value="${staf.install.dir}${file.separator}bin"
      else="${staf.install.dir}${file.separator}lib">
      <os family="windows"/>
    </condition>
    <!-- python config - top -->
      <!-- 1. get a timestamp for step 3 -->
      <tstamp>
        <format property="tests.run.time" pattern="yyyy.MM.dd-HH.mm.ss"/>
      </tstamp>
      <!-- make all the necessary directories for this test run -->
      <mkdir dir="${staf.tmp.dir}"/>
      <mkdir dir="${tests.run.dir}/${tests.run.time}"/>
      <mkdir dir="${tests.run.dir}/${tests.run.time}/config"/>
      <mkdir dir="${tests.run.dir}/${tests.run.time}/report"/>
      <!-- these will serve for after-the-fact archiving the logs -->
      <mkdir dir="${tests.run.dir}/${tests.run.time}/staf-logs"/>
      <mkdir dir="${tests.run.dir}/${tests.run.time}/server-logs"/>
      <mkdir dir="${tests.run.dir}/${tests.run.time}/coverage"/>
      <!-- 3. perform the config back up if necessary -->
      <copy file="${tests.config}"
            tofile="${tests.config.backup}"
            overwrite="false"/>
      <!-- 4. generate the timestamped config file that will be used for this run -->
      <copy file="${tests.config.stubs}"
            tofile="${tests.run.dir}/${tests.run.time}/config/${tests.config.file}">
        <filterchain>
          <expandproperties/>
        </filterchain>
      </copy>
      <!-- 5. this is a windows-specific measure to replace the windows file
              separator by a forward slash. Staf otherwise fails to find the
              files.
       -->
      <replace file="${tests.run.dir}/${tests.run.time}/config/${tests.config.file}" token="\" value="/"/>
      <!-- 6. copy the generated config in place of the previous one -->
      <copy file="${tests.run.dir}/${tests.run.time}/config/${tests.config.file}"
            tofile="${tests.config}"
            overwrite="true"/>
    <!-- python config - bottom -->
  </target>
  <target name="run-tests"
    depends="status-do,run-tests-prepare"
    if="staf.running">
    <property name="tests.request" value="EXECUTE FILE ${tests.xml} JOBNAME OpenDS_Functional_Tests SCRIPTFILE ${tests.config} SCRIPTFILE ${tests.python} WAIT CLEARLOGS"/>
    <condition property="tests.replay.script" value="replay.bat" else="replay.sh">
      <os family="windows"/>
    </condition>
    <echo>Generating replay script to allow you to re-execute the tests in the same conditions</echo>
    <copy file="${staf.installer.dir}${file.separator}${tests.replay.script}"
          tofile="${tests.run.dir}${file.separator}${tests.run.time}${file.separator}${tests.replay.script}">
      <filterchain>
        <expandproperties/>
      </filterchain>
    </copy>
    <echo>Running tests. This will take more than a while.</echo>
    <property name="CLASSPATH" value="${staf.lib.dir}/JSTAF.jar${path.separator}${e.CLASSPATH}"/>
    <exec
      dir="${staf.bin.dir}"
      executable="${staf.executable}"
      >
      <arg line="LOCAL STAX ${tests.request}"/>
      <env key="CLASSPATH" path="${staf.lib.dir}/JSTAF.jar${path.separator}${e.CLASSPATH}"/>
      <env key="STAFCONVDIR" value="${staf.install.dir}/codepage"/>
      <env key="STAFCODEPAGE" value="LATIN_1"/>
    </exec>
    <!-- restore the original config file to avoid it to be mistakenly commited
         with the generated values    -->
    <delete file="${tests.config}"/>
    <move file="${tests.config.backup}"
          tofile="${tests.config}"/>
    <echo file="${tests.run.dir}/last.run">${tests.run.time}</echo>
    <echo>Saving server logs</echo>
    <copy todir="${tests.run.dir}/${tests.run.time}/server-logs">
      <fileset dir="${staf.tmp.dir}/${product.name}/logs"/>
    </copy>
    <echo>Saving Staf/Stax logs</echo>
    <copy todir="${tests.run.dir}/${tests.run.time}/staf-logs">
      <fileset dir="${staf.home}/logs"/>
    </copy>
    <delete dir="${staf.home}/logs" />
    <echo>Saving report</echo>
    <copy todir="${tests.run.dir}/${tests.run.time}/report">
      <fileset dir="${staf.tmp.dir}">
        <include name="r*"/>
      </fileset>
    </copy>
  </target>
  <target name="daily">
    <property name="tests.run.daily" value="true"/>
  </target>
  <target name="run-daily" depends="status-do,daily,download-daily,coverage-instrument,run-tests"/>
  <target name="coverage-on">
    <property name="coverage.on" value="true"/>
  </target>
  <target name="coverage-instrument" depends="status-do,get-pkg" if="coverage.on">
    <mkdir dir="${staf.tmp.dir}/coverage-instr"/>
    <unzip src="${product.package}"
           dest="${staf.tmp.dir}/coverage-instr"/>
    <move file="${product.package}" tofile="${product.package}.nocov"/>
    <replace file="${staf.tmp.dir}/coverage-instr/${product.name}/bin/start-ds.bat"
             token="start &quot;OpenDS %DIR_HOME%&quot; /B &quot;%JAVA_BIN%&quot;"
             value="start &quot;OpenDS %DIR_HOME%&quot; /B &quot;%JAVA_BIN%&quot; -cp &quot;${project.home}${file.separator}ext${file.separator}emma${file.separator}lib${file.separator}emma.jar&quot; emmarun -cp &quot;%CLASSPATH%&quot; -sp &quot;${project.home}${file.separator}src${file.separator}server&quot; -ix org.opends.server.* -r html"/>
   <zip basedir="${staf.tmp.dir}/coverage-instr" destfile="${product.package}"/>
   <delete dir="${staf.tmp.dir}/coverage-instr"/>
  </target>
  <target name="restore-pkg" if="coverage-on">
    <delete file="${product.package}"/>
    <move file="${product.package}.nocov" tofile="${product.package}"/>
  </target>
  <target name="daily-coverage" depends="coverage-on,run-daily,restore-pkg"/>
  <target name="testwithcoverage" depends="coverage-on,coverage-instrument,run-tests,restore-pkg"/>
<!-- Run tests section - bottom -->
<!-- Uninstallation section - top    -->
  <target name="uninstall-do"
          description="Uninstall the staf"
                    if="staf.installed"            >
    <echo message="Uninstalling staf, please wait..."                        />
    <java jar="${staf.install.dir}/_uninst/uninstall.jar" fork="true">
      <arg value="-silent" />
    </java>
    <sleep seconds="5" />
    <delete dir="${staf.install.dir}" />
  </target>
  <target name="uninstall-dont-not-installed" unless="staf.installed">
    <echo>Staf is not installed.</echo>
  </target>
  <target name="uninstall-dont-running" if="staf.running">
    <echo>Staf is running. Stop staf before uninstalling.</echo>
    <echo>Use either the 'stop' or the 'wipeout' target.</echo>
  </target>
  <target
    name="uninstall-dont"
    depends="uninstall-dont-running,uninstall-dont-not-installed" />
    <target name="uninstall" depends="status-do,uninstall-do,uninstall-dont">
    </target>
<!-- Uninstallation section - bottom -->
<!-- Start section - top       -->
  <target name="start-do"
          description="start the staf"
          if="staf.installed"
          unless="staf.running" >
        <echo message="Starting staf daemon ... on ${os.myname}" />
    <exec
      dir="${staf.bin.dir}"
      executable="${staf.daemon}"
      spawn="true">
     <arg value="${staf.config}"/>
     <env key="${path.var}" path="${java.home}${file.separator}bin${path.separator}${staf.install.dir}${file.separator}bin${path.separator}${path.current}"/>
     <env key="LD_LIBRARY_PATH" path="${staf.install.dir}/lib"/>
     <env key="CLASSPATH" path="${staf.install.dir}/bin/JSTAF.jar${path.separator}${e.CLASSPATH}"/>
     <env key="STAFCONVDIR" value="${staf.install.dir}/codepage"/>
     <env key="STAFCODEPAGE" value="LATIN_1"/>
     <env key="STAF_INSTANCE_NAME" value="STAF"/>
   </exec>
   </target>
  <target name="start-dont" if="staf.running">
    <echo>Staf is already running.</echo>
  </target>
    <target name="start" depends="status-do">
        <antcall target="start-do"/>
    <antcall target="start-dont"/>
    </target>
<!-- Start section - bottom    -->
<!-- Stop section - top     -->
    <target name="stop-do" if="staf.running">
        <echo>Stopping staf...</echo>
    <exec
      executable="${staf.executable}"
      spawn="true"                                  >
      <arg line="local shutdown shutdown"/>
    </exec>
    <echo>staf has been instructed to close the shop.</echo>
    <echo>Please allow some time as staf wipes the plate clean</echo>
  </target>
  <target name="stop-dont" unless="staf.running">
    <echo>Staf is not running.</echo>
  </target>
  <target name="stop" depends="status-do">
        <antcall target="stop-do"/>
    <antcall target="stop-dont"/>
    </target>
<!-- Stop section - bottom  -->
<!-- Status section - top -->
  <!-- Bits status section - top -->
    <target name="status-archive-downloaded?" if="bits.all.downloaded.before">
      <echo>Staf bits are ready to be installed. Use 'install' target.</echo>
    </target>
    <target name="status-archive-not-downloaded?" unless="bits.all.downloaded.before">
      <echo>No staf bits found. Use the get-bits or bootstrap target.</echo>
    </target>
  <!-- Bits status section - bottom -->
  <!-- Installation status section - top -->
    <target name="status-staf-installed?" if="staf.installed">
      <echo>Found staf installed in [${staf.install.dir}]</echo>
      <antcall target="status-staf-running?"       />
      <antcall target="status-staf-not-running?"   />
    </target>
    <target name="status-staf-not-installed?" unless="staf.installed">
      <echo>Could not find staf installation.</echo>
      <echo>Checking if the bits here and ready for installation...</echo>
      <antcall target="status-archive-downloaded?" />
      <antcall target="status-archive-not-downloaded?" />
    </target>
  <!-- Installation status section - bottom -->
  <!-- Running status section - top -->
    <target name="status-staf-running?" if="staf.running">
      <echo>staf is listening on port [${staf.port.default}]</echo>
      <echo>You're all set to run the functional tests.</echo>
    </target>
    <target name="status-staf-not-running?" unless="staf.running">
      <echo>staf is NOT running. Use the 'start' target.</echo>
    </target>
  <!-- Running status section - bottom -->
  <!-- Get status section - top -->
    <target name="status-do" unless="status-do.already.run" >
      <!-- check if the various archives needed have already been downloaded -->
      <condition property="bits.staf.downloaded.before">
        <available file="${bits.download.dir}/${bits.staf.archive}"/>
      </condition>
      <condition property="bits.stax.downloaded.before" >
        <available file="${bits.download.dir}/${bits.stax.archive}" />
      </condition>
      <condition property="bits.all.downloaded.before">
        <and>
          <isset property="bits.staf.downloaded.before"/>
          <isset property="bits.stax.downloaded.before"/>
        </and>
      </condition>
      <available file="${daily.package}" property="daily.package.downloaded"/>
      <available file="${staf.install.dir}"
                type="dir"
                property="staf.installed" />
      <condition property="staf.running">
        <socket port="${staf.port}" server="${host.name}"/>
      </condition>
      <condition property="staf.archive.is.jar">
        <contains string="${bits.staf.archive}" substring=".jar"/>
      </condition>
      <condition property="staf.archive.is.tar">
        <not>
          <contains string="${bits.staf.archive}" substring=".jar"/>
        </not>
      </condition>
      <condition property="binary.extension" value=".exe" else="">
          <os family="windows"/>
      </condition>
      <condition property="script.extension" value=".bat" else="">
          <os family="windows"/>
      </condition>
      <condition property="path.var" value="Path" else="PATH">
        <os family="windows"/>
      </condition>
      <macrodef name="propertycopy">
        <attribute name="name"/>
        <attribute name="from"/>
        <sequential>
          <property name="@{name}" value="${@{from}}"/>
        </sequential>
      </macrodef>
      <property environment="e"/>
      <propertycopy name="path.current" from="e.${path.var}"/>
      <property name="staf.executable"
                value="${staf.bin.dir}${file.separator}STAF${binary.extension}"/>
      <property name="staf.daemon"
                value="${staf.bin.dir}${file.separator}STAFProc${binary.extension}"/>
      <property name="status-do.already.run" value="true"/>
    </target>
  <!-- Get status section - bottom -->
  <!-- Status cli section - top -->
    <target name="status" depends="status-do">
      <condition property="is.platform.supported" value="yes" else="no" >
        <isset property="platform.supported"/>
      </condition>
      <echo>Operating System Family  - ${os.myname}</echo>
      <echo>Operating System Name    - ${os.name}</echo>
      <echo>Operating System Version - ${os.version}</echo>
      <echo>Machine Architecture     - ${os.arch}</echo>
      <echo>Platform Supported       - ${is.platform.supported}</echo>
      <echo>Java Home                - ${java.home}</echo>
      <echo>Java Version             - ${java.version}</echo>
      <echo>PATH                     - ${path.current}</echo>
      <echo>CLASSPATH                - ${e.CLASSPATH}</echo>
      <antcall target="status-staf-installed?"     />
      <antcall target="status-staf-not-installed?" />
    </target>
  <!-- Status cli section - bottom -->
<!--  Status section - bottom -->
<!-- Macros section - top -->
    <target name="bootstrap">
    <antcall target="download"  />
        <antcall target="install"   />
        <antcall target="start"     />
    </target>
    <target name="wipeout">
        <antcall target="stop"/>
    <sleep seconds="10"/>
        <antcall target="uninstall"/>
    </target>
<!--  Macros section - bottom -->
</project>