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

  <!--
    This is S3A's contract with HBOSS guarantees added. Specifically:

      fs.contract.is-blobstore = false
      fs.contract.create-visibility-delayed = false
      fs.contract.supports-atomic-directory-delete = true
      fs.contract.supports-atomic-rename = true

    Note that fs.contract.is-blobstore appears to be identical in meaning to
    fs.contract.create-visibility-delayed.
  -->

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

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

  <property>
    <name>fs.contract.is-blobstore</name>
    <value>false</value>
  </property>

  <property>
    <name>fs.contract.create-visibility-delayed</name>
    <value>false</value>
  </property>

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

  <property>
    <name>fs.contract.rename-returns-false-if-source-missing</name>
    <value>true</value>
  </property>

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

  <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-getfilestatus</name>
    <value>true</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>

  <property>
    <name>fs.contract.rejects-seek-past-eof</name>
    <value>true</value>
  </property>

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

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

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

  <property>
    <name>fs.s3a.change.detection.version.required</name>
    <value>false</value>
  </property>
</configuration>
