<!--
  ~ 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.
  -->

<configuration>

<!--
case sensitivity and permission options are determined at run time from OS type
-->

  <property>
    <name>fs.contract.is-case-sensitive</name>
    <value>true</value>
  </property>


  <property>
    <name>fs.contract.supports-unix-permissions</name>
    <value>true</value>
  </property>

  <!--
  The remaining options are static
  -->

  <property>
    <name>fs.contract.test.root-tests-enabled</name>
    <value>false</value>
  </property>

  <property>
    <name>fs.contract.test.random-seek-count</name>
    <value>1000</value>
  </property>

  <property>
    <name>fs.contract.rename-creates-dest-dirs</name>
    <value>true</value>
  </property>

  <property>
    <name>fs.contract.rename-overwrites-dest</name>
    <value>true</value>
  </property>

  <property>
    <name>fs.contract.rename-remove-dest-if-empty-dir</name>
    <value>true</value>
  </property>

  <!--
  checksummed filesystems do not support append; see HADOOP-4292
  -->
  <property>
    <name>fs.contract.supports-append</name>
    <value>false</value>
  </property>

  <property>
    <name>fs.contract.supports-atomic-directory-delete</name>
    <value>true</value>
  </property>

  <property>
    <name>fs.contract.supports-atomic-rename</name>
    <value>true</value>
  </property>

  <property>
    <name>fs.contract.supports-block-locality</name>
    <value>false</value>
  </property>

  <property>
    <name>fs.contract.supports-concat</name>
    <value>false</value>
  </property>

  <property>
    <name>fs.contract.supports-seek</name>
    <value>true</value>
  </property>

  <property>
    <name>fs.contract.supports-seek-on-closed-file</name>
    <value>true</value>
  </property>

  <!-- checksum FS doesn't allow seeking past EOF -->
  <property>
    <name>fs.contract.rejects-seek-past-eof</name>
    <value>true</value>
  </property>

  <property>
    <name>fs.contract.supports-strict-exceptions</name>
    <value>false</value>
  </property>

  <property>
    <name>fs.contract.supports-settimes</name>
    <value>true</value>
  </property>

  <property>
    <name>fs.contract.supports-getfilestatus</name>
    <value>true</value>
  </property>

</configuration>
