From 6051a89227a826a84be41fce6dc32726f20367dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= Date: Sat, 7 Nov 2015 03:11:55 +0100 Subject: [PATCH] tests: add regression test for #1386 QubesOS/qubes-issues#1386 --- tests/__init__.py | 10 ++++++++-- tests/backup.py | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/tests/__init__.py b/tests/__init__.py index 48035e69..0a5e9c17 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -477,7 +477,8 @@ class BackupTestsMixin(SystemTestsMixin): self.qc.load() - def restore_backup(self, source=None, appvm=None, options=None): + def restore_backup(self, source=None, appvm=None, options=None, + expect_errors=None): if source is None: backupfile = os.path.join(self.backupdir, sorted(os.listdir(self.backupdir))[-1]) @@ -506,8 +507,13 @@ class BackupTestsMixin(SystemTestsMixin): self.qc.load() errors = [] + if expect_errors is None: + expect_errors = [] while not self.error_detected.empty(): - errors.append(self.error_detected.get()) + current_error = self.error_detected.get() + if any(map(current_error.startswith, expect_errors)): + continue + errors.append(current_error) self.assertTrue(len(errors) == 0, "Error(s) detected during backup_restore_do: %s" % '\n'.join(errors)) diff --git a/tests/backup.py b/tests/backup.py index c48c30e9..15f63014 100644 --- a/tests/backup.py +++ b/tests/backup.py @@ -100,3 +100,22 @@ class TC_00_Backup(qubes.tests.BackupTestsMixin, qubes.tests.QubesTestCase): self.restore_backup(source='dd if=/var/tmp/backup-test', appvm=self.backupvm) self.remove_vms(vms) + + def test_200_restore_over_existing_directory(self): + """ + Regression test for #1386 + :return: + """ + vms = self.create_backup_vms() + self.make_backup(vms) + self.remove_vms(vms) + test_dir = vms[0].dir_path + os.mkdir(test_dir) + with open(os.path.join(test_dir, 'some-file.txt'), 'w') as f: + f.write('test file\n') + self.restore_backup( + expect_errors=[ + '*** Directory {} already exists! It has been moved'.format( + test_dir) + ]) + self.remove_vms(vms)