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

my $me = `whoami`;
chomp $me;

# The contents of this file can be rewritten to fit your installation.
# Also, you can define the following environment variables and set things up as in the test setup
# PH_CLUSTER  Root directory for cluster being used
# HCAT_ROOT   Root directory for hcat version being used

my $hdfsBase = $ENV{'PH_HDFS_BASE'} || "/user/hcat";

$cfg = {
    #HDFS
    'inpathbase'     => "$hdfsBase/tests/data"
    , 'outpathbase'    => "$hdfsBase/out"

   #LOCAL
    , 'localinpathbase'   => "$ENV{PH_LOCAL}/in" 
    , 'localoutpathbase'  => "$ENV{PH_LOCAL}/out/log" 
    , 'localxmlpathbase'  => "$ENV{PH_LOCAL}/out/xml" 
    , 'localpathbase'     => "$ENV{PH_LOCAL}/out/pigtest/$me" 

    #TEST
    , 'benchmarkPath'    => "$ENV{HARNESS_ROOT}/benchmarks"
    , 'scriptPath'       => "$ENV{HARNESS_ROOT}/libexec"
    , 'tmpPath'          => "/tmp/pigtest"
    , 'jythonjar'        => "$ENV{PH_JYTHON_JAR}"
    , 'propertiesFile'     => "./conf/testpropertiesfile.conf"
    , 'funcjarPath'      => "$ENV{HARNESS_ROOT}/lib/java"

    #TESTDB
    , 'dbuser'         => "$ENV{'PH_DBUSER'}" || 'hcattest'
    , 'dbhost'         => "$ENV{'PH_DBHOST'}" || 'localhost'
    , 'dbpasswd'       => "$ENV{'PH_DBPASSWD'}" || 'hcattest'
    , 'dbdb'           => "$ENV{'PH_DBDB'}" || 'hcattestdb'

    #HCAT
    , 'hcathome'          => $ENV{'HCAT_HOME'}
    , 'hcatshare'         => $ENV{'HCAT_SHARE_DIR'}
    , 'hcatlib'           => $ENV{'HCAT_LIB_DIR'}
    , 'hcatconf'          => $ENV{'HCAT_CONF_DIR'}
    , 'hcatbin'           => $ENV{'HCAT_CMD'}
    , 'hcatcoredevlib'    => "../../../../../core/build/lib/test"

    #PIG
    , 'pighome'          => $ENV{'PIG_HOME'}
    , 'pigbin'           => "$ENV{'PIG_HOME'}/bin/pig"

    #HADOOP
    , 'hadoopconfdir'    => $ENV{'HADOOP_CONF_DIR'}
    , 'hadoopbin'        => "$ENV{'HADOOP_HOME'}/bin/hadoop"

    #HIVE
    , 'hivehome'          => $ENV{'HIVE_HOME'}
    , 'hivelib'           => "$ENV{'HIVE_HOME'}/lib"
    , 'hivebin'           => $ENV{'HIVE_CMD'}
    , 'hiveconf'          => "$ENV{'HIVE_HOME'}/conf"

    #HBASE
    , 'hbaseconf'         => "$ENV{'HBASE_HOME'}/conf"
    , 'hbaselibdir'       => "$ENV{'HBASE_HOME'}/"
    , 'zklibdir'          => "$ENV{'HBASE_HOME'}/lib"

};
