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

#
# Run a backup of generated data and check if the soft quota limits are respected
#

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

# set other test specific variables
Client=bareos-fd
JobName=backup-bareos-fd

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

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


# Fill ${BackupDirectory} with data.
setup_data

SPARSEFILE_PATH="${BackupDirectory}/sparsefile.dat"
# 100 M
SPARSEFILE_SIZE=100000000
# 1 M
SPARSEFILE_REAL_SIZE_LIMIT=1000000

start_test

# create a sparse file
RC=0
if is_debug; then
    create_sparse_file -v ${SPARSEFILE_PATH} ${SPARSEFILE_SIZE} || RC=$?
else
    create_sparse_file ${SPARSEFILE_PATH} ${SPARSEFILE_SIZE} || RC=$?
fi

if [ $RC != 0 ]; then
    set_error "create_sparse_file failed."
    rm -f ${SPARSEFILE_PATH}
    exit 1
fi

if [ ! -e "${SPARSEFILE_PATH}" ]; then
    set_error "Failed to create sparse file."
    exit 1
fi

cat >${cwd}/tmp/bconcmds <<END_OF_DATA
@$out ${NULL_DEV}
messages
@$out ${cwd}/tmp/log1.out
run job=$JobName yes
wait
messages
list volumes
@#
@# now do a restore
@#
@$out ${cwd}/tmp/log2.out
restore where=${cwd}/tmp/bareos-restores select storage=File
unmark *
mark *
done
yes
wait
messages
quit
END_OF_DATA

run_bareos
check_for_zombie_jobs storage=File
stop_bareos

check_two_logs
check_restore_diff "${BackupDirectory}"

size_orig=`get_file_size ${SPARSEFILE_PATH}`
real_size_orig=`get_real_file_size ${SPARSEFILE_PATH}`
size_restored=`get_file_size ${cwd}/tmp/bareos-restores/${SPARSEFILE_PATH}`
real_size_restored=`get_real_file_size ${cwd}/tmp/bareos-restores/${SPARSEFILE_PATH}`

print_debug "real size orig:     $size_orig"
print_debug "real size orig:     $real_size_orig"
print_debug "size restored:      $size_restored"
print_debug "real size restored: $real_size_restored"

if [ -z "$real_size_restored" ]; then
    set_error "Failed to determine size of restored sparse file."
elif [ $real_size_restored -gt ${SPARSEFILE_REAL_SIZE_LIMIT} ]; then
    set_error "Restored sparse file ${SPARSEFILE_PATH} is too big (${size} > ${SPARSEFILE_REAL_SIZE_LIMIT})"
fi


rm -f ${SPARSEFILE_PATH}

# end tests and check for error codes
end_test
