#!/bin/sh
#
+# TODO:
+# - test bextract
+# - with strip path
+#
# Run a accurate backup of the Bacula build directory
# then restore it.
#
+
TestName="accurate-test"
JobName=backup
. scripts/functions
-scripts/cleanup
+$rscripts/cleanup
copy_test_confs
-/bin/cp -f scripts/bacula-dir.conf.accurate bin/bacula-dir.conf
-sed -i s/all,/all,saved,/ bin/bacula-fd.conf
+cp -f $rscripts/bacula-dir.conf.accurate $conf/bacula-dir.conf
+sed s/all,/all,saved,/ $conf/bacula-fd.conf > tmp/1
+cp tmp/1 $conf/bacula-fd.conf
-change_jobname Client1 $JobName
+change_jobname BackupClient1 $JobName
+
+p() {
+ echo "##############################################" >> ${cwd}/tmp/log1.out
+ echo "$*" >> ${cwd}/tmp/log1.out
+ echo "##############################################" >> ${cwd}/tmp/log2.out
+ echo "$*" >> ${cwd}/tmp/log2.out
+}
# cleanup
rm -rf ${cwd}/build/accurate.new
# add extra files
mkdir ${cwd}/build/accurate
+mkdir ${cwd}/build/accurate/dirtest
+echo "test test" > ${cwd}/build/accurate/dirtest/hello
echo "test test" > ${cwd}/build/accurate/xxx
echo "test test" > ${cwd}/build/accurate/yyy
echo "test test" > ${cwd}/build/accurate/zzz
+echo "test test" > ${cwd}/build/accurate/zzzzzz
+echo "test test" > ${cwd}/build/accurate/xxxxxx
+echo "test test" > ${cwd}/build/accurate/yyyyyy
+echo "test test" > ${cwd}/build/accurate/xxxxxxxxx
+echo "test test" > ${cwd}/build/accurate/yyyyyyyyy
+echo "test test" > ${cwd}/build/accurate/zzzzzzzzz
echo ${cwd}/build > ${cwd}/tmp/file-list
start_test
cat <<END_OF_DATA >${cwd}/tmp/bconcmds
-@output /dev/null
+@$out /dev/null
messages
label volume=TestVolume001 storage=File pool=Default
messages
@# now do a restore
@#
@$out ${cwd}/tmp/log2.out
+setdebug level=10 storage=File
restore fileset=FS_TESTJOB where=${cwd}/tmp/bacula-restores select all done
yes
wait
messages
-@$out
quit
END_OF_DATA
################################################################
-# First : We just run full and restore to compare if all is ok
+p First : We just run full and restore to compare if all is ok
################################################################
run_bconsole
rm -rf ${cwd}/tmp/bacula-restores
################################################################
-# Now do a second backup after making few changes
+p Now do a second backup after making few changes
################################################################
rm ${cwd}/build/accurate/xxx # delete a file
+rm ${cwd}/build/accurate/dirtest/hello
+
+run_bconsole
+check_for_zombie_jobs storage=File
+
+check_two_logs
+check_restore_diff
+check_files_written ${cwd}/tmp/log1.out 4
+
+rm -rf ${cwd}/tmp/bacula-restores
+
+################################################################
+p Now do a third backup after making few changes
+################################################################
+rm ${cwd}/build/accurate/yyyyyy # delete a file
+rmdir ${cwd}/build/accurate/dirtest
+
+run_bconsole
+check_for_zombie_jobs storage=File
+
+check_two_logs
+check_restore_diff
+check_files_written ${cwd}/tmp/log1.out 3
+
+rm -rf ${cwd}/tmp/bacula-restores
+
+################################################################
+p Now do a 4 backup after making few changes
+################################################################
+rm ${cwd}/build/accurate/zzzzzz # delete a file
+
+run_bconsole
+check_for_zombie_jobs storage=File
+
+check_two_logs
+check_restore_diff
+check_files_written ${cwd}/tmp/log1.out 2
+
+rm -rf ${cwd}/tmp/bacula-restores
+
+################################################################
+p Now do a 5 backup after making few changes
+################################################################
+rm ${cwd}/build/accurate/zzzzzzzzz
+
+run_bconsole
+check_for_zombie_jobs storage=File
+
+check_two_logs
+check_restore_diff
+check_files_written ${cwd}/tmp/log1.out 2
+
+rm -rf ${cwd}/tmp/bacula-restores
+
+################################################################
+p Now do a backup after making few changes
+################################################################
+touch ${cwd}/build/accurate/aaaaaa
run_bconsole
check_for_zombie_jobs storage=File
check_two_logs
check_restore_diff
+check_files_written ${cwd}/tmp/log1.out 2
rm -rf ${cwd}/tmp/bacula-restores
################################################################
-# Now do a third backup after making few changes
+p Check with bls
+################################################################
+
+$bin/bls -c $conf/bacula-sd.conf -V 'TestVolume001' FileStorage > $tmp/bls.out
+grep -- '----' $tmp/bls.out | grep xxx > /dev/null
+if [ $? != 0 ] ; then
+ bstat=2
+fi
+
+################################################################
+p Now do a backup after making few changes
################################################################
# some files will have disappear, others have their old mtime/ctime
rm -rf ${cwd}/tmp/bacula-restores
################################################################
-# Now do an other test in differential mode
+p Now do an other test in differential mode
################################################################
cat <<END_OF_DATA >${cwd}/tmp/bconcmds
@# now do a restore
@#
@$out ${cwd}/tmp/log2.out
+setdebug level=10 storage=File
restore fileset=FS_TESTJOB where=${cwd}/tmp/bacula-restores select all done
yes
wait
messages
-@$out
quit
END_OF_DATA
rm -rf ${cwd}/tmp/bacula-restores
################################################################
-# Now do an other test in differential mode + incremental
+p Now do an other test in differential mode + incremental
################################################################
# make some changes
@# now do a restore
@#
@$out ${cwd}/tmp/log2.out
+setdebug level=10 storage=File
restore fileset=FS_TESTJOB where=${cwd}/tmp/bacula-restores select all done
yes
wait
messages
-@$out
quit
END_OF_DATA
rm -rf ${cwd}/tmp/bacula-restores
+################################################################
+p Now do a backup after making few changes
+################################################################
+rm ${cwd}/build/accurate/aaaaaa
+touch ${cwd}/build/accurate/bbbbbb
+
+run_bconsole
+check_for_zombie_jobs storage=File
+check_files_written ${cwd}/tmp/log1.out 3
+
+check_two_logs
+check_restore_diff
+
+################################################################
+p Now do a backup after making few changes
+################################################################
+mv ${cwd}/tmp/bacula-restores ${cwd}/build/accurate/
+
+run_bconsole
+check_for_zombie_jobs storage=File
+
+check_two_logs
+check_restore_diff
+
+rm -rf ${cwd}/tmp/bacula-restores ${cwd}/build/accurate/bacula-restores
+
+################################################################
+p Check with bscan
+################################################################
+
+stop_bacula
+
+cd $bin
+ ./drop_bacula_tables >/dev/null 2>&1
+ ./make_bacula_tables >/dev/null 2>&1
+ ./grant_bacula_privileges >/dev/null 2>&1
+cd ..
+
+echo "volume=TestVolume001" >tmp/bscan.bsr
+
+bscan_libdbi
+
+$bin/bscan -c $conf/bacula-sd.conf $BSCANLIBDBI -n regress -u regress -m -s -b $tmp/bscan.bsr FileStorage 2>&1 > $tmp/bscan.log
+
+cat <<END_OF_DATA >${cwd}/tmp/bconcmds
+@$out ${cwd}/tmp/log1.out
+messages
+@#
+@# now do a restore after bscan
+@#
+@$out ${cwd}/tmp/log2.out
+setdebug level=10 storage=File
+restore fileset=FS_TESTJOB where=${cwd}/tmp/bacula-restores select all done
+yes
+wait
+messages
+quit
+END_OF_DATA
+
+# run bacula with just the restore job
+run_bacula
+
+check_for_zombie_jobs storage=File
+
+check_two_logs
+check_restore_diff
+
+rm -rf ${cwd}/tmp/bacula-restores
################################################################
-# Now do a test with other attributes (owner, gid, rights)
+p Now do a test with other attributes: owner, gid, rights
################################################################
cat <<END_OF_DATA >${cwd}/tmp/bconcmds
@$out ${cwd}/tmp/log1.out
+label volume=TestVolume002 storage=File pool=Default
run job=backup_advance yes
wait
messages
@# now do a restore
@#
@$out ${cwd}/tmp/log2.out
+setdebug level=10 storage=File
restore fileset=FS_TESTJOB_ADVANCE where=${cwd}/tmp/bacula-restores select all done
yes
wait
messages
-@$out
quit
END_OF_DATA
################################################################
-# Use the p option for verify
+p Use the p option for verify
################################################################
chmod 400 ${cwd}/build/accurate/yyy
@# now do a restore
@#
@$out ${cwd}/tmp/log2.out
+setdebug level=10 storage=File
restore fileset=FS_TESTJOB_ADVANCE where=${cwd}/tmp/bacula-restores select all done
yes
wait
messages
-@$out
quit
END_OF_DATA
check_two_logs
check_restore_diff
+check_files_written ${cwd}/tmp/log1.out 1
rm -rf ${cwd}/tmp/bacula-restores
-if ! grep 'st_mode differ' tmp/log1.out > /dev/null
+################################################################
+p Test strippath option
+################################################################
+
+cat <<END_OF_DATA >${cwd}/tmp/bconcmds
+@$out ${cwd}/tmp/log1.out
+setdebug level=1 client=$CLIENT
+run job=backup fileset=FS_TESTJOB2 yes
+wait
+messages
+@$out ${cwd}/tmp/log3.out
+st dir
+quit
+END_OF_DATA
+
+run_bconsole
+check_for_zombie_jobs storage=File
+
+# run incremental
+rm -f ${cwd}/build/accurate/yyy
+run_bconsole
+check_for_zombie_jobs storage=File
+
+jobid=`awk '/ Incr.+backup/ { jobid=$1 } END { print jobid }' ${cwd}/tmp/log3.out`
+
+cat <<END_OF_DATA >${cwd}/tmp/bconcmds
+@$out ${cwd}/tmp/log3.out
+list files jobid=$jobid
+quit
+END_OF_DATA
+
+run_bconsole
+
+grep yyy ${cwd}/tmp/log3.out > /dev/null
+if [ $? != 0 ] ; then
+ print_debug "Can't find yyy file into 'list files' output (${cwd}/tmp/log3.out)"
+ dstat=2
+fi
+
+if grep zzz ${cwd}/tmp/log3.out > /dev/null
then
- bstat=2
+ print_debug "Can't find zzz file into 'list files' output (${cwd}/tmp/log3.out)"
+ dstat=2
fi
stop_bacula