#!/bin/bash
set -e
set -o pipefail
set -u

TestName="$(basename "$(pwd)")"
export TestName

#shellcheck source=./environment
. ./environment
. ./test-config

#shellcheck source=../../scripts/functions
. "${rscripts}"/functions

start_test


on_error() {
  local lc="${BASH_COMMAND}"
  echo "Error occurred in testrunner script [${lc}]"
  export estat=1
  exit 1
}
trap 'on_error' ERR


# remove jobs from previous runs
cat <<END_OF_DATA >"$tmp/bconcmds"
@$out $tmp/log-purge.out
purge jobs yes
2
wait
messages
quit
END_OF_DATA

run_bconsole


echo "Set debug on the Tape-Storage daemon"
tracefile="$(echo "setdebug level=200 trace=1 storage=Tape-0" | bin/bconsole | grep "^3000" | awk -F"tracefile=" '{print $2}' )"
: > "${tracefile}" # clear tracefile

echo "Label barcodes"
for i in $(seq ${NUMBER_OF_POOLS}); do
  pool=$(( i -1 )) #counts from 0
  for j in $(seq ${NUMBER_OF_TAPES_PER_POOL}); do
    slot=$(( j + pool * NUMBER_OF_TAPES_PER_POOL )) #counts from 1
    echo "label barcodes slot=${slot} drive=0 pool=Full-${pool} storage=Tape-0 yes" | bin/bconsole | grep -E "(OK label|already exists)"
  done
done


# create the test backup jobs
rm -f bconsole_backup_jobs

spooling="spooldata=yes"
for i in $(seq ${NUMBER_OF_TEST_ROUNDS}); do
  for j in $(seq ${NUMBER_OF_POOLS}); do
    cat << EOF >> bconsole_backup_jobs
run job=backup-bareos-fd level=Full storage=Tape-0 pool=Full-$(( j -1 )) ${spooling} yes
status dir
EOF
    if [ $(( NUMBER_OF_SPOOLING_JOBS_PER_ROUND -j )) -le 0 ]; then
      spooling=""
    fi
  done
done

echo "wait" >> bconsole_backup_jobs
echo "messages" >> bconsole_backup_jobs

# start all the jobs
bin/bconsole < bconsole_backup_jobs

# prepare the restore

list_of_jobids=$(echo "list jobs" \
  | bin/bconsole \
  | grep "backup-bareos-fd" \
  | sed 's/| *\([0-9]\{1,\}\).*$/\1/')

if [ "${list_of_jobids}" -eq 0 ]; then
  echo "no jobs found for restore"
  export estat=1
  exit 1
fi


rm -f bconsole_restore_jobs
poolnumber=$((NUMBER_OF_POOLS));
for j in ${list_of_jobids}; do
  pool="Full-$((poolnumber -1))"
  cat << EOF >> bconsole_restore_jobs
restore jobid=${j} pool="${pool}" where=${tmp}/bareos_restores_${j} select all done yes
EOF
   poolnumber=$((poolnumber -1))
done

echo "wait" >> bconsole_restore_jobs
echo "messages" >> bconsole_restore_jobs

# start all the restore jobs
bin/bconsole < bconsole_restore_jobs

# does not compare fifo files
for j in ${list_of_jobids}; do
  src="${tmp}/data"
  dst="${tmp}/bareos_restores_${j}/${tmp}/data"
  diff --exclude="fifo*" --brief --recursive --no-dereference \
     "$src" "$dst"
done

end_test
exit 0
