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

set -e

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

# create server key
curvecpmakekey serverkey

# print public-key to serverkey.hex
curvecpprintkey serverkey > serverkey.hex

# create random datafile
dd if=/dev/urandom of=data.in bs=1 count=1000000 2>/dev/null

# start curvecpserver
curvecpserver this.machine.name serverkey 127.0.0.1 10000 31415926535897932384626433832795 curvecpmessage sh -c 'cat data.in' 2>curvecpserver.log &
curvecpserverpid=$!

sleep 1

cleanup() {
  ex=$?
  # kill curvecpserverpid
  kill -TERM "${curvecpserverpid}" 1>/dev/null 2>/dev/null || :
  kill -KILL "${curvecpserverpid}" 1>/dev/null 2>/dev/null || :
  if [ ${ex} -gt 0 ]; then
    (
      echo "curvecp clientext. test failed"
      echo "curvecpserver.log:"
      cat curvecpserver.log
    ) >&2
  fi
  rm -rf curvecpserver.log curvecpclient* serverkey serverkey.hex data.* /etc/curvecpextension
  exit "${ex}"
}
trap "cleanup" EXIT TERM INT

clients=10
for i in `seq 1 ${clients}`; do
  # create client ext.
  dd if=/dev/urandom of=/etc/curvecpextension bs=1 count=16 2>/dev/null

  # run curvecpclient
  curvecpclient this.machine.name `cat serverkey.hex` 127.0.0.1 10000 31415926535897932384626433832795 curvecpmessage -c sh -c 'cat <&6' >"data.${i}" 2>"curvecpclient${i}.log" &
done

# XXX
#wait
sleep 100

for i in `seq 1 ${clients}`; do
  if [ x"`sha512sum < data.in`" != x"`sha512sum < data.${i}`" ]; then
    (
      echo "curvecpclient${i}.log: "
      cat "curvecpclient${i}.log"
    ) >&2
    exit 111
  fi
done
exit 0
