<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
   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.
-->
<!--
  Properties set here are picked up in the client.
  They are not passed to the AM
-->
<configuration>
  <property>
    <name>slider.client.resource.origin</name>
    <value>configs/sandbox/slider</value>
    <description>This is just for diagnostics</description>
  </property>

  <property>
    <name>yarn.resourcemanager.address</name>
    <value>sandbox:8050</value>
  </property>
  
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://sandbox.hortonworks.com:8020</value>
  </property>

  <property>
    <name>slider.security.enabled</name>
    <value>false</value>
  </property>

  <property>
    <name>slider.zookeeper.quorum</name>
    <value>sandbox:2181</value>
  </property>

  <property>
    <name>yarn.application.classpath</name>
    <value>
      /etc/hadoop/conf,/usr/lib/hadoop/*,/usr/lib/hadoop/lib/*,/usr/lib/hadoop-hdfs/*,/usr/lib/hadoop-hdfs/lib/*,/usr/lib/hadoop-yarn/*,/usr/lib/hadoop-yarn/lib/*,/usr/lib/hadoop-mapreduce/*,/usr/lib/hadoop-mapreduce/lib/*
    </value>
  </property>

  <property>
    <name>slider.test.agent.enabled</name>
    <description>Flag to enable/disable Agent tests</description>
    <value>false</value>
  </property>


  <property>
    <name>slider.test.hbase.enabled</name>
    <description>Flag to enable/disable HBase tests</description>
    <value>true</value>
  </property>
  
  <property>
    <name>slider.test.hbase.tar</name>
    <description>Path to the HBase Tar file in HDFS</description>
    <value>${fs.defaultFS}/hbase-0.98.1-bin.tar.gz</value>
  </property>


  <property>
    <name>slider.test.hbase.appconf</name>
    <description>Path to the directory containing the HBase application config
    </description>
    <value>file://${slider.test.conf.dir}/../hbase</value>
  </property>

  <property>
    <name>slider.test.accumulo.enabled</name>
    <description>Flag to enable/disable Accumulo tests</description>
    <value>true</value>
  </property>


  <property>
    <name>slider.test.accumulo.tar</name>
    <description>Path to the Accumulo Tar file in HDFS</description>
    <value>${fs.defaultFS}/user/slider/accumulo.tar</value>
  </property>


  <property>
    <name>slider.test.am.restart.time</name>
    <description>Time in millis to await an AM restart</description>
    <value>60000</value>
  </property>


  <property>
    <name>slider.test.accumulo.appconf</name>
    <description>Path to the directory containing the Accumulo application
      config
    </description>
    <value>file:///home/slider/projects/Projects/slider/test-configs/sandbox/accumulo</value>
  </property>


  <property>
    <name>zk.home</name>
    <value>/usr/lib/zookeeper</value>
    <description>Zookeeper home dir on target systems</description>
  </property>

  <property>
    <name>hadoop.home</name>
    <value>/usr/lib/hadoop</value>
    <description>Hadoop home dir on target systems</description>
  </property>

</configuration>
