Skip to content

Commit

Permalink
restore-test: add tests for restore behaviour
Browse files Browse the repository at this point in the history
We create some new tests that specifically test the restore behaviour
of normal backups as well as archives.
  • Loading branch information
sebsura authored and arogge committed Mar 2, 2023
1 parent d0f299e commit 94f38b5
Show file tree
Hide file tree
Showing 43 changed files with 1,181 additions and 0 deletions.
1 change: 1 addition & 0 deletions systemtests/tests/CMakeLists.txt
Expand Up @@ -74,6 +74,7 @@ add_subdirectory(python-pam)
add_subdirectory(quota-softquota)
add_subdirectory(reload)
add_subdirectory(restapi)
add_subdirectory(restore-test)
add_subdirectory(scheduler)
add_subdirectory(sparse-file)
add_subdirectory(spool)
Expand Down
80 changes: 80 additions & 0 deletions systemtests/tests/restore-test/CMakeLists.txt
@@ -0,0 +1,80 @@
# BAREOS® - Backup Archiving REcovery Open Sourced
#
# Copyright (C) 2021-2023 Bareos GmbH & Co. KG
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of version three of the GNU Affero General Public
# License as published by the Free Software Foundation and included
# in the file LICENSE.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.

get_filename_component(BASENAME ${CMAKE_CURRENT_BINARY_DIR} NAME)
create_systemtest(${SYSTEMTEST_PREFIX} ${BASENAME})

set_tests_properties(
system:restore-test:create-backup
PROPERTIES FIXTURES_SETUP "system:restore-test:backup-job-fixture"
)
set_tests_properties(
system:restore-test:archive-restore-file
PROPERTIES
FIXTURES_REQUIRED
"system:restore-test:backup-job-fixture;system:restore-test-fixture"
)
set_tests_properties(
system:restore-test:archive-restore-dir
PROPERTIES
FIXTURES_REQUIRED
"system:restore-test:backup-job-fixture;system:restore-test-fixture"
)
set_tests_properties(
system:restore-test:archive-full-restore
PROPERTIES
FIXTURES_REQUIRED
"system:restore-test:backup-job-fixture;system:restore-test-fixture"
)
set_tests_properties(
system:restore-test:restore-file
PROPERTIES
FIXTURES_REQUIRED
"system:restore-test:backup-job-fixture;system:restore-test-fixture"
)
set_tests_properties(
system:restore-test:restore-dir
PROPERTIES
FIXTURES_REQUIRED
"system:restore-test:backup-job-fixture;system:restore-test-fixture"
)
set_tests_properties(
system:restore-test:full-restore
PROPERTIES
FIXTURES_REQUIRED
"system:restore-test:backup-job-fixture;system:restore-test-fixture"
)
set_tests_properties(
system:restore-test:check-hints
PROPERTIES
FIXTURES_REQUIRED
"system:restore-test:backup-job-fixture;system:restore-test-fixture"
)
set_tests_properties(
system:restore-test:restore-old-archive
PROPERTIES
FIXTURES_REQUIRED
"system:restore-test:backup-job-fixture;system:restore-test-fixture"
)
set_tests_properties(
system:restore-test:error-full-restore
PROPERTIES
FIXTURES_REQUIRED
"system:restore-test:backup-job-fixture;system:restore-test-fixture"
)
@@ -0,0 +1,6 @@
Catalog {
Name = MyCatalog
dbname = "@db_name@"
dbuser = "@db_user@"
dbpassword = "@db_password@"
}
@@ -0,0 +1,7 @@
Client {
Name = bareos-fd
Description = "Client resource of the Director itself."
Address = @hostname@
Password = "@fd_password@" # password for FileDaemon
FD PORT = @fd_port@
}
@@ -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
Subscriptions = 10

