# 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";

$ENV{'HCAT_HOME'} = "/usr/lib/hcatalog";
$ENV{'HADOOP_HOME'} = "/usr/lib/hadoop";
$ENV{'HIVE_HOME'} = "/usr/lib/hive";
$ENV{'HBASE_HOME'} = "/usr/lib/hbase";
$ENV{'PIG_HOME'} = "/usr/lib/pig";

$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_HOME'}/share/hcatalog"
    , 'hcatlib'           => "$ENV{'HCAT_HOME'}/lib"
    , 'hcatconf'          => "$ENV{'HCAT_HOME'}/conf"
    , 'hcatbin'          => "$ENV{'HCAT_HOME'}/bin/hcat"
    , 'hcatcoredevlib'    => "../../../../../core/build/lib/test"

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

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

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

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

};
