############################################################################           
#  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`;
$me =~ s/[^a-zA-Z0-9]*//g;

# 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_ROOT           Root directory where test harness is installed
# PH_LOCAL    	    Root directory for input and output for local mode tests
# PH_OUT       	    Root directory where output data will be stored (on local disk, not HDFS)
# PH_CLUSTER_BIN    Conf directory for cluster being used
# HADOOP_CONF_DIR   Binary executable for cluster being used
# PH_PIG      	    Root directory for Pig version being used

my $hdfsBase = $ENV{PH_HDFS_BASE} || "/user/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"
    , 'benchmarkcachepath'=> "$ENV{PH_BENCHMARK_CACHE_PATH}" 

    #TEST
    , 'benchmarkPath'    => "$ENV{PH_OUT}/benchmarks"
    , 'scriptPath'       => "$ENV{PH_ROOT}/libexec"
    , 'tmpPath'          => 'tmp/pigtest'

    #PIG
    , 'testconfigpath'   => "$ENV{HADOOP_CONF_DIR}"
    , 'funcjarPath'      => "$ENV{PH_ROOT}/lib/java"
    , 'piggybankjarPath' => "/usr/lib/pig/lib/piggybank.jar"
    , 'paramPath'        => "$ENV{PH_ROOT}/paramfiles"
    , 'pigpath'          => "/usr"
    , 'oldpigpath'       => "$ENV{PH_OLDPIG}"
    , 'hcatbin'          => "$ENV{HCAT_BIN}"
    , 'exectype'         => 'mapred'

    #HADOOP
    , 'mapredjars'       => "$ENV{PH_ROOT}/lib"


    , 'userhomePath' => "$ENV{HOME}"
    ,'local.bin'     => '/usr/bin'
 
    ,'logDir'                => "$ENV{PH_OUT}/log" 
    ,'propertiesFile'     => "./conf/testpropertiesfile.conf"
    ,'harness.console.level' => 'ERROR'
    ,'hadoopversion' => "$ENV{HADOOP_VERSION}"

};
