#!/bin/bash
cvmfs_test_name="Apply timestamp threshold to replication of gc-enabled repos"
cvmfs_test_autofs_on_startup=false

CVMFS_TEST640_REPLICA_NAME=

cleanup() {
  sudo cvmfs_server rmfs -f $CVMFS_TEST640_REPLICA_NAME > /dev/null 2>&1
}

cvmfs_run_test() {
  logfile=$1
  local repo_dir=/cvmfs/$CVMFS_TEST_REPO
  CVMFS_TEST640_REPLICA_NAME="$(get_stratum1_name $CVMFS_TEST_REPO)"

  echo "*** create a gc-enabled repository named $CVMFS_TEST_REPO with user $CVMFS_TEST_USER"
  create_empty_repo $CVMFS_TEST_REPO $CVMFS_TEST_USER NO -z -g || return $?
  start_transaction $CVMFS_TEST_REPO
  mkdir /cvmfs/$CVMFS_TEST_REPO/nested
  touch /cvmfs/$CVMFS_TEST_REPO/nested/.cvmfscatalog
  publish_repo $CVMFS_TEST_REPO

  echo "*** setup cleanup trap"
  trap cleanup EXIT HUP INT TERM

  echo "*** create Stratum1 repository on the same machine"
  load_repo_config $CVMFS_TEST_REPO
  create_stratum1 $CVMFS_TEST640_REPLICA_NAME            \
                  $CVMFS_TEST_USER                       \
                  $CVMFS_STRATUM0                        \
                  /etc/cvmfs/keys/${CVMFS_TEST_REPO}.pub \
    || return 10

  echo "*** Set GC threshold to 'next week'"
  echo "CVMFS_AUTO_GC_TIMESPAN='next week'" | sudo tee -a \
    /etc/cvmfs/repositories.d/$CVMFS_TEST640_REPLICA_NAME/server.conf || return 11

  echo "*** create a Snapshot of the Stratum0 repository in the just created Stratum1 replica"
  sudo cvmfs_server snapshot $CVMFS_TEST640_REPLICA_NAME || return 20
  check_repository $CVMFS_TEST640_REPLICA_NAME -i || return 21

  echo "*** publish three times on stratum 0"
  start_transaction $CVMFS_TEST_REPO
  publish_repo $CVMFS_TEST_REPO
  local hidden_hash=$(get_xattr root_hash /var/spool/cvmfs/$CVMFS_TEST_REPO/rdonly)
  start_transaction $CVMFS_TEST_REPO
  publish_repo $CVMFS_TEST_REPO -a "abc"
  start_transaction $CVMFS_TEST_REPO
  publish_repo $CVMFS_TEST_REPO
  echo "*** hidden root hash is $hidden_hash"

  echo "*** snapshot again"
  sudo cvmfs_server snapshot $CVMFS_TEST640_REPLICA_NAME || return 30
  check_repository $CVMFS_TEST640_REPLICA_NAME -i || return 31
  check_repository $CVMFS_TEST640_REPLICA_NAME -i -t abc || return 32

  echo "*** ensure that hidden hash got pruned"
  peek_backend $CVMFS_TEST640_REPLICA_NAME "${hidden_hash}C" && return 40

  return 0
}

