<?xml version="1.0"?>
<!DOCTYPE project [
        <!ENTITY properties SYSTEM "file:xmls/properties.xml">
        <!ENTITY paths  SYSTEM "file:xmls/path_refs.xml">
        <!ENTITY taskdefs SYSTEM "file:xmls/taskdefs.xml">
        <!ENTITY taskdefs_post_compile SYSTEM "file:xmls/taskdefs_post_compile.xml">
        <!ENTITY targets SYSTEM "file:xmls/targets.xml">
]>

<project default="printEnv" basedir=".">
<!-- =================================================================== -->
<description>
   Test Files Build file for Axis

Notes:
   This is a build file for use with the Jakarta Ant build tool.

Prerequisites:

   jakarta-ant from http://jakarta.apache.org

Optional components:
   SOAP Attachment support enablement:
     activation.jar from http://java.sun.com/products/javabeans/glasgow/jaf.html
     mailapi.jar    from http://java.sun.com/products/javamail/
   Security support enablement:
     xmlsec.jar from fresh build of CVS from http://xml.apache.org/security/
     Other support jars from http://cvs.apache.org/viewcvs.cgi/xml-security/libs/

Build Instructions:
   To build, run

     ant "target"

   on the directory where this file is located with the target you want.

Most useful targets:

 - compile  : compiles the tests and WSDL files

Author:
  Matt Seibert mseibert@us.ibm.com

Copyright:
  Copyright (c) 2002-2003 Apache Software Foundation.
</description>
<!-- ==================================================================== -->

      &properties;
      &paths;
      &taskdefs;
      &taskdefs_post_compile;
      &targets;

  <!-- Give user a chance to override without editing this file
       (and without typing -D each time it compiles it) -->
  <property file="test.properties"/>
  <property file="${user.home}/test.properties"/>

