#!/bin/bash
set -e
set -o pipefail
set -u
#
# Run multiple backups in parallel and
#   then restore them.
#
TestName="$(basename "$(pwd)")"
export TestName

#shellcheck source=../../environment.in
. ./environment

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

start_test

backupjob="slow-backup-big-volume"
parallelbackuplog="$tmp/backup-parallel-jobs.out"
parallelrestorelog="$tmp/restore-parallel-jobs.out"

rm -f $parallelbackuplog
rm -f $parallelrestorelog

cat <<END_OF_DATA >"$tmp/bconcmds"
@$out ${NULL_DEV}
messages
@$out $parallelbackuplog
run job=${backupjob} level=Full yes
run job=${backupjob} level=Full yes
run job=${backupjob} level=Full yes
run job=${backupjob} level=Full yes
run job=${backupjob} level=Full yes
run job=${backupjob} level=Full yes
wait
messages
quit
END_OF_DATA

run_bconsole

backup_jobids=($(grep 'Job queued.' $parallelbackuplog | sed -n -e 's/^.*JobId=//p'))

num_jobs=${#backup_jobids[@]}

find "$tmp" -type d -name "restore*" -exec rm -rf {} +

cat <<END_OF_DATA >"$tmp/bconcmds"
@$out $parallelrestorelog
restore jobid=${backup_jobids[0]} where=$tmp/restore1 all done yes
restore jobid=${backup_jobids[1]} where=$tmp/restore2 all done yes
restore jobid=${backup_jobids[2]} where=$tmp/restore3 all done yes
restore jobid=${backup_jobids[3]} where=$tmp/restore4 all done yes
restore jobid=${backup_jobids[4]} where=$tmp/restore5 all done yes
restore jobid=${backup_jobids[5]} where=$tmp/restore6 all done yes
wait
messages
quit
END_OF_DATA

run_bconsole

if [[ $(grep -c "Termination:.*Backup OK" "$parallelbackuplog") -ne "$num_jobs" ]]; then
  echo "Not all backups jobs finished successfully."
  estat=1
fi

if [[ $(grep -c "Termination:.*Restore OK" "$parallelrestorelog") -ne "$num_jobs" ]]; then
  echo "Not all restore jobs finished successfully."
  estat=2
fi

for i in $(seq 1 "$num_jobs"); do
  restoredir="$tmp/restore$i"
  check_restore_diff "${BackupDirectory}" "$restoredir"
done

end_test
