#!/bin/bash
cvmfs_test_name="Statfs"
cvmfs_test_autofs_on_startup=false
cvmfs_test_suites="quick"

source ./src/097-statfs/setup_teardown

TEST097_REPO=lhcb.cern.ch
TEST097_MOUNTPOINT=/cvmfs/lhcb.cern.ch

fillCache() {
  echo "   fill cache for $TEST097_MOUNTPOINT"
  cat $TEST097_MOUNTPOINT/lib/*.sh > /dev/null
}

get_cachesize() {
  echo `df | grep "$TEST097_MOUNTPOINT" | awk -F" " '{print $3}'`
}

check_no_parameter_set() {
  echo "*** Testing: Parameter CVMFS_STATFS_CACHE_TIMEOUT not set"
  echo "    wipe cache"
  test097_mount $TEST097_REPO ""
  sudo cvmfs_config wipecache > /dev/null
  echo "   found in config file: `sudo cvmfs_talk parameters | grep "STATFS"`"
  local origSize=$(get_cachesize)
  fillCache
  local newSize=$(get_cachesize)
  

  echo "   should not be equal: $origSize and $newSize"

  [ "$origSize" -ne "$newSize" ] || return 11

  local cachedCounter=$(sudo cvmfs_talk -i $TEST097_REPO internal affairs | grep "statfs_cached" | awk -F"|" '{print $2}')

  [ "$cachedCounter" -eq "0" ] || return 12

  test097_unmount $TEST097_REPO
  echo "   ... Success"
}

check_parameter_0sec() {
  echo "*** Testing: Parameter CVMFS_STATFS_CACHE_TIMEOUT=0"
  echo "    wipe cache"
  test097_mount $TEST097_REPO "CVMFS_STATFS_CACHE_TIMEOUT=0"
  sudo cvmfs_config wipecache > /dev/null
  echo "   found in config file: `sudo cvmfs_talk parameters | grep "STATFS"`"
  local origSize=$(get_cachesize)
  fillCache
  local newSize=$(get_cachesize)
  

  echo "   should not be equal: $origSize and $newSize"

  [ $origSize -ne $newSize ] || return 31

  local cachedCounter=$(sudo cvmfs_talk -i $TEST097_REPO internal affairs | grep "statfs_cached" | awk -F"|" '{print $2}')

  [ "$cachedCounter" -eq "0" ] || return 32

  test097_unmount $TEST097_REPO
  echo "   ... Success"
}

check_parameter_10sec() {
  echo "*** Testing: Parameter CVMFS_STATFS_CACHE_TIMEOUT=10"
  echo "    wipe cache"
  test097_mount $TEST097_REPO "CVMFS_STATFS_CACHE_TIMEOUT=10"
  sudo cvmfs_config wipecache > /dev/null
  echo "   found in config file: `sudo cvmfs_talk parameters | grep "STATFS"`"
  SECONDS=0
  local origSize=$(get_cachesize)
  fillCache
  local newSize=$(get_cachesize)

  duration=$SECONDS

  if ((duration < 10)); then
      echo "   should be equal: $origSize and $newSize"
      [ $origSize -eq $newSize ] || return 21
  else
     echo "   should have been equal: $origSize and $newSize"
     echo "WARN: but could  not check within 10 sec, fillCache took $SECONDS seconds"
  fi



  sleep 3
  local newSize1=$(get_cachesize)

  duration=$SECONDS

  if ((duration < 10)); then
      echo "   should be equal: $origSize and $newSize1"
      [ $origSize -eq $newSize1 ] || return 22

      local cachedCounter=$(sudo cvmfs_talk -i $TEST097_REPO internal affairs | grep "statfs_cached" | awk -F"|" '{print $2}')

      [ "$cachedCounter" -ne "0" ] || return 23
  else
     echo "   should have been equal: $origSize and $newSize"
     echo "WARN: but could  not check within 10 sec, fillCache took $SECONDS seconds"
  fi


  sleep 8
  local newSize2=$(get_cachesize)
  

  echo "   should not be equal: $origSize and $newSize2"

  [ $origSize -ne $newSize2 ] || return 24

  test097_unmount $TEST097_REPO
  echo "   ... Success"
}

cvmfs_run_test() {
  logfile=$1

  check_no_parameter_set || return $?
  check_parameter_10sec || return $?
  check_parameter_0sec || return $?
  
  return 0
}