<!-- =========================================================================== -->
  <target name="compile" depends="printEnv,copy">
    <!-- Compile the code -->
    <antcall target="compileJunit"/>
    <antcall target="compileFunctional"/>
  </target>

  <target name="compileJunit" depends="printEnv,copy">
    <!-- Compile the code -->
    <foreach target="component-compile" fork="${foreach.fork}" inheritAll="${ant.inheritAll}" inheritRefs="${ant.inheritRefs}">
        <param name="file">
             <fileset dir="${axis.home}" >
               <patternset>
                 <include name="test/**/build.xml"/>
                 <exclude name="test/wsdl/**/build.xml" />
                 <exclude name="test/functional/build.xml"/>
               </patternset>
             </fileset>
        </param>
     </foreach>
  </target>

  <target name="compileFunctional" depends="printEnv,copy">
    <!-- Compile the code -->
    <foreach target="component-compile" fork="${foreach.fork}" inheritAll="${ant.inheritAll}" inheritRefs="${ant.inheritRefs}">
        <param name="file">
             <fileset dir="${axis.home}" >
               <patternset>
                 <include name="test/wsdl/**/build.xml" />
                 <include name="test/rpc/**/build.xml" />
                 <include name="test/functional/build.xml"/>
                 <exclude name="test/wsdl/attachments/**/build.xml" unless="attachments.present"/>
                 <exclude name="test/wsdl/interop3/**/build.xml" />
		 <exclude name="test/wsdl/adaptive/**/build.xml" />
               </patternset>
             </fileset>
        </param>
     </foreach>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles the JUnit testcases -->
  <!-- =================================================================== -->

  <!-- =================================================================== -->
  <!-- Runs the JUnit package testcases -->
  <!-- =================================================================== -->
  <target name="junit" if="junit.present">
    <available file="${axis.home}/junit-exclude-tests.txt" property="junit-exclude-tests.present"/>
    <junit printsummary="yes" haltonfailure="${test.functional.fail}" fork="yes">
      <jvmarg value="-Xbootclasspath:${sun.boot.class.path}"/>
      <classpath refid="classpath" />
      <formatter type="xml" />
      <batchtest todir="${test.functional.reportdir}">
        <fileset dir="${build.dir}/classes">
          <!-- Convention: each package that's being tested
                has its own test class collecting all the tests -->
          <include name="**/PackageTests.class" />
          <excludesfile name="${axis.home}/junit-exclude-tests.txt" if="junit-exclude-tests.present"/> 
          <!-- <include name="**/test/*TestSuite.class"/> -->
        </fileset>
      </batchtest>
    </junit>
  </target>

  <!-- =================================================================== -->
  <!-- Functional tests, no server (for testing under debugger)            -->
  <!-- =================================================================== -->
  <target name="functional-tests-noserver">
    <ant inheritAll="${ant.inheritAll}" inheritRefs="${ant.inheritRefs}" dir="${axis.home}/test" antfile="build_functional_tests.xml" target="junit-functional-noserver">
      <property name="test.functional.usefile" value="${test.functional.usefile}"/>
    </ant>
  </target>

  <!-- =================================================================== -->
  <!-- Cleans everything                                                   -->
  <!-- =================================================================== -->
  <target name="clean">
    <delete dir="${build.dir}/test"/>
  </target>

  <target name="copy"/>

  <!-- =================================================================== -->
  <!-- Prepares the JUnit functional test -->
  <!-- =================================================================== -->
  <target name="junit-functional-prepare" if="junit.present">
          <path id="deploy.xml.files">
                <fileset dir="${build.dir}/work">
                  <include name="**/deploy.wsdd"/>
                  <exclude name="mssoapinterop/interop*/deploy.wsdd"/>
                </fileset>
          </path>

          <path id="undeploy.xml.files">
                <fileset dir="${build.dir}/work">
                  <include name="**/undeploy.wsdd"/>
                  <exclude name="mssoapinterop/interop*/undeploy.wsdd"/>
                </fileset>
          </path>
          <property name="deploy.xml.property" refid="deploy.xml.files"/>
          <property name="undeploy.xml.property" refid="undeploy.xml.files"/>
  </target>

  <!-- =================================================================== -->
  <!-- Runs the JUnit functional test -->
  <!-- =================================================================== -->
  <target name="junit-functional" if="junit.present" depends="junit-functional-prepare">
    <mkdir dir="${test.functional.reportdir}" />

    <java classname="org.apache.axis.client.AdminClient" fork="yes">
      <classpath refid="classpath" />
      <arg line="${deploy.xml.property}"/>
    </java>

    <available file="${axis.home}/junit-exclude-tests.txt" property="junit-exclude-tests.present"/>
    <!-- now, run the actual test -->
    <junit dir="${axis.home}" printsummary="yes" haltonfailure="${test.functional.fail}" fork="yes">
      <!-- See if this helps with Gump test failures -->
      <sysproperty key="build.clonevm" value="true"/>

      <!-- Pass the parser settings -->
      <jvmarg value="-Djavax.xml.parsers.DocumentBuilderFactory=${javax.xml.parsers.DocumentBuilderFactory}"/>
      <jvmarg value="-Djavax.xml.parsers.SAXParserFactory=${javax.xml.parsers.SAXParserFactory}"/>
      <jvmarg value="-Xbootclasspath:${sun.boot.class.path}"/>
      <jvmarg value="-Djikes.class.path=${jikes.class.path}"/>

      <!-- Pass through the proxy parameters -->
      <jvmarg value="-Dhttp.proxyHost=${http.proxyHost}"/>
      <jvmarg value="-Dhttp.proxyPort=${http.proxyPort}"/>
      <jvmarg value="-Dhttp.nonProxyHosts=${http.nonProxyHosts}"/>
      <jvmarg value="-Dhttp.proxyUser=${http.proxyUser}"/>
      <jvmarg value="-Dhttp.proxyPassword=${http.proxyPassword}"/>
      <!-- Pass the port for SimpleAxisServer -->
      <jvmarg value="-Dtest.functional.SimpleAxisPort=${test.functional.SimpleAxisPort}"/>
      <jvmarg value="-Dtest.functional.ServicePort=${test.functional.ServicePort}"/>
      <classpath refid="classpath" />
      <formatter type="xml" usefile="${test.functional.usefile}"/>
      <batchtest todir="${test.functional.reportdir}">
        <fileset dir="${build.dest}">
          <!-- Convention: each package that's being tested
                has its own test class collecting all the tests -->
              <include name="**/FunctionalTests.class" />
              <include name="**/*TestCase.class" />
              <exclude name="**/Interop3TestCase.class"/>
              <exclude name="**/DataServiceTestCase.class"/>
              <exclude name="**/WhiteMesaSoap12TestSvcTestCase.class"/>
              <exclude name="**/test/wsdl/attachments/**/*.class" unless="attachments.present" />
	      <exclude name="**/test/wsdl/adaptive/**/*.class"/>
          <excludesfile name="${axis.home}/junit-exclude-tests.txt" if="junit-exclude-tests.present"/> 
        </fileset>
      </batchtest>
    </junit>

    <java classname="org.apache.axis.client.AdminClient" fork="yes">
      <classpath refid="classpath" />
      <arg line="${undeploy.xml.property}"/>
    </java>
  </target>

  <target name="junit-functional-secure" if="junit.present" depends="junit-functional-prepare,start-signature-signing-and-verification">
    <available file="${axis.home}/junit-exclude-tests.txt" property="junit-exclude-tests.present"/>
    <!-- now, run the actual test -->
    <junit dir="${axis.home}" printsummary="yes" haltonfailure="${test.functional.fail}" fork="yes">
      <classpath refid="classpath" />
      <formatter type="xml" usefile="${test.functional.usefile}"/>
      <batchtest todir="${test.functional.reportdir}">
        <fileset dir="${build.dest}">
          <!-- Convention: each package that's being tested
                has its own test class collecting all the tests -->
              <include name="**/TestBidBuySample.class" />
              <exclude name="**/Interop3TestCase.class"/>
              <excludesfile name="${axis.home}/junit-exclude-tests.txt" if="junit-exclude-tests.present"/> 
        </fileset>
      </batchtest>
    </junit>
  </target>

  <!-- =================================================================== -->
  <!-- Run functional tests                                                -->
  <!-- =================================================================== -->
  <target name="functional-tests" depends="printEnv,transport-layer" if="junit.present" >
    <!-- This uses a custom Ant task.  See test/functional/ant/RunAxisFunctionalTests.java -->
    <!-- This pattern taken from Cactus, http://jakarta.apache.org/commons/cactus -->

    <runaxisfunctionaltests
      url="http://localhost:8088"
      tcpServerTarget="start-functional-test-tcp-server"
      httpServerTarget="start-functional-test-http-server"
      testTarget="junit-functional"
      httpStopTarget="stop-functional-test-http-server" />

    <!-- now run security test -->
    <antcall target="functional-tests-secure"/>

  </target>

  <!-- =================================================================== -->
  <!-- Run secure functional tests ONLY                                    -->
  <!-- =================================================================== -->
  <target name="functional-tests-secure" if="security.present">

    <runaxisfunctionaltests
      url="http://localhost:8088"
      tcpServerTarget="start-functional-test-tcp-server"
      httpServerTarget="start-functional-test-http-server-secure"
      testTarget="junit-functional-secure"
      httpStopTarget="stop-functional-test-http-server-secure" />

  </target>

