#!/bin/bash

TESTS="test_pffexport.sh test_pffinfo.sh"
SAMPLE_FILE="outlook.pst"
SAMPLE_URL="https://github.com/libyal/testdata/blob/master/pst/${SAMPLE_FILE}?raw=true"
SCRIPT_DIR="$(dirname "$0")"
SRC_DIR="$(cd "$SCRIPT_DIR/../../tests" && pwd)"
TESTS_DIR=$AUTOPKGTEST_TMP/tests
TOTAL_LOG=$AUTOPKGTEST_ARTIFACTS/total.log
SAMPLE_PATH=$TESTS_DIR/input/public/$SAMPLE_FILE

dload_sample()
{
  url="$1"
  dst="$2"
  mkdir -p "$(dirname "$TESTS_DIR/$dst")"
  if test -f "$SRC_DIR/$dst"; then
    cp "$SRC_DIR/$dst" "$TESTS_DIR/$dst"
  else
    echo "Downloading $dst"
    curl -L -k --silent --show-error -o "$TESTS_DIR/$dst" "$url" 2>&1
  fi
}

prepare_test_dir()
{
  dload_sample "$SAMPLE_URL" "input/public/$SAMPLE_FILE"
  mkdir -p "$AUTOPKGTEST_TMP/pfftools" "$TESTS_DIR"
  ln -s /usr/bin/pffexport "$AUTOPKGTEST_TMP/pfftools/pffexport"
  ln -s /usr/bin/pffinfo "$AUTOPKGTEST_TMP/pfftools/pffinfo"
  cd "$SRC_DIR" && cp $TESTS test_runner.sh "$TESTS_DIR/"
}

run_test()
{
  script="$1"
  name=$(basename $1)
  logfile="$AUTOPKGTEST_ARTIFACTS/$(basename "$script.log")"

  $script > $logfile 2>&1
  exitstatus=$?
  case $exitstatus in
    0)  text=PASS; success=1;;
    77) text=SKIP; success=1;;
    99) text=ERROR; success=0;;
    *)  text=FAIL; success=0;;
  esac

  echo $text: $name
  if test $success -ne 1; then
    echo "Logfile: $logfile" >> $TOTAL_LOG
    cat $logfile >> $TOTAL_LOG
    echo >> $TOTAL_LOG
  fi
}

if prepare_test_dir && test -f $SAMPLE_PATH; then
  RES=0
  cd $TESTS_DIR
  for TEST in $TESTS; do
    run_test $TESTS_DIR/$TEST
  done
  cd $SRC_DIR
  test -f $TOTAL_LOG && cat $TOTAL_LOG && RES=1
  exit $RES
else
  echo "Sample file not found: $SAMPLE_PATH"
  exit 2
fi
