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


