/*
 * 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.
 */

package org.apache.hadoop.fs.contract;

/**
 * Options for contract tests: keys for FS-specific values,
 * defaults.
 */
public interface ContractOptions {


  /**
   * name of the (optional) resource containing filesystem binding keys : {@value}
   * If found, it it will be loaded
   */
  String CONTRACT_OPTIONS_RESOURCE = "contract-test-options.xml";

  /**
   * Prefix for all contract keys in the configuration files
   */
  String FS_CONTRACT_KEY = "fs.contract.";

  /**
   * Flag to indicate that a newly created file may overwrite a pre-existing
   * directory.
   * {@value}
   */
  String CREATE_OVERWRITES_DIRECTORY = "create-overwrites-directory";

  /**
   * Flag to indicate that a newly created file is not made visible in the
   * namespace immediately.  Instead, the file becomes visible at a later point
   * in the file creation lifecycle, such as when the client closes it.
   * {@value}
   */
  String CREATE_VISIBILITY_DELAYED = "create-visibility-delayed";

  /**
   * Is a filesystem case sensitive.
   * Some of the filesystems that say "no" here may mean
   * that it varies from platform to platform -the localfs being the key
   * example.
   * {@value}
   */
  String IS_CASE_SENSITIVE = "is-case-sensitive";

  /**
   * Blobstore flag. Implies it's not a real directory tree and
   * consistency is below that which Hadoop expects
   * {@value}
   */
  String IS_BLOBSTORE = "is-blobstore";

  /**
   * Flag to indicate that the FS can rename into directories that
   * don't exist, creating them as needed.
   * {@value}
   */
  String RENAME_CREATES_DEST_DIRS = "rename-creates-dest-dirs";

  /**
   * Flag to indicate that the FS does not follow the rename contract -and
   * instead only returns false on a failure.
   * {@value}
   */
  String RENAME_OVERWRITES_DEST = "rename-overwrites-dest";

  /**
   * Flag to indicate that the FS returns false if the destination exists
   * {@value}
   */
  String RENAME_RETURNS_FALSE_IF_DEST_EXISTS =
      "rename-returns-false-if-dest-exists";

  /**
   * Flag to indicate that the FS returns false on a rename
   * if the source is missing
   * {@value}
   */
  String RENAME_RETURNS_FALSE_IF_SOURCE_MISSING =
      "rename-returns-false-if-source-missing";

  /**
   * Flag to indicate that the FS remove dest first if it is an empty directory
   * mean the FS honors POSIX rename behavior.
   * {@value}
   */
  String RENAME_REMOVE_DEST_IF_EMPTY_DIR = "rename-remove-dest-if-empty-dir";

  /**
   * Flag to indicate that append is supported
   * {@value}
   */
  String SUPPORTS_APPEND = "supports-append";

  /**
   * Flag to indicate that setTimes is supported.
   * {@value}
   */
  String SUPPORTS_SETTIMES = "supports-settimes";

  /**
   * Flag to indicate that getFileStatus is supported.
   * {@value}
   */
  String SUPPORTS_GETFILESTATUS = "supports-getfilestatus";

  /**
   * Flag to indicate that renames are atomic
   * {@value}
   */
  String SUPPORTS_ATOMIC_RENAME = "supports-atomic-rename";

  /**
   * Flag to indicate that directory deletes are atomic
   * {@value}
   */
  String SUPPORTS_ATOMIC_DIRECTORY_DELETE = "supports-atomic-directory-delete";

  /**
   * Does the FS support multiple block locations?
   * {@value}
   */
  String SUPPORTS_BLOCK_LOCALITY = "supports-block-locality";

  /**
   * Does the FS support the concat() operation?
   * {@value}
   */
  String SUPPORTS_CONCAT = "supports-concat";

  /**
   * Is seeking supported at all?
   * {@value}
   */
  String SUPPORTS_SEEK = "supports-seek";

  /**
   * Is seeking past the EOF allowed?
   * {@value}
   */
  String REJECTS_SEEK_PAST_EOF = "rejects-seek-past-eof";

  /**
   * Is seeking on a closed file supported? Some filesystems only raise an
   * exception later, when trying to read.
   * {@value}
   */
  String SUPPORTS_SEEK_ON_CLOSED_FILE = "supports-seek-on-closed-file";

  /**
   * Is available() on a closed InputStream supported?
   * {@value}
   */
  String SUPPORTS_AVAILABLE_ON_CLOSED_FILE = "supports-available-on-closed-file";

  /**
   * Flag to indicate that this FS expects to throw the strictest
   * exceptions it can, not generic IOEs, which, if returned,
   * must be rejected.
   * {@value}
   */
  String SUPPORTS_STRICT_EXCEPTIONS = "supports-strict-exceptions";

  /**
   * Are unix permissions
   * {@value}
   */
  String SUPPORTS_UNIX_PERMISSIONS = "supports-unix-permissions";

  /**
   * Is positioned readable supported? Supporting seek should be sufficient
   * for this.
   * {@value}
   */
  String SUPPORTS_POSITIONED_READABLE = "supports-positioned-readable";

  /**
   * Maximum path length
   * {@value}
   */
  String MAX_PATH_ = "max-path";

  /**
   * Maximum filesize: 0 or -1 for no limit
   * {@value}
   */
  String MAX_FILESIZE = "max-filesize";

  /**
   * Flag to indicate that tests on the root directories of a filesystem/
   * object store are permitted
   * {@value}
   */
  String TEST_ROOT_TESTS_ENABLED = "test.root-tests-enabled";

  /**
   * Limit for #of random seeks to perform.
   * Keep low for remote filesystems for faster tests
   * {@value}
   */
  String TEST_RANDOM_SEEK_COUNT = "test.random-seek-count";

}
