#!/bin/bash

cvmfs_test_name="HTTP Server Unreachable"
cvmfs_test_suites="quick"

do_faulty_mount() {
  cvmfs_mount "atlas.cern.ch"          \
              "CVMFS_TIMEOUT=3"        \
              "CVMFS_TIMEOUT_DIRECT=3" \
              "CVMFS_HTTP_PROXY=DIRECT"
}

cvmfs_run_test() {
  logfile=$1
  local scratch_dir=$(pwd)
  local retcode=0
  local seconds=100

  echo "restarting autofs"
  autofs_switch off || return 10
  autofs_switch on  || return 11

  echo "configure cvmfs with a number of unreachable hosts"
  sudo sh -c "echo \"CVMFS_SERVER_URL=\\\"http://127.0.0.1:80;http://127.0.0.2:8080;http://cvmfs-stratum-one.cern.ch/opt/@org@\\\"\" > /etc/cvmfs/domain.d/cern.ch.local" || return 1

  echo "try to mount cvmfs"
  local milliseconds=$(stop_watch do_faulty_mount)
  sudo rm -f /etc/cvmfs/domain.d/cern.ch.local

  echo "try to list the repository"
  ls /cvmfs/atlas.cern.ch || return 2

  local expected_max=8000
  if [ $milliseconds -gt $expected_max ]; then
    echo "mounting took too long with $milliseconds seconds (expected $expected_max)"
    CVMFS_TIME_WARNING_FLAG=1
  fi

  echo "checking host chain"
  sudo cvmfs_talk -i atlas.cern.ch host probe || return 3
  sudo cvmfs_talk -i atlas.cern.ch host info | grep 127.0.0.1 | grep -q "host down"
  local h1=$?
  sudo cvmfs_talk -i atlas.cern.ch host info | grep 127.0.0.2 | grep -q "host down"
  local h2=$?
  sudo cvmfs_talk -i atlas.cern.ch host info
  [ $h1 -eq 0 ] && [ $h2 -eq 0 ] || return 4
}
