tests: admin.backup.*
Those tests are only about Admin API integration, not about actual backup backend code QubesOS/qubes-issues#2931
This commit is contained in:
parent
74375146e8
commit
dbea03ad1f
@ -24,6 +24,7 @@ import asyncio
|
|||||||
import operator
|
import operator
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
import tempfile
|
||||||
import unittest.mock
|
import unittest.mock
|
||||||
|
|
||||||
import libvirt
|
import libvirt
|
||||||
@ -1820,6 +1821,139 @@ class TC_00_VMs(AdminAPITestCase):
|
|||||||
self.assertFalse(self.vm.firewall.save.called)
|
self.assertFalse(self.vm.firewall.save.called)
|
||||||
self.assertFalse(self.app.save.called)
|
self.assertFalse(self.app.save.called)
|
||||||
|
|
||||||
|
def test_600_backup_info(self):
|
||||||
|
backup_profile = (
|
||||||
|
'include:\n'
|
||||||
|
' - test-vm1\n'
|
||||||
|
'destination_vm: test-vm1\n'
|
||||||
|
'destination_path: /var/tmp\n'
|
||||||
|
'passphrase_text: test\n'
|
||||||
|
)
|
||||||
|
expected_info = (
|
||||||
|
'------------------+--------------+--------------+\n'
|
||||||
|
' VM | type | size |\n'
|
||||||
|
'------------------+--------------+--------------+\n'
|
||||||
|
' test-vm1 | VM | 0 |\n'
|
||||||
|
'------------------+--------------+--------------+\n'
|
||||||
|
' Total size: | 0 |\n'
|
||||||
|
'------------------+--------------+--------------+\n'
|
||||||
|
'VMs not selected for backup:\n'
|
||||||
|
' - dom0\n'
|
||||||
|
' - test-template\n'
|
||||||
|
)
|
||||||
|
with tempfile.TemporaryDirectory() as profile_dir:
|
||||||
|
with open(os.path.join(profile_dir, 'testprofile.conf'), 'w') as \
|
||||||
|
profile_file:
|
||||||
|
profile_file.write(backup_profile)
|
||||||
|
with unittest.mock.patch('qubes.config.backup_profile_dir',
|
||||||
|
profile_dir):
|
||||||
|
result = self.call_mgmt_func(b'admin.backup.Info', b'dom0',
|
||||||
|
b'testprofile')
|
||||||
|
self.assertEqual(result, expected_info)
|
||||||
|
|
||||||
|
def test_601_backup_info_profile_missing_destination_path(self):
|
||||||
|
backup_profile = (
|
||||||
|
'include:\n'
|
||||||
|
' - test-vm1\n'
|
||||||
|
'destination_vm: test-vm1\n'
|
||||||
|
'passphrase_text: test\n'
|
||||||
|
)
|
||||||
|
with tempfile.TemporaryDirectory() as profile_dir:
|
||||||
|
with open(os.path.join(profile_dir, 'testprofile.conf'), 'w') as \
|
||||||
|
profile_file:
|
||||||
|
profile_file.write(backup_profile)
|
||||||
|
with unittest.mock.patch('qubes.config.backup_profile_dir',
|
||||||
|
profile_dir):
|
||||||
|
with self.assertRaises(qubes.exc.QubesException):
|
||||||
|
self.call_mgmt_func(b'admin.backup.Info', b'dom0',
|
||||||
|
b'testprofile')
|
||||||
|
|
||||||
|
def test_602_backup_info_profile_missing_destination_vm(self):
|
||||||
|
backup_profile = (
|
||||||
|
'include:\n'
|
||||||
|
' - test-vm1\n'
|
||||||
|
'destination_path: /home/user\n'
|
||||||
|
'passphrase_text: test\n'
|
||||||
|
)
|
||||||
|
with tempfile.TemporaryDirectory() as profile_dir:
|
||||||
|
with open(os.path.join(profile_dir, 'testprofile.conf'), 'w') as \
|
||||||
|
profile_file:
|
||||||
|
profile_file.write(backup_profile)
|
||||||
|
with unittest.mock.patch('qubes.config.backup_profile_dir',
|
||||||
|
profile_dir):
|
||||||
|
with self.assertRaises(qubes.exc.QubesException):
|
||||||
|
self.call_mgmt_func(b'admin.backup.Info', b'dom0',
|
||||||
|
b'testprofile')
|
||||||
|
|
||||||
|
def test_610_backup_cancel_not_running(self):
|
||||||
|
with self.assertRaises(qubes.exc.QubesException):
|
||||||
|
self.call_mgmt_func(b'admin.backup.Cancel', b'dom0',
|
||||||
|
b'testprofile')
|
||||||
|
|
||||||
|
@unittest.mock.patch('qubes.backup.Backup')
|
||||||
|
def test_620_backup_execute(self, mock_backup):
|
||||||
|
backup_profile = (
|
||||||
|
'include:\n'
|
||||||
|
' - test-vm1\n'
|
||||||
|
'destination_vm: test-vm1\n'
|
||||||
|
'destination_path: /home/user\n'
|
||||||
|
'passphrase_text: test\n'
|
||||||
|
)
|
||||||
|
mock_backup.return_value.backup_do.side_effect = self.dummy_coro
|
||||||
|
with tempfile.TemporaryDirectory() as profile_dir:
|
||||||
|
with open(os.path.join(profile_dir, 'testprofile.conf'), 'w') as \
|
||||||
|
profile_file:
|
||||||
|
profile_file.write(backup_profile)
|
||||||
|
with unittest.mock.patch('qubes.config.backup_profile_dir',
|
||||||
|
profile_dir):
|
||||||
|
result = self.call_mgmt_func(b'admin.backup.Execute', b'dom0',
|
||||||
|
b'testprofile')
|
||||||
|
self.assertIsNone(result)
|
||||||
|
mock_backup.assert_called_once_with(
|
||||||
|
self.app,
|
||||||
|
{self.vm},
|
||||||
|
target_vm=self.vm,
|
||||||
|
target_dir='/home/user',
|
||||||
|
compressed=True,
|
||||||
|
passphrase='test')
|
||||||
|
mock_backup.return_value.backup_do.assert_called_once_with()
|
||||||
|
|
||||||
|
@unittest.mock.patch('qubes.backup.Backup')
|
||||||
|
def test_621_backup_execute_passphrase_service(self, mock_backup):
|
||||||
|
backup_profile = (
|
||||||
|
'include:\n'
|
||||||
|
' - test-vm1\n'
|
||||||
|
'destination_vm: test-vm1\n'
|
||||||
|
'destination_path: /home/user\n'
|
||||||
|
'passphrase_vm: test-vm1\n'
|
||||||
|
)
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def service_passphrase(*args, **kwargs):
|
||||||
|
return ('pass-from-vm', None)
|
||||||
|
|
||||||
|
mock_backup.return_value.backup_do.side_effect = self.dummy_coro
|
||||||
|
self.vm.run_service_for_stdio = unittest.mock.Mock(
|
||||||
|
side_effect=service_passphrase)
|
||||||
|
with tempfile.TemporaryDirectory() as profile_dir:
|
||||||
|
with open(os.path.join(profile_dir, 'testprofile.conf'), 'w') as \
|
||||||
|
profile_file:
|
||||||
|
profile_file.write(backup_profile)
|
||||||
|
with unittest.mock.patch('qubes.config.backup_profile_dir',
|
||||||
|
profile_dir):
|
||||||
|
result = self.call_mgmt_func(b'admin.backup.Execute', b'dom0',
|
||||||
|
b'testprofile')
|
||||||
|
self.assertIsNone(result)
|
||||||
|
mock_backup.assert_called_once_with(
|
||||||
|
self.app,
|
||||||
|
{self.vm},
|
||||||
|
target_vm=self.vm,
|
||||||
|
target_dir='/home/user',
|
||||||
|
compressed=True,
|
||||||
|
passphrase='pass-from-vm')
|
||||||
|
mock_backup.return_value.backup_do.assert_called_once_with()
|
||||||
|
self.vm.run_service_for_stdio.assert_called_with(
|
||||||
|
'qubes.BackupPassphrase+testprofile')
|
||||||
|
|
||||||
def test_990_vm_unexpected_payload(self):
|
def test_990_vm_unexpected_payload(self):
|
||||||
methods_with_no_payload = [
|
methods_with_no_payload = [
|
||||||
|
Loading…
Reference in New Issue
Block a user