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

  <property name="pig.dir" value="${basedir}/../../.."/>
  <property name="pig.base.dir" value="${basedir}/../../.."/>
  <property name="ivy.dir" location="${pig.base.dir}/ivy" />
  <loadproperties srcfile="${ivy.dir}/libraries.properties"/>

  <property name="piggybank.jar"
	value="${pig.base.dir}/contrib/piggybank/java/piggybank.jar"/>
  <property name="hive.lib.dir"
	value="${pig.base.dir}/build/ivy/lib/Pig"/>

  <condition property="hive.hadoop.shims.version" value="0.23" else="0.20S">
    <equals arg1="${hadoopversion}" arg2="23" />
  </condition>

  <property name="mvnrepo" value="http://repo2.maven.org/maven2"/>

  <!-- Separate property name for udfs' build.xml -->
  <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="python.udf.dir" value="${udf.dir}/python"/>
  <property name="js.udf.dir" value="${udf.dir}/js" />
  <property name="ruby.udf.dir" value="${udf.dir}/ruby" />
  <property name="groovy.udf.dir" value="${udf.dir}/groovy" />
  <property name="cpython.udf.dir" value="${udf.dir}/cpython" />
  <property name="params.dir" value="${basedir}/paramfiles"/>
  <property name="e2e.lib.dir" value="${basedir}/lib"/>
  <property name="streaming.dir" value="${basedir}/streaming"/>
  <property name="macro.dir" value="${basedir}/macros"/>

  <property name="tar.name" value="${basedir}/pigtests.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="resource.src" value="${basedir}/resource"/>
  <property name="tool.src" value="${basedir}/tools"/>

  <property name="harness.dir" value="${basedir}/../harness"/>
  <property name="harness.tar" value="${harness.dir}/harness.tar"/>
  <property name="harness.PH_LOCAL" value="."/>
  <property name="harness.PH_OUT" value="."/>
  <property name="harness.PERL5LIB" value="./libexec"/>

  <property name="test.location" value="${basedir}/testdist"/>
  <property name="benchmark.location" value="${test.location}/benchmarks"/>


  <condition property="harness.old.pig" value="">
    <not>  
      <isset property="harness.old.pig"/>
    </not>
  </condition>

  <condition property="HADOOP_PREFIX" value="">
    <not>  
      <isset property="HADOOP_PREFIX"/>
    </not>
  </condition>

  <condition property="HADOOP_COMMON_HOME" value="">
    <not>  
      <isset property="HADOOP_COMMON_HOME"/>
    </not>
  </condition>

  <condition property="HADOOP_HDFS_HOME" value="">
    <not>  
      <isset property="HADOOP_HDFS_HOME"/>
    </not>
  </condition>

  <condition property="HADOOP_MAPRED_HOME" value="">
    <not>  
      <isset property="HADOOP_MAPRED_HOME"/>
    </not>
  </condition>

  <condition property="YARN_CONF_DIR" value="">
    <not>  
      <isset property="YARN_CONF_DIR"/>
    </not>
  </condition>

  <condition property="YARN_HOME" value="">
    <not>  
      <isset property="YARN_HOME"/>
    </not>
  </condition>

  <condition property="OLD_HADOOP_HOME" value="">
    <not>  
      <isset property="OLD_HADOOP_HOME"/>
    </not>
  </condition>

  <condition property="PH_OLD_CLUSTER_CONF" value="">
    <not>  
      <isset property="PH_OLD_CLUSTER_CONF"/>
    </not>
  </condition>

  <condition property="hcat.bin" value="hcat">
    <not>
      <isset property="hcat.bin"/>
    </not>
  </condition>

  <condition property="PH_BENCHMARK_CACHE_PATH" value="">
    <not>  
      <isset property="PH_BENCHMARK_CACHE_PATH"/>
    </not>
  </condition>

  <pathconvert property="tests.suites.all" pathsep=" ">
      <path path="${test.location}/tests/cmdline.conf"/>
      <path path="${test.location}/tests/multiquery.conf"/>
      <path path="${test.location}/tests/negative.conf"/>
      <path path="${test.location}/tests/nightly.conf"/>
      <path path="${test.location}/tests/streaming.conf"/>
      <path path="${test.location}/tests/streaming_local.conf"/>
      <path path="${test.location}/tests/turing_jython.conf"/>
      <path path="${test.location}/tests/bigdata.conf"/>
      <path path="${test.location}/tests/grunt.conf"/>
      <path path="${test.location}/tests/macro.conf"/>
      <path path="${test.location}/tests/orc.conf"/>
      <path path="${test.location}/tests/hcat.conf"/>
      <path path="${test.location}/tests/utf8.conf"/>
  </pathconvert>

  <condition property="tests.suites" value="${tests.suites.all}">
    <not>
      <isset property="tests.suites"/>
    </not>
  </condition>

  <target name="udfs">
    <ant dir="${udf.java.dir}"/>
  </target>

  <!-- Build an archive to use in the tests -->
  <target name="tar" description="Create tar file with pig modules" depends="download-datafu">
    <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}/libexec/python"/>
    <mkdir dir="${tar.dir}/libexec/js"/>
    <mkdir dir="${tar.dir}/libexec/ruby"/>
    <mkdir dir="${tar.dir}/libexec/groovy"/>
    <mkdir dir="${tar.dir}/libexec/cpython"/>
    <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}">
      <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}/resource">
      <fileset dir="${resource.src}"/>
    </copy>

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

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

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

    <copy todir="${tar.dir}/libexec">
      <fileset dir="${streaming.dir}"/>
      <fileset dir="${macro.dir}"/>
    </copy>

    <copy todir="${tar.dir}/libexec/python">
      <fileset dir="${python.udf.dir}"/>
    </copy>

    <copy todir="${tar.dir}/libexec/js">
      <fileset dir="${js.udf.dir}"/>
    </copy>

    <copy todir="${tar.dir}/libexec/ruby">
      <fileset dir="${ruby.udf.dir}"/>
    </copy>

    <copy todir="${tar.dir}/libexec/groovy">
      <fileset dir="${groovy.udf.dir}"/>
    </copy>

    <copy todir="${tar.dir}/libexec/cpython">
      <fileset dir="${cpython.udf.dir}"/>
    </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 harness.cluster.conf to the conf directory of your hadoop installation,harness.hadoop.home to HADOOP_HOME for your Hadoop installation and harness.cluster.bin to the binary executable of your hadoop installation.">
        <condition>
            <not>
                <and>
                <isset property="harness.cluster.conf"/>
                <isset property="harness.hadoop.home"/>
                <isset property="harness.cluster.bin"/>
                </and>
            </not>
        </condition>
    </fail>
  </target>

  <!-- Prep the test area -->
  <target name="init-test" depends="build-harness">
    <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>


  <!-- By default this runs in mapred mode on a cluster.  To run it in local
  mode set -Dharness.exec.mode=local -->

  <target name="test-base" 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=""/>
    <!-- fork (parallelization) factors for e2e tests execution. 
	Defaults are 1, which means *no* parellelization: -->
    <property name="fork.factor.group" value="1"/>
    <property name="fork.factor.conf.file" value="1"/>
    <property name="hadoop.mapred.local.dir" value="/tmp/hadoop/mapred/local"/>
    <property name="e2e.debug" value="false"/>
    <property name="harness.use.python" value="false"/>

    <exec executable="perl" dir="${test.location}" failonerror="true">
      <env key="HARNESS_ROOT" value="."/>
      <env key="HADOOP_VERSION" value="${hadoopversion}"/>
      <env key="PH_LOCAL" value="${harness.PH_LOCAL}"/>
      <env key="PH_OUT" value="${harness.PH_OUT}"/>
      <env key="PH_ROOT" value="."/>
      <env key="PH_PIG" value="${pig.dir}"/>
      <env key="PH_OLDPIG" value="${harness.old.pig}"/>
      <env key="HADOOP_CONF_DIR" value="${harness.cluster.conf}"/>
      <env key="PIG_USE_PYTHON" value="${harness.use.python}"/>
      <env key="PH_CLUSTER_BIN" value="${harness.cluster.bin}"/>
      <env key="PH_PIGGYBANK_JAR" value="${piggybank.jar}"/>
      <env key="PH_HIVE_LIB_DIR" value="${hive.lib.dir}"/>
      <env key="PH_HIVE_VERSION" value="${hive.version}"/>
      <env key="PH_HIVE_SHIMS_VERSION" value="${hive.hadoop.shims.version}"/>
      <env key="HARNESS_CONF" value="${harness.conf.file}"/>
      <env key="HADOOP_HOME" value="${harness.hadoop.home}"/>
      <env key="HADOOP_PREFIX" value="${HADOOP_PREFIX}"/>
      <env key="HADOOP_COMMON_HOME" value="${HADOOP_COMMON_HOME}"/>
      <env key="HADOOP_HDFS_HOME" value="${HADOOP_HDFS_HOME}"/>
      <env key="HADOOP_MAPRED_HOME" value="${HADOOP_MAPRED_HOME}"/>
      <env key="YARN_CONF_DIR" value="${YARN_CONF_DIR}"/>
      <env key="YARN_HOME" value="${YARN_HOME}"/>
      <env key="OLD_HADOOP_HOME" value="${OLD_HADOOP_HOME}"/>
      <env key="PH_OLD_CLUSTER_CONF" value="${PH_OLD_CLUSTER_CONF}"/>
      <env key="PH_BENCHMARK_CACHE_PATH" value="${PH_BENCHMARK_CACHE_PATH}"/>
      <env key="HCAT_BIN" value="${hcat.bin}"/>
      <env key="PERL5LIB" value="${harness.PERL5LIB}"/>
      <env key="FORK_FACTOR_GROUP" value="${fork.factor.group}"/>
      <env key="FORK_FACTOR_FILE" value="${fork.factor.conf.file}"/>
      <env key="HADOOP_MAPRED_LOCAL_DIR" value="${hadoop.mapred.local.dir}"/>
      <env key="E2E_DEBUG" value="${e2e.debug}"/>
      <env key="SORT_BENCHMARKS" value="${sort.benchmarks}"/>

      <arg value="./test_harness.pl"/>
      <arg line="${tests.to.run} ${tests.suites}"/>
    </exec>
  </target>

  <target name="test">
    <antcall target="test-base">
      <param name="harness.conf.file" value="${basedir}/conf/default.conf"/>
    </antcall>
  </target>

  <target name="test-local">
    <antcall target="test-base">
      <param name="harness.conf.file" value="${basedir}/conf/local.conf"/>
    </antcall>
  </target>

  <target name="test-tez">
    <antcall target="test-base">
      <param name="harness.conf.file" value="${basedir}/conf/tez.conf"/>
    </antcall>
  </target>

  <target name="deploy-base" depends="property-check, tar, init-test">
    <exec executable="perl" dir="${test.location}" failonerror="true">
      <env key="HARNESS_ROOT" value="."/>
      <env key="PH_LOCAL" value="${harness.PH_LOCAL}"/>
      <env key="PH_OUT" value="${harness.PH_OUT}"/>
      <env key="PH_ROOT" value="."/>
      <env key="PH_PIG" value="${pig.dir}"/>
      <env key="PH_OLDPIG" value="${harness.old.pig}"/>
      <env key="HADOOP_CONF_DIR" value="${harness.cluster.conf}"/>
      <env key="PH_CLUSTER_BIN" value="${harness.cluster.bin}"/>
      <env key="HARNESS_CONF" value="${harness.conf.file}"/>
      <env key="HADOOP_HOME" value="${harness.hadoop.home}"/>

      <arg value="./test_harness.pl"/>
      <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"/>
      <arg value="${test.location}/tests/nightly.conf"/>
    </exec>
  </target>

  <target name="deploy">
    <antcall target="deploy-base">
      <param name="deploy.opt" value="-deploy"/>
      <param name="deploy.conf"
        value="${test.location}/conf/existing_deployer.conf"/>
      <param name="harness.conf.file" value="${basedir}/conf/default.conf"/>
    </antcall>
  </target>

  <target name="undeploy">
    <antcall target="deploy-base">
      <param name="deploy.opt" value="-undeploy"/>
      <param name="deploy.conf"
        value="${test.location}/conf/existing_deployer.conf"/>
      <param name="harness.conf.file" value="${basedir}/conf/default.conf"/>
    </antcall>
  </target>

  <target name="deploy-local">
    <antcall target="deploy-base">
      <param name="deploy.opt" value="-deploy"/>
      <param name="deploy.conf"
        value="${test.location}/conf/local_deployer.conf"/>
      <param name="harness.conf.file" value="${basedir}/conf/local.conf"/>
    </antcall>
  </target>

  <target name="undeploy-local">
    <antcall target="deploy-base">
      <param name="deploy.opt" value="-undeploy"/>
      <param name="deploy.conf"
        value="${test.location}/conf/local_deployer.conf"/>
      <param name="harness.conf.file" value="${basedir}/conf/local.conf"/>
    </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>

  <target name="download-datafu" description="To download datafu" unless="offline">
    <mkdir dir="lib/java"/>
    <get src="${mvnrepo}/com/linkedin/datafu/datafu/1.2.0/datafu-1.2.0.jar"
        dest="lib/java/datafu.jar"/>
  </target>

</project>


