#!/bin/bash

cvmfs_test_name="Pre-mounted startup"
cvmfs_test_suites="quick"

CVMFS_TEST084_MOUNTPOINT=
CVMFS_TEST084_FUSEPREMOUNT=

cleanup() {
  echo "*** cleanup "
  if [ x"$CVMFS_TEST084_MOUNTPOINT" != "x" ]; then
    sudo umount $CVMFS_TEST084_MOUNTPOINT
    rmdir $CVMFS_TEST084_MOUNTPOINT
    echo "  *** unmounted $CVMFS_TEST084_MOUNTPOINT"
  fi
  trap '' HUP EXIT TERM INT
}

cvmfs_run_test() {
  local logfile=$1
  local sourcedir="$2"
  workdir="$PWD"

  echo "*** creating fuse-premount"
  cc -o $workdir/fuse_premount "$sourcedir/fuse_premount.c" || return 1
  CVMFS_TEST084_FUSEPREMOUNT=$workdir/fuse_premount
  sudo chown root:root $CVMFS_TEST084_FUSEPREMOUNT || return 3
  sudo chmod 4755 $CVMFS_TEST084_FUSEPREMOUNT || return 4
  echo -n "   "
  ls -lah $CVMFS_TEST084_FUSEPREMOUNT
  trap cleanup HUP EXIT TERM INT || return 5

  local cache="$workdir/cache"
  CVMFS_TEST084_CACHEDIR=$cache
  mkdir $cache
  cat > sft.config << EOF
CVMFS_SERVER_URL=http://cvmfs-stratum-one.cern.ch/cvmfs/sft.cern.ch
CVMFS_HTTP_PROXY=DIRECT
CVMFS_RELOAD_SOCKETS=$cache
CVMFS_CACHE_BASE=$cache
CVMFS_SHARED_CACHE=no
CVMFS_CLAIM_OWNERSHIP=yes
CVMFS_KEYS_DIR=/etc/cvmfs/keys/cern.ch
EOF

  CVMFS_TEST084_MOUNTPOINT="$workdir/mountpoint"
  echo "*** mounting on $CVMFS_TEST084_MOUNTPOINT"
  mkdir $CVMFS_TEST084_MOUNTPOINT
  $CVMFS_TEST084_FUSEPREMOUNT /usr/bin/cvmfs2 -o debug,libfuse=3,config=sft.config sft.cern.ch $CVMFS_TEST084_MOUNTPOINT &> $workdir/cvm-test-084-mount.log || return 10
  echo "*** listing repository mounted at $CVMFS_TEST084_MOUNTPOINT"
  ls -lah "$CVMFS_TEST084_MOUNTPOINT" > $workdir/cvm-test-084-repo-listing.log  || return 12
  echo "*** checking dirtab in  $CVMFS_TEST084_MOUNTPOINT"
  cat "$CVMFS_TEST084_MOUNTPOINT/.cvmfsdirtab" > $workdir/cvm-test-084-repo-dirtab.log || return 13

  echo "*** finished successfully!"
  cleanup
  return 0
}

