#!/bin/bash

DATAFILE=$(mktemp)
DAVDIR=$(mktemp -d)
testclient=${0%/*}/testclient.py
numbytes=512

U=$1
P=$2

if [ "x${P}" = "x" ]; then
  P=$(openssl rand -base64 8)
fi

openssl rand -out "${DATAFILE}" ${numbytes}
ls -l "${DATAFILE}"


echo "Starting WebDAV server in ${DAVDIR}"

if [ "x${U}" = "x" ]; then
  python3 -m pywebdav -l ERROR -P 0 -D "${DAVDIR}" -n 2>&1 &
  SERVER_PID=$!
else
  python3 -m pywebdav -l ERROR -P 0 -D "${DAVDIR}" -u "${U}" -p "${P}" 2>&1 &
  SERVER_PID=$!
fi

#echo "server running as PID ${SERVER_PID}"
sleep 1

port=$(lsof  -p ${SERVER_PID} 2>/dev/null  | egrep "TCP localhost:.*LISTEN" | sed -e 's|.*TCP localhost:||' -e 's| .*||')
echo "connecting to port:${port}"

if [ "x${port}" = "x" ]; then
  echo "unable to find listening port of WebDAV-server running as ${SERVER_PID}"
  echo "skipping test."
  lsof  -p ${SERVER_PID} 2>/dev/null | egrep "TCP.*LISTEN"
  exit 77
fi

if [ "x${U}" = "x" ]; then
  ${testclient} -P "${port}" "${DATAFILE}"
else
  ${testclient} -P "${port}" -u "${U}" -p "${P}" "${DATAFILE}"
fi
RETVAL=$?

kill $SERVER_PID
RETKILL=$?

rm -vrf "${DATAFILE}" "${DAVDIR}"

if [ "x${RETKILL}" != "x0" ]; then
  echo "server killing failed with ${RETKILL}, skipping test"
  exit 77
fi

exit $RETVAL