<!-- =================================================================== -->
  <!-- Run simple tests                                                -->
  <!-- =================================================================== -->
  <target name="simple-tests" depends="setenv" if="junit.present" >
    <runaxisfunctionaltests
      url="http://localhost:8088"
      tcpServerTarget="start-functional-test-tcp-server"
      httpServerTarget="start-functional-test-http-server"
      testTarget="printEnv"
      httpStopTarget="stop-functional-test-http-server" />
  </target>

  <!-- =================================================================== -->
  <!--   This simply echos the component files, for sanity checks -->
  <!-- =================================================================== -->
  <target name="echoTest" >
    <foreach target="echo-file" fork="${foreach.fork}" inheritAll="${ant.inheritAll}" inheritRefs="${ant.inheritRefs}">
        <param name="file">
             <fileset dir="${axis.home}" >
                <patternset>
                 <include name="test/**/build.xml"/>
                 <exclude name="test/wsdl/interop3/**/build.xml" />
                </patternset>
             </fileset>
        </param>
     </foreach>
  </target>

  <!-- =================================================================== -->
  <!--    This runs each test component, instantiating the server each time -->
  <!-- =================================================================== -->
  <target name="componentTest" >
    <foreach target="batch-component-run" fork="${foreach.fork}" inheritAll="${ant.inheritAll}" inheritRefs="${ant.inheritRefs}">
        <param name="file">
             <fileset dir="${axis.home}" >
                <patternset>
                 <include name="test/**/build.xml"/>
                 <exclude name="test/wsdl/interop3/**/build.xml" />
                </patternset>
             </fileset>
        </param>
     </foreach>
  </target>

  <!-- =================================================================== -->
  <!--    This runs all the tests, but only execs the server ONCE -->
  <!-- =================================================================== -->
  <target name="batchTest" depends="transport-layer">
    <runaxisfunctionaltests
      url="http://localhost:${test.functional.TCPListenerPort}"
      tcpServerTarget="start-functional-test-tcp-server"
      httpServerTarget="start-functional-test-http-server"
      testTarget="batch-junit-functional"
      httpStopTarget="stop-functional-test-http-server" />

    <ant inheritAll="${ant.inheritAll}" inheritRefs="${ant.inheritRefs}" dir="${axis.home}/test/functional" antfile="build.xml" target="run"/>
   </target>

   <target name="batch-junit-functional" depends="start-signature-signing-and-verification">
    <foreach target="batch-component-test" fork="${foreach.fork}" inheritAll="${ant.inheritAll}" inheritRefs="${ant.inheritRefs}">
        <param name="file">
             <fileset dir="${axis.home}" >
                <patternset>
                 <include name="test/**/build.xml"/>
                 <exclude name="test/wsdl/interop/build.xml" />
                 <exclude name="test/wsdl/interop3/**/build.xml" />
                </patternset>
             </fileset>
        </param>
     </foreach>
    </target>

    <!-- generate a report from all the tests. 
        requires Xalan or other XSLT engine in ant\lib-->
    <target name="create-test-report" description="create the test report" >
      <mkdir dir="${test.reports.dir}"/>
      <junitreport todir="${test.functional.reportdir}">
        <fileset dir="${test.functional.reportdir}">
          <include name="TEST-*.xml"/>
        </fileset>
        <report format="frames" todir="${test.reports.dir}"  styledir="xmls"/>
      </junitreport>
    </target>

</project>
