#!/bin/bash

cvmfs_test_name="Cache result of proxy auto discovery"

cvmfs_run_test() {
  logfile=$1

  local wpad_file="$(pwd)/wpad"
  cat > $wpad_file << EOF
  function FindProxyForURL(url, host) {
    return "PROXY $CVMFS_TEST_PROXY; PROXY http://no-such-proxy.cern.ch:3128"
  }
EOF
  chmod 666 $wpad_file || return 10

  cvmfs_mount grid.cern.ch || return 11
  cvmfs_umount grid.cern.ch || return 12

  echo "*** auto without network or cached proxy should fail"
  cvmfs_mount grid.cern.ch "CVMFS_HTTP_PROXY=auto" \
    "CVMFS_EXTERNAL_HTTP_PROXY=auto" \
    "CVMFS_PAC_URLS=file:///no/such/file" && return 13

  echo "*** restarting autofs"
  autofs_switch off || return 14
  autofs_switch on  || return 15

  echo "*** 'auto;DIRECT' should always succeed"
  cvmfs_mount grid.cern.ch "CVMFS_HTTP_PROXY='auto;DIRECT'" \
    "CVMFS_EXTERNAL_HTTP_PROXY='auto;DIRECT'" \
    "CVMFS_PAC_URLS=file:///no/such/file" || return 16
  local proxy="$(get_xattr proxy /cvmfs/grid.cern.ch)"
  echo "*** proxy is $proxy"
  if [ x"$proxy" != x"DIRECT" ]; then
    return 17
  fi
  cvmfs_umount grid.cern.ch

  cvmfs_mount grid.cern.ch "CVMFS_HTTP_PROXY=auto" \
    "CVMFS_EXTERNAL_HTTP_PROXY=auto" \
    "CVMFS_PAC_URLS=file://$wpad_file" || return 20
  local proxies="$(sudo cvmfs_talk -i grid.cern.ch proxy info)"
  echo "*** proxies are $proxies"
  if ! echo "$proxies" | grep -q http://no-such-proxy.cern.ch:3128; then
    return 21
  fi
  cvmfs_umount grid.cern.ch

  cvmfs_mount grid.cern.ch "CVMFS_HTTP_PROXY=auto" \
    "CVMFS_EXTERNAL_HTTP_PROXY=auto" \
    "CVMFS_PAC_URLS=file:///no/such/file" || return 30
  proxies="$(sudo cvmfs_talk -i grid.cern.ch proxy info)"
  echo "*** proxies are $proxies"
  if ! echo "$proxies" | grep -q http://no-such-proxy.cern.ch:3128; then
    return 31
  fi
  cvmfs_umount grid.cern.ch

  echo "*** changing proxy settings"
  cat > $wpad_file << EOF
  function FindProxyForURL(url, host) {
    return "PROXY $CVMFS_TEST_PROXY; PROXY http://no-such-other-proxy.cern.ch:3128"
  }
EOF
  cvmfs_mount grid.cern.ch "CVMFS_HTTP_PROXY=auto" \
    "CVMFS_EXTERNAL_HTTP_PROXY=auto" \
    "CVMFS_PAC_URLS=file://$wpad_file" || return 40
  local proxies="$(sudo cvmfs_talk -i grid.cern.ch proxy info)"
  echo "*** proxies are $proxies"
  if ! echo "$proxies" | grep -q http://no-such-other-proxy.cern.ch:3128; then
    return 41
  fi
  cvmfs_umount grid.cern.ch

  cvmfs_mount grid.cern.ch "CVMFS_HTTP_PROXY=auto" \
    "CVMFS_EXTERNAL_HTTP_PROXY=auto" \
    "CVMFS_PAC_URLS=file:///no/such/file" || return 50
  proxies="$(sudo cvmfs_talk -i grid.cern.ch proxy info)"
  echo "*** proxies are $proxies"
  if ! echo "$proxies" | grep -q http://no-such-other-proxy.cern.ch:3128; then
    return 51
  fi

  return 0
}

