#!/bin/sh
#
# Copyright (C) 2000-2022 Kern Sibbald
# License: BSD 2-Clause; see file LICENSE-FOSS
#

#
# Run a simple backup of the Bacula build directory 
#   to a tape where the maximum tape file size is set to 1M
#   then restore a few files from it.  Note, by setting the maximum 
#   file size to 1M, it runs very slow. This tests the
#   seeking capability
#
TestName="restore-seek-tape"
JobName=restore-tape-seek
. scripts/functions

require_tape_drive

scripts/copy-tape-confs
scripts/cleanup-tape

echo "${cwd}/tmp/build" >${cwd}/tmp/file-list
rm -rf ${cwd}/tmp/build
mkdir -p ${cwd}/tmp/build
# Copy only the .c files (to be restored)
#  set files to "*.c" for all c files
files="ua_tree.c ua_update.c"
# files="*.c"
for i in ${files}; do
   cp -p ${cwd}/build/src/dird/${i} ${cwd}/tmp/build
done
cd ${cwd}/tmp/build
ls >../1
cd ..
sed s%\^%${cwd}/tmp/build/% 1 | sort | uniq >restore-list
#
# At this point restore-list contains the list
#  of files we will restore
#
rm -f 1
cd ${cwd}
#
# Now arrange to backup *everything*
#
rm -rf  ${cwd}/tmp/build
mkdir -p ${cwd}/tmp/build
cp -fp ${cwd}/build/src/dird/* ${cwd}/tmp/build
#
# Enable MaximumFileSize to ensure lots of JobMedia records and thus
#  lots of seeking
#
cp ${cwd}/bin/bacula-sd.conf ${cwd}/tmp/1
sed "s%# Maximum File Size = 1000000%  Maximum File Size = 10KB%" ${cwd}/tmp/1 >${cwd}/bin/bacula-sd.conf

change_jobname NightlySave $JobName
start_test

cat <<END_OF_DATA >${cwd}/tmp/bconcmds
@$out /dev/null
messages
@$out ${cwd}/tmp/log1.out
label storage=tape volume=TestVolume001 pool=Default
run job=$JobName yes
wait
messages
@#
@# now do a restore
@#
@$out ${cwd}/tmp/log2.out
setdebug level=30 fd
setdebug level=10 storage=tape
sql
@# print the JobMedia records
select * from JobMedia;

restore bootstrap=${cwd}/tmp/kern.bsr where=${cwd}/tmp/bacula-restores storage=tape
7
<${cwd}/tmp/restore-list

yes
wait
messages
quit
END_OF_DATA

run_bacula
check_for_zombie_jobs storage=tape
stop_bacula

# Now setup a control directory of only what we *should* restore
rm -rf ${cwd}/tmp/build
mkdir -p  ${cwd}/tmp/build
for i in ${files}; do
   cp -p ${cwd}/build/src/dird/${i} ${cwd}/tmp/build
done

check_two_logs
check_restore_tmp_build_diff
end_test
