def test_restore_zlib(self):
        self.thread_original_method = zlib.decompress
        self.mock_object(zlib, 'decompress', side_effect=self._store_thread)
        volume_id = fake.VOLUME_ID

        self._create_backup_db_entry(volume_id=volume_id)
        self.flags(backup_compression_algorithm='zlib')
        file_size = 1024 * 3
        self.flags(backup_file_size=file_size)
        self.flags(backup_sha_block_size_bytes=1024)
        service = nfs.NFSBackupDriver(self.ctxt)
        self._write_effective_compression_file(file_size)
        backup = objects.Backup.get_by_id(self.ctxt, fake.BACKUP_ID)
        service.backup(backup, self.volume_file)

        with tempfile.NamedTemporaryFile() as restored_file:
            backup = objects.Backup.get_by_id(self.ctxt, fake.BACKUP_ID)
            service.restore(backup, volume_id, restored_file)
            self.assertTrue(filecmp.cmp(self.volume_file.name,
                            restored_file.name))

        self.assertNotEqual(threading.current_thread(),
                            self.thread_dict['thread'])
Exemple #2
0
    def test_backup_backup_metadata_fail(self):
        """Test of when an exception occurs in backup().

        In backup(), after an exception occurs in
        self._backup_metadata(), we want to check the process of an
        exception handler.
        """
        self._create_backup_db_entry()
        self.flags(backup_compression_algorithm='none')
        service = nfs.NFSBackupDriver(self.ctxt)
        self.volume_file.seek(0)
        backup = db.backup_get(self.ctxt, 123)

        def fake_backup_metadata(self, backup, object_meta):
            raise exception.BackupDriverException(message=_('fake'))

        # Raise a pseudo exception.BackupDriverException.
        self.stubs.Set(nfs.NFSBackupDriver, '_backup_metadata',
                       fake_backup_metadata)

        # We expect that an exception be notified directly.
        self.assertRaises(exception.BackupDriverException, service.backup,
                          backup, self.volume_file)
Exemple #3
0
 def test_delete(self):
     volume_id = fake.VOLUME_ID
     self._create_backup_db_entry(volume_id=volume_id)
     service = nfs.NFSBackupDriver(self.ctxt)
     backup = objects.Backup.get_by_id(self.ctxt, fake.BACKUP_ID)
     service.delete(backup)
Exemple #4
0
    def test_restore_abort_delta(self):
        volume_id = fake.VOLUME_ID
        count = set()

        def _fake_generate_object_name_prefix(self, backup):
            az = 'az_fake'
            backup_name = '%s_backup_%s' % (az, backup['id'])
            volume = 'volume_%s' % (backup['volume_id'])
            prefix = volume + '_' + backup_name
            return prefix

        def my_refresh():
            # This refresh method will abort the backup after 1 chunk
            count.add(len(count) + 1)
            if len(count) == 2:
                backup.status = objects.fields.BackupStatus.AVAILABLE
                backup.save()
            original_refresh()

        self.mock_object(nfs.NFSBackupDriver, '_generate_object_name_prefix',
                         _fake_generate_object_name_prefix)

        self.flags(backup_file_size=(1024 * 8))
        self.flags(backup_sha_block_size_bytes=1024)

        container_name = self.temp_dir.replace(tempfile.gettempdir() + '/', '',
                                               1)
        self._create_backup_db_entry(volume_id=volume_id,
                                     container=container_name,
                                     backup_id=fake.BACKUP_ID)
        service = nfs.NFSBackupDriver(self.ctxt)
        self.volume_file.seek(0)
        backup = objects.Backup.get_by_id(self.ctxt, fake.BACKUP_ID)
        service.backup(backup, self.volume_file)

        # Create incremental backup with no change to contents
        self.volume_file.seek(16 * 1024)
        self.volume_file.write(os.urandom(1024))
        self.volume_file.seek(20 * 1024)
        self.volume_file.write(os.urandom(1024))

        self._create_backup_db_entry(
            volume_id=volume_id,
            status=objects.fields.BackupStatus.RESTORING,
            container=container_name,
            backup_id=fake.BACKUP2_ID,
            parent_id=fake.BACKUP_ID)
        self.volume_file.seek(0)
        deltabackup = objects.Backup.get_by_id(self.ctxt, fake.BACKUP2_ID)
        service.backup(deltabackup, self.volume_file, True)
        deltabackup = objects.Backup.get_by_id(self.ctxt, fake.BACKUP2_ID)

        backup = objects.Backup.get_by_id(self.ctxt, fake.BACKUP2_ID)
        original_refresh = backup.refresh

        with tempfile.NamedTemporaryFile() as restored_file, \
                mock.patch('cinder.objects.Backup.refresh',
                           side_effect=my_refresh):

            self.assertRaises(exception.BackupRestoreCancel, service.restore,
                              backup, volume_id, restored_file)
 def test_delete(self):
     self._create_backup_db_entry()
     service = nfs.NFSBackupDriver(self.ctxt)
     backup = objects.Backup.get_by_id(self.ctxt, 123)
     service.delete(backup)
Exemple #6
0
 def test_delete(self):
     self._create_backup_db_entry()
     service = nfs.NFSBackupDriver(self.ctxt)
     backup = db.backup_get(self.ctxt, 123)
     service.delete(backup)
 def test_delete(self):
     volume_id = '4b5c39f2-4428-473c-b85a-000000477eca'
     self._create_backup_db_entry(volume_id=volume_id)
     service = nfs.NFSBackupDriver(self.ctxt)
     backup = objects.Backup.get_by_id(self.ctxt, 123)
     service.delete(backup)