# 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@"
DirPort = @dir_port@
}
@@ -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
}
}
@@ -0,0 +1,21 @@
FileSet {
Name = "SelfTest"
Description = "fileset just to backup some files for selftest"
Include {
Options {
Signature = MD5 # calculate md5 checksum per file
fstype = ext2
fstype = ext3
fstype = ext4
fstype = overlay
fstype = jfs
fstype = ufs
fstype = xfs
fstype = zfs
fstype = btrfs
fstype = vfat
}
#File = "@sbindir@"
File=<@tmpdir@/file-list
}
}
@@ -0,0 +1,17 @@
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 are:
# make_catalog_backup <catalog-name>
RunBeforeJob = "@scriptdir@/make_catalog_backup MyCatalog"

# This deletes the copy of the catalog
RunAfterJob = "@scriptdir@/delete_catalog_backup MyCatalog"

Priority = 11 # run after main backup
}
@@ -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
}
@@ -0,0 +1,5 @@
Job {
Name = "backup-bareos-fd"
JobDefs = "DefaultJob"
Client = "bareos-fd"
}
@@ -0,0 +1,5 @@
Job {
Name = "backup_data_longname_butalways_welldispatched-FROM-work_AND_work_-BLINDClusterPopTreePlatformXXLargeEnough"
JobDefs = "DefaultJob"
Client = "bareos-fd"
}
@@ -0,0 +1,14 @@
Job {
Name = "recyclejob"
Type = Backup
Level = Full
Client = "bareos-fd"
FileSet = "SelfTest"
Storage = File
Messages = Standard
Pool = quickrecycle
Priority = 10
Full Backup Pool = quickrecycle # 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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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-<volume-id>"
}
@@ -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-<volume-id>"
}
@@ -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-<volume-id>"
}
@@ -0,0 +1,4 @@
Pool {
Name = Scratch
Pool Type = Scratch
}
@@ -0,0 +1,10 @@
Pool {
Name = quickrecycle
Pool Type = Backup
Recycle = yes # Bareos can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 2 seconds # How long should the Full Backups be kept? (#06)
Maximum Volume Bytes = 70K # Limit Volume size to something reasonable
Maximum Volumes = 100 # Limit number of Volumes in Pool
Label Format = "recyclable-" # Volumes will be labeled "Full-<volume-id>"
}
@@ -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*
}
@@ -0,0 +1,8 @@
Storage {
Name = File
Address = @hostname@
Password = "@sd_password@"
Device = FileStorage
Media Type = File
SD Port = @sd_port@
}
@@ -0,0 +1,19 @@
Client {
Name = @basename@-fd
Maximum Concurrent Jobs = 20

# 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 filedaemon plugins (*-fd.so) from the "Plugin Directory".
#
# Plugin Directory = "@python_plugin_module_src_fd@"
# Plugin Names = ""

# if compatible is set to yes, we are compatible with bacula
# if set to no, new bareos features are enabled which is the default
# compatible = yes

Working Directory = "@working_dir@"
FD Port = @fd_port@

}
@@ -0,0 +1,5 @@
Director {
Name = bareos-dir
Password = "@fd_password@"
Description = "Allow the configured Director to access this file daemon."
}
@@ -0,0 +1,5 @@
Messages {
Name = Standard
Director = bareos-dir = all, !skipped, !restored
Description = "Send relevant messages to the Director."
}
@@ -0,0 +1,15 @@
Device {
Name = FileStorage
Media Type = File
Archive Device = storage
LabelMedia = yes; # lets Bareos label unlabeled media
Random Access = yes;
AutomaticMount = yes; # when device opened, read it
RemovableMedia = no;
AlwaysOpen = no;
Description = "File device. A connecting Director must have the same Name and MediaType."
Auto Inflate = both
Auto Deflate = both
Auto Deflate Algorithm = gzip

}
@@ -0,0 +1,15 @@
Device {
Name = FileStorage2
Media Type = File
Archive Device = storage
LabelMedia = yes; # lets Bareos label unlabeled media
Random Access = yes;
AutomaticMount = yes; # when device opened, read it
RemovableMedia = no;
AlwaysOpen = no;
Description = "File device. A connecting Director must have the same Name and MediaType."
Auto Inflate = both
Auto Deflate = both
Auto Deflate Algorithm = gzip

}

0 comments on commit 94f38b5

Please sign in to comment.