<?xml version="1.0"?>

<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->

<!--
Before you can run these subtargets directly, you need
to call at top-level: ant deploy-contrib compile-core-test
-->
<project name="raid" default="jar">

  <import file="../build-contrib.xml"/>

  <!-- the unit test classpath -->
  <path id="contrib.classpath.raid">
    <pathelement location="${hadoop.root}/src/contrib/raid/lib"/>
    <path refid="contrib-classpath"/>
  </path>

  <target name="test" depends="compile,compile-test,test-junit" description="Automated Test Framework" if="test.available"/>

  <target name="test-junit" depends="compile,compile-test" if="test.available">
    <junit showoutput="${test.output}" fork="yes" printsummary="yes" errorProperty="tests.failed" 
           haltonfailure="no" failureProperty="tests.failed">

        <classpath refid="test.classpath"/>
        <sysproperty key="test.build.data" value="${build.test}/data"/>
              <sysproperty key="build.test" value="${build.test}"/>
              <sysproperty key="user.dir" value="${build.test}/data"/>
              <sysproperty key="fs.default.name" value="${fs.default.name}"/>
              <sysproperty key="hadoop.test.localoutputfile" value="${hadoop.test.localoutputfile}"/>
              <sysproperty key="hadoop.log.dir" value="${hadoop.log.dir}"/>
        <sysproperty key="test.src.dir" value="${test.src.dir}"/>
        <formatter type="plain" />
        <batchtest todir="${build.test}" unless="testcase">
           <fileset dir="${src.test}">
             <include name="**/Test*.java"/>
           </fileset>
        </batchtest>
        <batchtest todir="${build.test}" if="testcase">
            <fileset dir="${src.test}">
                <include name="**/${testcase}.java"/>
            </fileset>
         </batchtest>
    </junit>
    <fail if="tests.failed">Tests failed!</fail>
 </target>

</project>

