diff --git a/roles/database/tests/test_backup.py b/roles/database/tests/test_backup.py new file mode 100644 index 0000000000000000000000000000000000000000..eaa291799040027ddbbff255237685316f021ed5 --- /dev/null +++ b/roles/database/tests/test_backup.py @@ -0,0 +1,64 @@ +import testinfra.utils.ansible_runner + +testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( + '.molecule/ansible_inventory').get_hosts('backup') + + +def test_backup_directories(File, Sudo): + """ + Tests if backup directories have been set-up correctly. + """ + + with Sudo(): + directories = ["/srv/backup", "/srv/backup/mariadb"] + + for path in directories: + + directory = File(path) + + assert directory.is_directory + assert directory.user == 'root' + assert directory.group == 'root' + assert directory.mode == 0o700 + + +def test_backup_script_file(File, Sudo): + """ + Tests if backup script file for dumping database has been set-up correctly. + """ + + with Sudo(): + script = File('/etc/duply/main/pre.d/dump_testdb.sh') + + assert script.is_file + assert script.user == 'root' + assert script.group == 'root' + assert script.mode == 0o700 + assert "/usr/bin/mysqldump \"testdb\" > \"/srv/backup/mariadb/testdb.sql\"" in script.content + + +def test_backup_run(Command, File, Sudo): + """ + Tests if backup runs correctly, and if restore will included the backed-up + database. + """ + + with Sudo(): + + # Remove restore directory in order to make sure restore has worked + # correctly. + Command("rm -rf /root/restore") + + backup_run = Command('duply main backup') + assert backup_run.rc == 0 + + database_dump = File('/srv/backup/mariadb/testdb.sql') + assert database_dump.is_file + assert 'Database: testdb' in database_dump.content + + restore_run = Command('duply main restore /root/restore') + assert restore_run.rc == 0 + + restored_database_dump = File('/root/restore/srv/backup/mariadb/testdb.sql') + assert restored_database_dump.is_file + assert restored_database_dump.content == database_dump.content