#!/bin/sh
# 20221231

set -e

dir=`dirname "$0"`

# change directory to $AUTOPKGTEST_TMP
cd "${AUTOPKGTEST_TMP}"

# run fakedns
${dir}/fakedns.py 2>fakednslog &
fakednspid=$!

# wait when dqcache will be ready
dq a localhost 127.0.0.1 1>/dev/null 2>/dev/null

# reconfigure dqcache
echo '127.0.0.2' > '/var/lib/dqcache/root/servers/@'
killall -HUP dqcache
killall -INT dqcache

cleanup() {
  ex=$?
  # kill fakedns
  kill -TERM "${fakednspid}" 1>/dev/null 2>/dev/null || :
  kill -KILL "${fakednspid}" 1>/dev/null 2>/dev/null || :
  cat /var/lib/dqcache/root/servers/.@ > /var/lib/dqcache/root/servers/@ || :
  killall -HUP dqcache || :
  killall -INT dqcache || :
  if [ "${ex}" -ne 0 ]; then
    (
      exec >&2
      echo "fakednslog:"
      cat fakednslog || :
    )
  fi
  rm -f *.log fakednslog
  exit "${ex}"
}
trap "cleanup" EXIT TERM INT

domainnames="a b c d e f g h i j k l m n o p q r s t u v w x y z"

# send queries
for x in ${domainnames}; do
  for y in ${domainnames}; do
    name="$x.$y.$z"
    dq a "${name}" 127.0.0.1 1>"${name}.log" 2>&1
    if ! grep '^answer: ' "${name}.log"; then
      exit 2
    fi
  done
done

# stop fakedns, dqcache should have all queries cached
kill -TERM "${fakednspid}" 1>/dev/null 2>/dev/null || :
kill -KILL "${fakednspid}" 1>/dev/null 2>/dev/null || :

# send queries again and parallel
for x in ${domainnames}; do
  for y in ${domainnames}; do
    (
      name="$x.$y.$z"
      dq a "${name}" 127.0.0.1 1>"${name}.log" 2>&1
      if ! grep '^answer: ' "${name}.log"; then
        exit 3
      fi
    ) &
  done
  wait
done
exit 0
