#!/bin/bash

cvmfs_test_name="Mount with Broken Public Key Files"
cvmfs_test_suites="quick"

CVMFS_TEST_051_KEYFILE="broken.key.051.pub"
cleanup() {
  echo "deleting broken key file $CVMFS_TEST_051_KEYFILE"
  sudo rm -f /etc/cvmfs/keys/cern.ch/$CVMFS_TEST_051_KEYFILE
}

cvmfs_run_test() {
  logfile=$1

  echo "check that repositories are mounted nicely"
  cvmfs_mount atlas.cern.ch,lhcb.cern.ch     || return 1
  try_automount atlas.cern.ch                || return 2
  try_automount lhcb.cern.ch                 || return 3

  echo "umount all repositories"
  sudo cvmfs_config umount || return 4

  echo "insert a broken public key file"
  cat >> broken.pub << EOF
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0LvAElnF8+PKDpuw7P0d
GD4uF7GP7k3DVuQx0tsZcuWrvtXLYi8m0GAMp4JVuOyoIxMN+H8772wE1rTXi90n
TWyrBgF2JI3Nlrol//IlKSPwxOHsZ5V66sD1YMnLS8wXmZD1SJ4L4CdxKC+o4kdk
NoKW+8+REA9ZE/4Yjqal/1gcv0v6tjKIdiCPdCiFMZfsdR4Ez8c/bplHdf/1EAfa
iOttZFq7IOnz+8lzobp6wcBQDqKDnPyyekd9a3gWRSEi65WVHDcUOl1UPAKQ7rm5
E9BIWtvaHnRUxQC/g9MYbRU7zAThT+aGZvJTvdpC8GSnBxEIk57aoil+W/Ruaokr
sQIDAQAB
-----END PUBLIC KEY¿¿
EOF
  trap cleanup HUP INT TERM EXIT
  sudo cp broken.pub /etc/cvmfs/keys/cern.ch/$CVMFS_TEST_051_KEYFILE || return 5

  echo "try to remount the repositories (should fail now)"
  cvmfs_mount atlas.cern.ch,lhcb.cern.ch     && return 6
  if ! running_on_osx; then
         try_automount atlas.cern.ch        && return 7
         try_automount lhcb.cern.ch         && return 8
  else
  # TODO(vavolkl): this is a workaround for the return code of mount
  # that can be sometimes incorrect and should be removed when fixed
         mount | grep "$atlas.cern.ch" || sudo mount -t cvmfs atlas.cern.ch /cvmfs/atlas.cern.ch  | grep "failed to load public key" && return 7
         mount | grep "$lhcb.cern.ch" || sudo mount -t cvmfs lhcb.cern.ch /cvmfs/lhcb.cern.ch  | grep "failed to load public key" && return 8
  fi

  echo "removing the broken public key"
  cleanup || return 9
  trap - HUP INT TERM EXIT

  if ! running_on_osx; then
    echo "restart autofs"
    autofs_switch off || return 10
    autofs_switch on  || return 11
  fi

  echo "try to remount the repositories (should work again)"
  cvmfs_mount atlas.cern.ch,lhcb.cern.ch     || return 12
  try_automount atlas.cern.ch                || return 13
  try_automount lhcb.cern.ch                 || return 14

  return 0
}

