#!/bin/sh
# 20181111
# Jan Mojzis
# Public domain.

set -e

dn=`dirname "$0"`
dir=`readlink -e "${dn}"`

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

#XXX parse public-key
dnscurvepk=`grep '(hexadecimal)' /etc/curvedns/README | cut -d ' ' -f1`
echo "dnscurve publickey: ${dnscurvepk}" >&2

#run fakednsserver.py
${dir}/fakednsserver.py 127.0.0.2 53 &
pid=$!

sleep 1

cleanup() {
  ex=$?
  rm -f *.log
  #kill fakednsserver.py
  kill -TERM "${pid}" 1>/dev/null 2>/dev/null || :
  kill -KILL "${pid}" 1>/dev/null 2>/dev/null || :
  exit "${ex}"
}
trap "cleanup" EXIT TERM INT

query='www.testszone.SOMEWHERE'

# query fakednsserver.py
(
  exec 2>&1
  echo "A query over UDP (short response):"
  dq -vv -a a "${query}" 127.0.0.2 || :
  echo "TXT query over TCP (large ~64kB response):"
  ( dq -vv -t -a txt "${query}" 127.0.0.2 || : ) | sort -u
) > orig.log

# try regular DNS query
(
  exec 2>&1
  echo "A query over UDP (short response):"
  dq -vv -a a "${query}" 127.0.0.1 || :
  echo "TXT query over TCP (large ~64kB response):"
  ( dq -vv -t -a txt "${query}" 127.0.0.1 || : ) | sort -u
) > regular.log

# try TXT DNSCurve query
(
  exec 2>&1
  echo "A query over UDP (short response):"
  dq -vv -a -S '' -k "${dnscurvepk}" a "${query}" 127.0.0.1 || :
  echo "TXT query over TCP (large ~64kB response):"
  ( dq -vv -t -a -S '' -k "${dnscurvepk}" txt "${query}" 127.0.0.1 || : ) | sort -u
) > txt.log

# try Streamlined DNSCurve query
(
  exec 2>&1
  echo "A query over UDP (short response):"
  dq -vv -a -s -k "${dnscurvepk}" a "${query}" 127.0.0.1 || :
  echo "TXT query over TCP (large ~64kB response):"
  ( dq -vv -t -a -s -k "${dnscurvepk}" txt "${query}" 127.0.0.1 || : ) | sort -u
) > streamlined.log

(
  for file in orig.log regular.log txt.log streamlined.log; do
    echo "${file}:"
    cat "${file}"
    echo
  done
) >&2

for file in regular.log txt.log streamlined.log; do
  if [ x"`grep '^answer:' orig.log | sha256sum`" != x"`grep '^answer:' ${file} | sha256sum`" ]; then
    echo "curvedns test failed" >&2
    exit 1
  fi
done


echo "curvedns test works" >&2
exit 0
