
cvmfs_test_name="Extended attributes"
cvmfs_test_autofs_on_startup=false

# Requires aufs ready for extended attributes

verify_xattrs() {
  local attr1=$(attr -qg foo /cvmfs/$CVMFS_TEST_REPO/xattr)
  local attr2=$(attr -qg foo2 /cvmfs/$CVMFS_TEST_REPO/dir/xattr)
  local cap=$(getcap /cvmfs/$CVMFS_TEST_REPO/dir/capabilities)
  if [ "x$attr1" != "xbar" ]; then
    return 20
  fi
  if [ "x$attr2" != "xbar2" ]; then
    return 21
  fi
  if [ "x$cap" != "x/cvmfs/$CVMFS_TEST_REPO/dir/capabilities = cap_chown+ep" ]; then
    return 22
  fi
  return 0
}

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

  echo "create a fresh repository named $CVMFS_TEST_REPO with user $CVMFS_TEST_USER"
  create_empty_repo $CVMFS_TEST_REPO $CVMFS_TEST_USER || return $?
  sudo sh -c "echo CVMFS_INCLUDE_XATTRS=true >> /etc/cvmfs/repositories.d/${CVMFS_TEST_REPO}/server.conf"

  echo "create extended attributes"
  start_transaction $CVMFS_TEST_REPO || return $?
  touch /cvmfs/$CVMFS_TEST_REPO/xattr
  mkdir /cvmfs/$CVMFS_TEST_REPO/dir
  touch /cvmfs/$CVMFS_TEST_REPO/dir/xattr
  touch /cvmfs/$CVMFS_TEST_REPO/dir/capabilities

  attr -s foo -V bar /cvmfs/$CVMFS_TEST_REPO/xattr || return 10
  attr -s foo2 -V bar2 /cvmfs/$CVMFS_TEST_REPO/dir/xattr || return 11
  sudo setcap "cap_chown=p cap_chown+e" /cvmfs/$CVMFS_TEST_REPO/dir/capabilities || return 12

  echo "creating CVMFS snapshot"
  publish_repo $CVMFS_TEST_REPO || return $?

  verify_xattrs
  local verify_result=$?
  if [ $verify_result -ne 0 ]; then
    return $verify_result
  fi
  echo "check catalog and data integrity"
  check_repository $CVMFS_TEST_REPO -i || return $?
  
  echo "Split catalogs and create a nested catalog having files with xattrs"
  start_transaction $CVMFS_TEST_REPO || return $?
  touch /cvmfs/$CVMFS_TEST_REPO/dir/.cvmfscatalog
  publish_repo $CVMFS_TEST_REPO || return $?
  verify_xattrs
  local verify_result=$?
  if [ $verify_result -ne 0 ]; then
    return $verify_result
  fi
  echo "check catalog and data integrity"
  check_repository $CVMFS_TEST_REPO -i || return $?
  
  echo "Merge the catalogs back"
  start_transaction $CVMFS_TEST_REPO || return $?
  rm -f /cvmfs/$CVMFS_TEST_REPO/dir/.cvmfscatalog
  publish_repo $CVMFS_TEST_REPO || return $?
  verify_xattrs
  local verify_result=$?
  if [ $verify_result -ne 0 ]; then
    return $verify_result
  fi
  echo "check catalog and data integrity"
  check_repository $CVMFS_TEST_REPO -i || return $?

  return 0
}

