diff --git a/systemtests/CMakeLists.txt b/systemtests/CMakeLists.txt index 47b3c4ac789..510026c749d 100644 --- a/systemtests/CMakeLists.txt +++ b/systemtests/CMakeLists.txt @@ -306,6 +306,7 @@ set(SYSTEM_TESTS copy-remote-bscan bconsole-status-client scheduler-backup-test + reload-works-on-adding-duplicate-job-resource ) set(SYSTEM_TESTS_DISABLED # initialy empty diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/catalog/MyCatalog.conf.in b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/catalog/MyCatalog.conf.in new file mode 100644 index 00000000000..479bc6fecbb --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/catalog/MyCatalog.conf.in @@ -0,0 +1,8 @@ +Catalog { + Name = MyCatalog + #dbdriver = "@DEFAULT_DB_TYPE@" + dbdriver = "XXX_REPLACE_WITH_DATABASE_DRIVER_XXX" + dbname = "@db_name@" + dbuser = "@db_user@" + dbpassword = "@db_password@" +} diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/client/bareos-fd.conf.in b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/client/bareos-fd.conf.in new file mode 100644 index 00000000000..470ca702035 --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/client/bareos-fd.conf.in @@ -0,0 +1,7 @@ +Client { + Name = bareos-fd + Description = "Client resource of the Director itself." + Address = localhost + Password = "@fd_password@" # password for FileDaemon + FD PORT = @fd_port@ +} diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/console/bareos-mon.conf.in b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/console/bareos-mon.conf.in new file mode 100644 index 00000000000..d276adcb87d --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/console/bareos-mon.conf.in @@ -0,0 +1,7 @@ +Console { + Name = bareos-mon + Description = "Restricted console used by tray-monitor to get the status of the director." + Password = "@mon_dir_password@" + CommandACL = status, .status + JobACL = *all* +} diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/director/bareos-dir.conf.in b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/director/bareos-dir.conf.in new file mode 100644 index 00000000000..33b3a426e3a --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/director/bareos-dir.conf.in @@ -0,0 +1,27 @@ +Director { # define myself + Name = bareos-dir + QueryFile = "@scriptdir@/query.sql" + Maximum Concurrent Jobs = 10 + Password = "@dir_password@" # Console password + Messages = Daemon + Auditing = yes + + # Enable the Heartbeat if you experience connection losses + # (eg. because of your router or firewall configuration). + # Additionally the Heartbeat can be enabled in bareos-sd and bareos-fd. + # + # Heartbeat Interval = 1 min + + # remove comment in next line to load dynamic backends from specified directory + Backend Directory = @backenddir@ + + # remove comment from "Plugin Directory" to load plugins from specified directory. + # if "Plugin Names" is defined, only the specified plugins will be loaded, + # otherwise all director plugins (*-dir.so) from the "Plugin Directory". + # + # Plugin Directory = "@python_plugin_module_src_dir@" + # Plugin Names = "" + Working Directory = "@working_dir@" + Pid Directory = "@piddir@" + DirPort = @dir_port@ +} diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/fileset/Catalog.conf.in b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/fileset/Catalog.conf.in new file mode 100644 index 00000000000..c7cdc433fe1 --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/fileset/Catalog.conf.in @@ -0,0 +1,11 @@ +FileSet { + Name = "Catalog" + Description = "Backup the catalog dump and Bareos configuration files." + Include { + Options { + signature = MD5 + } + File = "@working_dir@/@db_name@.sql" # database dump + File = "@confdir@" # configuration + } +} diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/fileset/SelfTest.conf.in b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/fileset/SelfTest.conf.in new file mode 100644 index 00000000000..ba39719ea3f --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/fileset/SelfTest.conf.in @@ -0,0 +1,11 @@ +FileSet { + Name = "SelfTest" + Description = "fileset just to backup some files for selftest" + Include { + Options { + Signature = MD5 # calculate md5 checksum per file + } + #File = "@sbindir@" + File=<@tmpdir@/file-list + } +} diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/job/BackupCatalog.conf.in b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/job/BackupCatalog.conf.in new file mode 100644 index 00000000000..1da2a7af657 --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/job/BackupCatalog.conf.in @@ -0,0 +1,20 @@ +Job { + Name = "BackupCatalog" + Description = "Backup the catalog database (after the nightly save)" + JobDefs = "DefaultJob" + Level = Full + FileSet="Catalog" + + # This creates an ASCII copy of the catalog + # Arguments to make_catalog_backup.pl are: + # make_catalog_backup.pl + RunBeforeJob = "@scriptdir@/make_catalog_backup.pl MyCatalog" + + # This deletes the copy of the catalog + RunAfterJob = "@scriptdir@/delete_catalog_backup" + + # This sends the bootstrap via mail for disaster recovery. + # Should be sent to another system, please change recipient accordingly + Write Bootstrap = "|@bindir@/bsmtp -h @smtp_host@ -f \"\(Bareos\) \" -s \"Bootstrap for Job %j\" @job_email@" # (#01) + Priority = 11 # run after main backup +} diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/job/RestoreFiles.conf.in b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/job/RestoreFiles.conf.in new file mode 100644 index 00000000000..89256864d9a --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/job/RestoreFiles.conf.in @@ -0,0 +1,11 @@ +Job { + Name = "RestoreFiles" + Description = "Standard Restore template. Only one such job is needed for all standard Jobs/Clients/Storage ..." + Type = Restore + Client = bareos-fd + FileSet = SelfTest + Storage = File + Pool = Incremental + Messages = Standard + Where = @tmp@/bareos-restores +} diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/job/backup-bareos-fd.conf.in b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/job/backup-bareos-fd.conf.in new file mode 100644 index 00000000000..ca1891f9620 --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/job/backup-bareos-fd.conf.in @@ -0,0 +1,5 @@ +Job { + Name = "backup-bareos-fd" + JobDefs = "DefaultJob" + Client = "bareos-fd" +} diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/jobdefs/DefaultJob.conf.in b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/jobdefs/DefaultJob.conf.in new file mode 100644 index 00000000000..563126477c9 --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/jobdefs/DefaultJob.conf.in @@ -0,0 +1,15 @@ +JobDefs { + Name = "DefaultJob" + Type = Backup + Level = Incremental + Client = bareos-fd + FileSet = "SelfTest" + Storage = File + Messages = Standard + Pool = Incremental + Priority = 10 + Write Bootstrap = "@working_dir@/%c.bsr" + Full Backup Pool = Full # write Full Backups into "Full" Pool + Differential Backup Pool = Differential # write Diff Backups into "Differential" Pool + Incremental Backup Pool = Incremental # write Incr Backups into "Incremental" Pool +} diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/messages/Daemon.conf.in b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/messages/Daemon.conf.in new file mode 100644 index 00000000000..cf6a8cfa1e2 --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/messages/Daemon.conf.in @@ -0,0 +1,7 @@ +Messages { + Name = Daemon + Description = "Message delivery for daemon messages (no job)." + console = all, !skipped, !saved, !audit + append = "@logdir@/bareos.log" = all, !skipped, !audit + append = "@logdir@/bareos-audit.log" = audit +} diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/messages/Standard.conf.in b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/messages/Standard.conf.in new file mode 100644 index 00000000000..b3556ba8c23 --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/messages/Standard.conf.in @@ -0,0 +1,7 @@ +Messages { + Name = Standard + Description = "Reasonable message delivery -- send most everything to email address and to the console." + console = all, !skipped, !saved, !audit + append = "@logdir@/bareos.log" = all, !skipped, !saved, !audit + catalog = all, !skipped, !saved, !audit +} diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/pool/Differential.conf b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/pool/Differential.conf new file mode 100644 index 00000000000..25ce24821ab --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/pool/Differential.conf @@ -0,0 +1,10 @@ +Pool { + Name = Differential + Pool Type = Backup + Recycle = yes # Bareos can automatically recycle Volumes + AutoPrune = yes # Prune expired volumes + Volume Retention = 90 days # How long should the Differential Backups be kept? (#09) + Maximum Volume Bytes = 10G # Limit Volume size to something reasonable + Maximum Volumes = 100 # Limit number of Volumes in Pool + Label Format = "Differential-" # Volumes will be labeled "Differential-" +} diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/pool/Full.conf b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/pool/Full.conf new file mode 100644 index 00000000000..867fc66b483 --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/pool/Full.conf @@ -0,0 +1,10 @@ +Pool { + Name = Full + Pool Type = Backup + Recycle = yes # Bareos can automatically recycle Volumes + AutoPrune = yes # Prune expired volumes + Volume Retention = 365 days # How long should the Full Backups be kept? (#06) + Maximum Volume Bytes = 50G # Limit Volume size to something reasonable + Maximum Volumes = 100 # Limit number of Volumes in Pool + Label Format = "Full-" # Volumes will be labeled "Full-" +} diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/pool/Incremental.conf b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/pool/Incremental.conf new file mode 100644 index 00000000000..f4dbbab6650 --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/pool/Incremental.conf @@ -0,0 +1,10 @@ +Pool { + Name = Incremental + Pool Type = Backup + Recycle = yes # Bareos can automatically recycle Volumes + AutoPrune = yes # Prune expired volumes + Volume Retention = 30 days # How long should the Incremental Backups be kept? (#12) + Maximum Volume Bytes = 1G # Limit Volume size to something reasonable + Maximum Volumes = 100 # Limit number of Volumes in Pool + Label Format = "Incremental-" # Volumes will be labeled "Incremental-" +} diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/pool/Scratch.conf b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/pool/Scratch.conf new file mode 100644 index 00000000000..3a489b19871 --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/pool/Scratch.conf @@ -0,0 +1,4 @@ +Pool { + Name = Scratch + Pool Type = Scratch +} diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/profile/operator.conf b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/profile/operator.conf new file mode 100644 index 00000000000..6edd0166dca --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/profile/operator.conf @@ -0,0 +1,18 @@ +Profile { + Name = operator + Description = "Profile allowing normal Bareos operations." + + Command ACL = !.bvfs_clear_cache, !.exit, !.sql + Command ACL = !configure, !create, !delete, !purge, !prune, !sqlquery, !umount, !unmount + Command ACL = *all* + + Catalog ACL = *all* + Client ACL = *all* + FileSet ACL = *all* + Job ACL = *all* + Plugin Options ACL = *all* + Pool ACL = *all* + Schedule ACL = *all* + Storage ACL = *all* + Where ACL = *all* +} diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/storage/File.conf.in b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/storage/File.conf.in new file mode 100644 index 00000000000..4058ddc7edc --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bareos-dir.d/storage/File.conf.in @@ -0,0 +1,8 @@ +Storage { + Name = File + Address = @hostname@ # N.B. Use a fully qualified name here (do not use "localhost" here). + Password = "@sd_password@" + Device = FileStorage + Media Type = File + SD Port = @sd_port@ +} diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bconsole.conf.in b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bconsole.conf.in new file mode 100644 index 00000000000..ecb6ad00dce --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/etc/bareos/bconsole.conf.in @@ -0,0 +1,10 @@ +# +# Bareos User Agent (or Console) Configuration File +# + +Director { + Name = @basename@-dir + DIRport = @dir_port@ + address = @hostname@ + Password = "@dir_password@" +} diff --git a/systemtests/tests/reload-works-on-adding-duplicate-job-resource/testrunner b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/testrunner new file mode 100755 index 00000000000..df5cbed9cf6 --- /dev/null +++ b/systemtests/tests/reload-works-on-adding-duplicate-job-resource/testrunner @@ -0,0 +1,116 @@ +#!/bin/sh +# +#set -x +#trap read debug + +TestName="$(basename "$(pwd)")" + +export TestName +export estat + +# shellcheck disable=SC1091 +. ./environment +. ${scripts}/functions + +temporary_job_config_file="$config_directory_dir_additional_test_config/new_duplicated_job.conf" +bconsole_command_file="$tmp/bconsole_reload_command" +console_logfile="$tmp/console.log" + +director_debug_level="" +#director_debug_level="-d 200" + +exit_with_error() { + echo "$1" + estat=1 + end_test + exit 1 +} + +stop_director() { + "${scripts}/bareos-ctl-dir" stop + if [ -n "$(pidof bareos-dir)" ]; then + killall -SIGKILL "$(pidof bareos-dir)" + fi + if [ -n "$(pidof bareos-dir)" ]; then + exit_with_error "Bareos director could not be stopped" + fi +} + +start_director() { + "${scripts}/bareos-ctl-dir" start "$director_debug_level" + director_pid=$(pidof bareos-dir) + + if [ -z "$director_pid" ]; then + exit_with_error "Bareos director could not be started" + fi +} + +create_console_command_file() { + if [ ! -f "$bconsole_command_file" ]; then + cat > "$bconsole_command_file" <&1 >> /dev/null + if [ $? != 0 ] ; then + exit_with_error "BConsole finished with errors" + fi + + if ! ps $director_pid > /dev/null; then + exit_with_error "Bareos director should not stop after reload" + fi +} + +find_error_string_in_console_log() { + err='Attempt to define second Job resource named "backup-bareos-fd" is not permitted' + if ! grep -q "$err" "$console_logfile"; then + exit_with_error "Could not find error string in console output" + fi +} + +add_duplicate_job_to_config() { +cat < "$temporary_job_config_file" +Job { + Name = "backup-bareos-fd" + JobDefs = "DefaultJob" + Client = "bareos-fd" +} +END_OF_DATA +} + +remove_console_logfile() { + rm -f "$console_logfile" +} + +############################################ +start_test +############################################ + +#be sure no director is started +stop_director + +#cleanup possible leftover from last run +${scripts}/cleanup +remove_console_logfile + +${scripts}/setup +start_director + +#reload modified config +add_duplicate_job_to_config +test_reload_will_not_crash_director +find_error_string_in_console_log + +stop_director + +############################################ +end_test +############################################ +