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

<!-- Values used when running unit tests.  This is mostly empty, to -->
<!-- use of the default values, overriding the potentially -->
<!-- user-editted core-site.xml in the conf/ directory.  -->

<configuration>


<property>
  <name>hadoop.tmp.dir</name>
  <value>build/test</value>
  <description>A base for other temporary directories.</description>
  <final>true</final>
</property>

<property>
  <name>test.fs.s3.name</name>
  <value>s3:///</value>
  <description>The name of the s3 file system for testing.</description>
</property>

<property>
  <name>fs.s3.block.size</name>
  <value>128</value>
  <description>Size of a block in bytes.</description>
</property>

<property>
  <name>fs.ftp.user.localhost</name>
  <value>user</value>
  <description>The username for connecting to FTP server running on localhost. 
  This is required by FTPFileSystem</description>
</property>

<property>
  <name>fs.ftp.password.localhost</name>
  <value>password</value>
  <description>The password for connecting to FTP server running on localhost.
   This is required by FTPFileSystem</description>
</property>

<property>
  <name>test.fs.s3n.name</name>
  <value>s3n:///</value>
  <description>The name of the s3n file system for testing.</description>
</property>

<!-- Turn security off for tests by default -->
<property>
  <name>hadoop.security.authentication</name>
  <value>simple</value>
</property>

</configuration>
