<!--
   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.
-->

<project name="TestHarnessTempletonTests" default="test">

    <!-- Separate property name for udfs' build.xml -->
    <property name="e2e.lib.dir" value="${basedir}/lib"/>

    <property name="test.src" value="${basedir}/tests"/>
    <property name="driver.src" value="${basedir}/drivers"/>
    <property name="harness.dir" value="${basedir}/../harness"/>
    <property name="inpdir.local" value="${basedir}/inpdir/"/>
    <property name="test.location" value="${basedir}/testWorkDir"/>
    <property name="driver.src" value="${basedir}/drivers"/>

    <!-- Check that the necessary properties are setup -->
    <target name="property-check">
        <fail message="Please set the property harness.webhdfs.url to the namenode base url of the cluster"
              unless="harness.webhdfs.url"/>
        <fail message="Please set the property harness.templeton.url to the templeton server base url of the cluster"
              unless="harness.templeton.url"/>
        <fail message="Please set the property inpdir.hdfs to the test input directory on hdfs"
              unless="inpdir.hdfs"/>
    </target>

    <!-- Prep the test area -->
    <target name="init-test">
        <mkdir dir="${test.location}"/>
    </target>

    <target name="test" depends="property-check, init-test">
        <property name="tests.to.run" value=""/>
        <exec executable="${harness.dir}/test_harness.pl" dir="${test.location}" failonerror="true">
            <env key="HARNESS_ROOT" value="${harness.dir}"/>
            <env key="DRIVER_ROOT" value="${basedir}/drivers"/>
            <env key="TH_WORKING_DIR" value="${test.location}"/>
            <env key="TH_INPDIR_LOCAL" value="${inpdir.local}"/>
            <env key="TH_INPDIR_HDFS" value="${inpdir.hdfs}"/>
            <env key="TH_OUT" value="."/>
            <env key="TH_ROOT" value="."/>
            <env key="WEBHDFS_URL" value="${harness.webhdfs.url}"/>
            <env key="TEMPLETON_URL" value="${harness.templeton.url}"/>
            <env key="USER_NAME" value="${test.user.name}"/>
            <env key="HARNESS_CONF" value="${basedir}/conf/default.conf"/>
            <env key="SECURE_MODE" value="${secure.mode}"/>
            <arg line="${tests.to.run}"/>
            <arg value="${basedir}/tests/serverstatus.conf"/>
            <arg value="${basedir}/tests/ddl.conf"/>
            <arg value="${basedir}/tests/jobsubmission.conf"/>
        </exec>
    </target>

    <target name="test-hcat-authorization" depends="property-check, init-test">
        <property name="tests.to.run" value=""/>
        <exec executable="${harness.dir}/test_harness.pl" dir="${test.location}" failonerror="true">
            <env key="HARNESS_ROOT" value="${harness.dir}"/>
            <env key="DRIVER_ROOT" value="${basedir}/drivers"/>
            <env key="TH_WORKING_DIR" value="${test.location}"/>
            <env key="TH_INPDIR_LOCAL" value="${inpdir.local}"/>
            <env key="TH_INPDIR_HDFS" value="${inpdir.hdfs}"/>
            <env key="TH_OUT" value="."/>
            <env key="TH_ROOT" value="."/>
            <env key="WEBHDFS_URL" value="${harness.webhdfs.url}"/>
            <env key="TEMPLETON_URL" value="${harness.templeton.url}"/>
            <env key="USER_NAME" value="${test.user.name}"/>
            <env key="GROUP_NAME" value="${test.group.name}"/>
            <env key="GROUP_USER_NAME" value="${test.group.user.name}"/>
            <env key="OTHER_USER_NAME" value="${test.other.user.name}"/>
            <env key="HARNESS_CONF" value="${basedir}/conf/default.conf"/>
            <env key="SECURE_MODE" value="${secure.mode}"/>
            <env key="KEYTAB_DIR" value="${keytab.dir}"/>
            <arg line="${tests.to.run}"/>
            <arg value="${basedir}/tests/hcatperms.conf"/>
        </exec>
    </target>


</project>


