]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
regress: Add test to reproduce migration/copy issue with StorageGroup
authorEric Bollengier <eric@baculasystems.com>
Fri, 22 Apr 2022 16:20:02 +0000 (18:20 +0200)
committerEric Bollengier <eric@baculasystems.com>
Thu, 14 Sep 2023 11:56:58 +0000 (13:56 +0200)
regress/scripts/bacula-sd-2disk.conf.in
regress/scripts/bacula-sd-4disk.conf.in
regress/tests/multi-storage-copy-test [new file with mode: 0755]

index 9c09a0ce340baf24bc0f0d8ec8829f7c562f385e..0021a3bf09d88376845d8323904514f343f9be25 100644 (file)
@@ -100,7 +100,7 @@ Device {
 
 Device {
   Name = FileStorage
-  mediatype = FileMedia
+  Media Type = FileMedia
   Archive Device = @tmpdir@
   LabelMedia = yes;                   # lets Bacula label unlabeled media
   Random Access = Yes;
index aeddea466449a057c25962579c04dbcc26b37c98..7df4077c8f06d0292c20453f8b3ed10be3004d58 100644 (file)
@@ -153,7 +153,7 @@ Device {
 
 Device {
   Name = FileStorage
-  mediatype = FileMedia
+  Media Type = FileMedia
   Archive Device = @tmpdir@
   LabelMedia = yes;                  # lets Bacula label unlabeled media
   Random Access = Yes;
diff --git a/regress/tests/multi-storage-copy-test b/regress/tests/multi-storage-copy-test
new file mode 100755 (executable)
index 0000000..4b136d7
--- /dev/null
@@ -0,0 +1,181 @@
+#!/bin/sh
+#
+# Copyright (C) 2000-2021 Kern Sibbald
+# Copyright (C) 2021-2022 Bacula Systems SA
+# License: BSD 2-Clause; see file LICENSE-FOSS
+#
+
+#
+# This script uses the virtual disk autochanger
+# We test the copy/migration with multiple
+# storage daemon and the storage group feature
+#
+TestName="multi-storage-copy-test"
+JobName=backup
+. scripts/functions
+
+scripts/cleanup
+scripts/copy-2disk-confs
+scripts/prepare-disk-changer
+
+# create a new bacula-sd.conf
+perl -ne '
+if (/SDPort = /) { $_ =~ s/(\d+)/1$1/;}
+if (/Name = .+?-sd/) { $_ =~ s/-sd/-sd2/;}
+if (/Media Type = (.+)/) { $_ =~ s/$1/X$1/;}
+if (/WorkingDirectory/) { $_ =~ s/"$/2"/; }
+print;
+' $conf/bacula-sd.conf > $conf/bacula-sd2.conf
+
+mkdir -p ${working}2
+
+sed 's/bacula-sd.conf/bacula-sd2.conf/' $scripts/bacula-ctl-sd \
+    > $tmp/bacula-ctl-sd
+chmod +x $tmp/bacula-ctl-sd
+
+disable_plugins
+
+echo "${cwd}/build/po" >${cwd}/tmp/file-list
+
+change_jobname $JobName
+start_test
+
+cat <<EOF >> $conf/bacula-dir.conf
+Job {
+  Name = copy
+  Type = Copy
+  Client = "$HOST-fd"
+  Fileset = "Full Set"
+  MaximumSpawnedJobs = 300
+  Messages = Standard
+  NextPool = "Special"
+  Pool = "Default"
+  SelectionType = "PoolUncopiedJobs"
+  Storage = "tape", "File"
+}
+EOF
+
+# Make sure that we don't have the same mediatype on the two SD
+# The first call will set xxx for everything, then we revert to the one we want
+$bperl -e 'add_attribute("$conf/bacula-sd2.conf", "Media Type", "xxx", "Device")'
+$bperl -e 'add_attribute("$conf/bacula-sd2.conf", "Media Type", "tape", "Device", "Drive-0")'
+$bperl -e 'add_attribute("$conf/bacula-sd2.conf", "Media Type", "tape", "Device", "Drive-1")'
+$bperl -e 'add_attribute("$conf/bacula-sd2.conf", "LabelMedia", "yes", "Device")'
+
+#$bperl -e 'add_attribute("$conf/bacula-sd.conf", "Media Type", "Disk", "Device", "Virtual-1")'
+#$bperl -e 'add_attribute("$conf/bacula-sd.conf", "Media Type", "Disk", "Device", "Virtual-2")'
+#$bperl -e 'add_attribute("$conf/bacula-sd.conf", "Media Type", "FileMedia", "Device", "FileStorage")'
+$bperl -e 'add_attribute("$conf/bacula-sd.conf", "LabelMedia", "yes", "Device")'
+
+$bperl -e 'add_attribute("$conf/bacula-dir.conf", "LabelFormat", "Vol", "Pool")'
+$bperl -e 'add_attribute("$conf/bacula-dir.conf", "SDPort", $BASEPORT+10002, "Storage", "tape")'
+$bperl -e 'add_attribute("$conf/bacula-dir.conf", "Storage", "tape,File", "Job")'
+$bperl -e 'add_attribute("$conf/bacula-dir.conf", "Storage", "Virtual", "Pool", "Special")'
+$bperl -e 'add_attribute("$conf/bacula-dir.conf", "NextPool", "Special", "Pool", "Default")'
+
+# Write out bconsole commands
+cat <<END_OF_DATA >${cwd}/tmp/bconcmds
+@output /dev/null
+messages
+@$out ${cwd}/tmp/log1.out
+run job=$JobName storage=File yes
+wait
+messages
+quit
+END_OF_DATA
+
+$tmp/bacula-ctl-sd start >/dev/null 2>&1
+run_bacula
+
+echo "ficheriro1.txt" >${cwd}/build/po/ficheriro1.txt
+echo "ficheriro2.txt" >${cwd}/build/po/ficheriro2.txt
+
+
+cat <<END_OF_DATA >${cwd}/tmp/bconcmds
+@output /dev/null
+messages
+@$out ${cwd}/tmp/log3.out
+@# Force Incremental on the second Volume
+run level=Incremental storage=tape job=$JobName yes
+wait
+messages
+@# 
+@# now do a restore
+@#
+@$out ${cwd}/tmp/log2.out
+restore where=${cwd}/tmp/bacula-restores select all done yes
+wait
+messages
+@$out ${cwd}/tmp/log4.out
+run job=copy jobid=1 yes
+wait
+messages
+run job=copy jobid=2 yes
+wait
+messages
+run job=copy jobid=1 storage=Virtual yes
+wait
+messages
+@$out ${cwd}/tmp/log7.out
+restore where=${cwd}/tmp/bacula-restores2 jobid=5,7 all done yes
+wait
+messages
+restore where=${cwd}/tmp/bacula-restores3 jobid=9,7 all done yes
+wait
+messages
+quit
+END_OF_DATA
+
+run_bconsole
+
+$bperl -e 'add_attribute("$conf/bacula-dir.conf", "Storage", "File2,File3", "Job", "copy")'
+
+cat <<EOF > ${cwd}/tmp/bconcmds
+@$out ${cwd}/tmp/log9.out
+reload
+run job=copy jobid=1 comment="Should fail because of the drives available" yes
+wait
+messages
+quit
+EOF
+
+run_bconsole
+
+check_for_zombie_jobs storage=File
+check_for_zombie_jobs storage=tape
+stop_bacula
+$tmp/bacula-ctl-sd stop  >/dev/null 2>&1
+
+check_two_logs
+
+$rscripts/diff.pl -s ${cwd}/tmp/bacula-restores -d ${cwd}/tmp/bacula-restores2
+if [ $? -ne 0 ]; then
+    print_debug "ERROR: Second restore in error"
+    rstat=1
+fi
+
+$rscripts/diff.pl -s ${cwd}/tmp/bacula-restores -d ${cwd}/tmp/bacula-restores3
+if [ $? -ne 0 ]; then
+    print_debug "ERROR: Third restore in error"
+    rstat=1
+fi
+
+grep "Fatal error" $tmp/log9.out > /dev/null
+if [ $? -ne 0 ]; then
+    print_debug "ERROR: The copy job in $tmp/log9.out should be in error"
+    estat=1
+fi
+
+nb=`grep "Restore OK" $tmp/log7.out | wc -l`
+if [ "$nb" -ne 2 ]; then
+    print_debug "ERROR: Should find 2 restore job OK in $tmp/log7.out"
+    rstat=1
+fi
+
+nb=`grep "Copying OK" $tmp/log4.out | wc -l`
+if [ "$nb" -ne 3 ]; then
+    print_debug "ERROR: Should find 3 copy job OK in $tmp/log4.out"
+    rstat=1
+fi
+
+end_test