<!--
   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="TestHarnessHCatTests" default="test">

    <property name="hcat.jar"
              value="${hcat.dir}/share/hcatalog/hcatalog-${hcatalog.version}.jar"/>

    <!-- Separate property name for udfs' build.xml -->
    <property name="hcat.jarfile" value="${hcat.jar}"/>
    <property name="udf.dir" value="${basedir}/udfs"/>
    <property name="udf.java.dir" value="${udf.dir}/java"/>
    <property name="udf.jar" value="${udf.java.dir}/testudf.jar"/>
    <property name="params.dir" value="${basedir}/paramfiles"/>
    <property name="lib.dir" value="${basedir}/lib"/>
    <property name="rctool.java.dir" value="${basedir}/tools/generate/java"/>

    <property name="tar.name" value="${basedir}/hcattests.tar"/>
    <property name="tar.dir" value="${basedir}/tar"/>
    <property name="test.src" value="${basedir}/tests"/>
    <property name="driver.src" value="${basedir}/drivers"/>
    <property name="deployer.src" value="${basedir}/deployers"/>
    <property name="conf.src" value="${basedir}/conf"/>
    <property name="tool.src" value="${basedir}/tools"/>
    <property name="data.dir" value="${basedir}/data"/>

    <property name="harness.dir" value="${basedir}/../harness"/>
    <property name="harness.tar" value="${harness.dir}/harness.tar"/>
    <property name="test.location" value="${basedir}/testdist"/>
    <property name="benchmark.location" value="${test.location}/benchmarks"/>
    <!--<property name="hadoop.core.path" value="${harness.hadoop.home}"/>-->
    <property name="hadoop.core.path" value="${hadoop.home}"/>
    <!-- Override on command line to use rpm.conf -->
    <property name="harness.conf" value="${test.location}/conf/default.conf"/>
    <!-- Default value for output directory -->
    <property name="harness.PH_LOCAL" value="out"/>

    <property name="hadoopversion" value="20"/>

    <condition property="isHadoop23">
        <equals arg1="${hadoopversion}" arg2="23"/>
    </condition>

    <!-- Build the UDFs -->
    <target name="udfs">
        <ant dir="${udf.java.dir}"/>
    </target>

    <path id="hadoop.core.jar.location">
        <fileset dir="${hadoop.core.path}">
            <include name="hadoop-core-*.jar" unless="isHadoop23"/>
            <include name="**/hadoop-common-*.jar" if="isHadoop23"/>
            <include name="**/hadoop-auth-*.jar" if="isHadoop23"/>
            <include name="**/hadoop-hdfs-*.jar" if="isHadoop23"/>
            <include name="**/hadoop-mapreduce-client-core-*.jar" if="isHadoop23"/>
            <include name="**/hadoop-yarn-api-*.jar" if="isHadoop23"/>
            <include name="**/hadoop-yarn-common-*.jar" if="isHadoop23"/>
            <include name="**/hadoop-annotations-*.jar" if="isHadoop23"/>
        </fileset>
    </path>

    <path id="hive.serde.jar.location">
        <!-- <fileset dir="${hive.dir}/build/serde"> -->
        <fileset dir="${hive.home}/lib">
            <include name="hive-serde-*.jar"/>
        </fileset>
    </path>

    <path id="hive.ql.jar.location">
        <!--<fileset dir="${hive.dir}/build/ql"> -->
        <fileset dir="${hive.home}/lib">
            <include name="hive-exec-*.jar"/>
        </fileset>
    </path>

    <!-- Build the RCfile data generator -->
    <target name="rctool" depends="property-check">
        <ant dir="${rctool.java.dir}">
            <property name="hive.serde.jarfile" refid="hive.serde.jar.location"/>
            <property name="hive.ql.jarfile" refid="hive.ql.jar.location"/>
            <property name="hadoop.core.jarfile" refid="hadoop.core.jar.location"/>
        </ant>
    </target>

    <!-- Build an archive to use in the tests -->
    <target name="tar" description="Create tar file with hcat modules">
        <mkdir dir="${tar.dir}"/>
        <mkdir dir="${tar.dir}/tests"/>
        <mkdir dir="${tar.dir}/drivers"/>
        <mkdir dir="${tar.dir}/deployers"/>
        <mkdir dir="${tar.dir}/conf"/>
        <mkdir dir="${tar.dir}/libexec"/>
        <mkdir dir="${tar.dir}/libexec/PigTest"/>
        <mkdir dir="${tar.dir}/libexec/PigTest/test"/>
        <mkdir dir="${tar.dir}/libexec/PigTest/generate"/>
        <mkdir dir="${tar.dir}/lib"/>
        <mkdir dir="${tar.dir}/lib/java"/>
        <mkdir dir="${tar.dir}/paramfiles"/>

        <copy todir="${tar.dir}/tests">
            <fileset dir="${test.src}">
            </fileset>
        </copy>

        <copy todir="${tar.dir}/data">
            <fileset dir="${data.dir}">
            </fileset>
        </copy>


        <copy todir="${tar.dir}">
            <fileset dir="${driver.src}">
                <exclude name="TestDriverScript.pm"/>
            </fileset>
            <fileset dir="${deployer.src}"/>
        </copy>


        <copy todir="${tar.dir}/conf">
            <fileset dir="${conf.src}"/>
        </copy>

        <copy todir="${tar.dir}/libexec/HCatTest">
            <fileset dir="${tool.src}/test"/>
            <fileset dir="${tool.src}/generate"/>
            <fileset dir="${tool.src}/install"/>
        </copy>

        <copy todir="${tar.dir}/lib/java">
            <fileset file="${udf.jar}"/>
        </copy>

        <copy todir="${tar.dir}/paramfiles">
            <fileset file="${params.dir}/params_3"/>
        </copy>

        <tar destfile="${tar.name}" basedir="${tar.dir}"/>
    </target>

    <!-- Get the tarball for the harness -->
    <target name="build-harness">
        <ant dir="${harness.dir}" inheritAll="false"/>
    </target>

    <!-- Check that the necessary properties are setup -->
    <target name="property-check">
        <!--
      <fail message="Please set the property hadoop.home to the location Hadoop is installed "
        unless="hadoop.home"/>
        -->
        <fail message="Please set the property hadoop.home to the location Hadoop is installed ">
            <condition>
                <and>
                    <not>
                        <isset property="hadoop.home"/>
                    </not>
                    <not>
                        <contains string="${harness.conf}" substring="rpm.conf"/>
                    </not>
                </and>
            </condition>
        </fail>
        <fail message="Please set the property harness.cluster.conf to the location Hadoop conf is installed ">
            <condition>
                <and>
                    <not>
                        <isset property="harness.cluster.conf"/>
                    </not>
                    <not>
                        <contains string="${harness.conf}" substring="rpm.conf"/>
                    </not>
                </and>
            </condition>
        </fail>
        <fail message="Please set the property hive.home to the location Hive is installed ">
            <condition>
                <and>
                    <not>
                        <isset property="hive.home"/>
                    </not>
                    <not>
                        <contains string="${harness.conf}" substring="rpm.conf"/>
                    </not>
                </and>
            </condition>
        </fail>
        <fail message="Please set the property hcat.home to the location HCatalog is installed ">
            <condition>
                <and>
                    <not>
                        <isset property="hcat.home"/>
                    </not>
                    <not>
                        <contains string="${harness.conf}" substring="rpm.conf"/>
                    </not>
                </and>
            </condition>
        </fail>
        <fail message="Please set the property pig.home to the location Pig is installed ">
            <condition>
                <and>
                    <not>
                        <isset property="pig.home"/>
                    </not>
                    <not>
                        <contains string="${harness.conf}" substring="rpm.conf"/>
                    </not>
                </and>
            </condition>
        </fail>

        <fail message="Please set the property hbase.home to the location HBase is installed ">
            <condition>
                <and>
                    <not>
                        <isset property="hbase.home"/>
                    </not>
                    <not>
                        <contains string="${harness.conf}" substring="rpm.conf"/>
                    </not>
                </and>
            </condition>
        </fail>
    </target>

    <!-- Prep the test area -->
    <target name="init-test" depends="build-harness, tar">
        <mkdir dir="${test.location}"/>
        <mkdir dir="${benchmark.location}"/>

        <untar src="${tar.name}" dest="${test.location}"/>
        <untar src="${harness.tar}" dest="${test.location}"/>

        <chmod perm="ugo+x" type="file">
            <fileset dir="${test.location}/libexec"/>
            <fileset file="${test.location}/test_harness.pl"/>
        </chmod>

    </target>

    <target name="test" depends="property-check, udfs, tar, init-test">

        <!-- If they have not specified tests to run then null it out -->
        <property name="tests.to.run" value=""/>
        <echo/>
        <exec executable="./test_harness.pl" dir="${test.location}" failonerror="true">
            <env key="HARNESS_ROOT" value="."/>
            <env key="PH_LOCAL" value="${harness.PH_LOCAL}"/>
            <env key="HADOOP_HOME" value="${hadoop.home}"/>
            <env key="HADOOP_CONF_DIR" value="${harness.cluster.conf}"/>
            <env key="HIVE_HOME" value="${hive.home}"/>
            <env key="HCAT_HOME" value="${hcat.home}"/>
            <env key="PIG_HOME" value="${pig.home}"/>
            <env key="HBASE_HOME" value="${hbase.home}"/>
            <arg line="-conf ${harness.conf}"/>
            <arg line="${tests.to.run}"/>
            <arg value="${test.location}/tests/pig.conf"/>
            <arg value="${test.location}/tests/hive.conf"/>
            <arg value="${test.location}/tests/hcat.conf"/>
            <arg value="${test.location}/tests/hadoop.conf"/>
        </exec>
    </target>

    <target name="init-deploy" depends="rctool">
        <!-- For now default to the existing cluster deployer, since
    it's all there is.  Once the local deployer is available that
    should be the default. -->
        <property name="deploy.conf"
                  value="${test.location}/conf/existing_deployer.conf"/>
    </target>

    <target name="deploy-base" depends="property-check, tar, init-test, init-deploy">
        <exec executable="./test_harness.pl" dir="${test.location}"
              failonerror="true">
            <env key="HARNESS_ROOT" value="."/>
            <env key="PH_LOCAL" value="${harness.PH_LOCAL}"/>
            <env key="HADOOP_HOME" value="${hadoop.home}"/>
            <env key="HIVE_HOME" value="${hive.home}"/>
            <env key="HCAT_HOME" value="${hcat.home}"/>
            <env key="PIG_HOME" value="${pig.home}"/>
            <env key="HBASE_HOME" value="${hbase.home}"/>
            <arg line="-conf ${harness.conf}"/>
            <arg value="-deploycfg"/>
            <arg value="${deploy.conf}"/>
            <arg value="${deploy.opt}"/>
            <!-- Give a bogus test so it just does the deployment -->
            <arg value="-t"/>
            <arg value="NoSuchTest"/>
        </exec>
    </target>

    <target name="deploy">
        <antcall target="deploy-base">
            <param name="deploy.opt" value="-deploy"/>
        </antcall>
    </target>

    <target name="undeploy">
        <antcall target="deploy-base">
            <param name="deploy.opt" value="-undeploy"/>
        </antcall>
    </target>

    <target name="deploy-test" depends="deploy, test"/>

    <target name="deploy-test-undeploy" depends="deploy, test, undeploy"/>

    <target name="clean">
        <delete dir="${test.location}"/>
        <delete file="${tar.name}"/>
        <delete dir="${tar.dir}"/>
        <ant dir="${udf.java.dir}" target="clean"/>
    </target>

</project>


