#!/bin/sh # # Copyright (C) 2000-2015 Kern Sibbald # License: BSD 2-Clause; see file LICENSE-FOSS # # # 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 $rscripts/cleanup copy_test_confs 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 BackupClient1 $JobName p() { echo "##############################################" >> ${cwd}/tmp/log1.out echo "$*" >> ${cwd}/tmp/log1.out echo "##############################################" >> ${cwd}/tmp/log2.out echo "$*" >> ${cwd}/tmp/log2.out if test "$debug" -eq 1 ; then echo "##############################################" echo "$*" fi } # cleanup rm -rf ${cwd}/build/accurate.new rm -rf ${cwd}/build/accurate # add extra files mkdir -p ${cwd}/build/accurate mkdir -p ${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 <${cwd}/tmp/bconcmds @$out /dev/null messages label volume=TestVolume001 storage=File pool=Default messages END_OF_DATA run_bacula cat <${cwd}/tmp/bconcmds @$out ${cwd}/tmp/log1.out run job=$JobName yes wait 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 quit END_OF_DATA ################################################################ p First : We just run full and restore to compare if all is ok ################################################################ run_bconsole check_for_zombie_jobs storage=File check_two_logs check_restore_diff rm -rf ${cwd}/tmp/bacula-restores ################################################################ 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 ################################################################ p Check with bls ################################################################ ################################################################ p Now do a backup after making few changes ################################################################ # some files will have disappear, others have their old mtime/ctime mv ${cwd}/build/accurate ${cwd}/build/accurate.new run_bconsole check_for_zombie_jobs storage=File check_two_logs check_restore_diff rm -rf ${cwd}/tmp/bacula-restores ################################################################ p Now do an other test in differential mode ################################################################ cat <${cwd}/tmp/bconcmds @$out ${cwd}/tmp/log1.out run job=$JobName level=differential yes wait 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 quit END_OF_DATA run_bconsole check_for_zombie_jobs storage=File check_two_logs check_restore_diff rm -rf ${cwd}/tmp/bacula-restores ################################################################ p Now do an other test in differential mode + incremental ################################################################ # make some changes mv ${cwd}/build/accurate.new ${cwd}/build/accurate cat <${cwd}/tmp/bconcmds @$out ${cwd}/tmp/log1.out run job=$JobName yes wait 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 quit END_OF_DATA run_bconsole check_for_zombie_jobs storage=File check_two_logs check_restore_diff 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 stop_bacula ################################################################ p Check with bscan -- this takes some time ################################################################ 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 # If the database has a password pass it to bscan if test "x${db_password}" = "x"; then PASSWD= else PASSWD="-P ${db_password}" fi $bin/bscan -c $conf/bacula-sd.conf $BSCANLIBDBI $PASSWD -n "$db_name" -u "$db_user" -m -s -b $tmp/bscan.bsr FileStorage 2>&1 > $tmp/bscan.log cat <${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 ${cwd}/build/accurate/bacula-restores ################################################################ p Now do a test with other attributes: owner, gid, rights ################################################################ cat <${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 quit END_OF_DATA run_bconsole check_for_zombie_jobs storage=File check_two_logs check_restore_diff rm -rf ${cwd}/tmp/bacula-restores ################################################################ p Use the p option for verify ################################################################ chmod 400 ${cwd}/build/accurate/yyy cat <${cwd}/tmp/bconcmds @$out ${cwd}/tmp/log1.out 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 quit END_OF_DATA run_bconsole check_for_zombie_jobs storage=File check_two_logs check_restore_diff check_files_written ${cwd}/tmp/log1.out 1 rm -rf ${cwd}/tmp/bacula-restores ################################################################ p Test strippath option ################################################################ cat <${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 <${cwd}/tmp/bconcmds @$out ${cwd}/tmp/log3.out list files type=all jobid=$jobid quit END_OF_DATA run_bconsole grep yyy ${cwd}/tmp/log3.out > /dev/null if [ $? != 0 ] ; then print_debug "ERROR: Can't find yyy file into 'list files' output (${cwd}/tmp/log3.out)" dstat=2 fi grep zzz ${cwd}/tmp/log3.out > /dev/null if [ $? = 0 ] ; then print_debug "ERROR: Should not find zzz file into 'list files' output (${cwd}/tmp/log3.out)" dstat=2 fi stop_bacula end_test