When running tests clean up and remove qubesd.socket

Changed the inheritance hierarchy:

1. Renamed `SystemTestsMixin` to `SystemTestCase`
2. `SystemTestCase` is a child of `QubesTestCase`
3. All classes extending the prior `SystemTestsMixin` now just extend `object`
This commit is contained in:
Bahtiar `kalkin-` Gadimov 2017-07-12 19:01:15 +02:00
parent a936b07d7b
commit 3be7b23f46
No known key found for this signature in database
GPG Key ID: 07799AE179ED4FD4
14 changed files with 39 additions and 47 deletions

View File

@ -235,7 +235,7 @@ class _AssertNotRaisesContext(object):
self.exception = exc_value # store for later retrieval self.exception = exc_value # store for later retrieval
class _QrexecPolicyContext(object): class _QrexecPolicyContext(object):
'''Context manager for SystemTestsMixin.qrexec_policy''' '''Context manager for SystemTestCase.qrexec_policy'''
def __init__(self, service, source, destination, allow=True): def __init__(self, service, source, destination, allow=True):
try: try:
@ -365,8 +365,6 @@ class QubesTestCase(unittest.TestCase):
asyncio.set_event_loop(self.loop) asyncio.set_event_loop(self.loop)
def tearDown(self): def tearDown(self):
super(QubesTestCase, self).tearDown()
# The loop, when closing, throws a warning if there is # The loop, when closing, throws a warning if there is
# some unfinished bussiness. Let's catch that. # some unfinished bussiness. Let's catch that.
with warnings.catch_warnings(): with warnings.catch_warnings():
@ -555,18 +553,18 @@ class QubesTestCase(unittest.TestCase):
return VMPREFIX + name return VMPREFIX + name
class SystemTestsMixin(object): class SystemTestCase(QubesTestCase):
""" """
Mixin for integration tests. All the tests here should use self.app Mixin for integration tests. All the tests here should use self.app
object and when need qubes.xml path - should use :py:data:`XMLPATH` object and when need qubes.xml path - should use :py:data:`XMLPATH`
defined in this file. defined in this file.
Every VM created by test, must use :py:meth:`SystemTestsMixin.make_vm_name` Every VM created by test, must use :py:meth:`SystemTestCase.make_vm_name`
for VM name. for VM name.
By default self.app represents empty collection, if anything is needed By default self.app represents empty collection, if anything is needed
there from the real collection it can be imported from self.host_app in there from the real collection it can be imported from self.host_app in
:py:meth:`SystemTestsMixin.setUp`. But *can not be modified* in any way - :py:meth:`SystemTestCase.setUp`. But *can not be modified* in any way -
this include both changing attributes in this include both changing attributes in
:py:attr:`SystemTestsMixin.host_app` and modifying files of such imported :py:attr:`SystemTestCase.host_app` and modifying files of such imported
VM. If test need to make some modification, it must clone the VM first. VM. If test need to make some modification, it must clone the VM first.
If some group of tests needs class-wide initialization, first of all the If some group of tests needs class-wide initialization, first of all the
@ -579,7 +577,7 @@ class SystemTestsMixin(object):
def setUp(self): def setUp(self):
if not in_dom0: if not in_dom0:
self.skipTest('outside dom0') self.skipTest('outside dom0')
super(SystemTestsMixin, self).setUp() super(SystemTestCase, self).setUp()
self.remove_test_vms() self.remove_test_vms()
# need some information from the real qubes.xml - at least installed # need some information from the real qubes.xml - at least installed
@ -656,11 +654,11 @@ class SystemTestsMixin(object):
for sock in server.sockets: for sock in server.sockets:
os.unlink(sock.getsockname()) os.unlink(sock.getsockname())
server.close() server.close()
self.loop.run_until_complete(asyncio.wait([ self.loop.run_until_complete(asyncio.wait([
server.wait_closed() for server in self.qubesd])) server.wait_closed() for server in self.qubesd]))
super(SystemTestsMixin, self).tearDown() super(SystemTestCase, self).tearDown()
# remove all references to VM objects, to release resources - most # remove all references to VM objects, to release resources - most
# importantly file descriptors; this object will live # importantly file descriptors; this object will live
# during the whole test run, but all the file descriptors would be # during the whole test run, but all the file descriptors would be
@ -673,7 +671,7 @@ class SystemTestsMixin(object):
@classmethod @classmethod
def tearDownClass(cls): def tearDownClass(cls):
super(SystemTestsMixin, cls).tearDownClass() super(SystemTestCase, cls).tearDownClass()
if not in_dom0: if not in_dom0:
return return
cls.remove_test_vms(xmlpath=CLASS_XMLPATH, prefix=CLSVMPREFIX) cls.remove_test_vms(xmlpath=CLASS_XMLPATH, prefix=CLSVMPREFIX)

View File

@ -26,7 +26,7 @@ import qubes.vm.appvm
import qubes.vm.templatevm import qubes.vm.templatevm
class ExtraTestCase(qubes.tests.SystemTestsMixin, qubes.tests.QubesTestCase): class ExtraTestCase(qubes.tests.SystemTestCase):
template = None template = None

View File

@ -40,7 +40,7 @@ import qubes.vm.templatevm
import qubes.vm.qubesvm import qubes.vm.qubesvm
# noinspection PyAttributeOutsideInit # noinspection PyAttributeOutsideInit
class BackupTestsMixin(qubes.tests.SystemTestsMixin): class BackupTestsMixin(object):
class BackupErrorHandler(logging.Handler): class BackupErrorHandler(logging.Handler):
def __init__(self, errors_queue, level=logging.NOTSET): def __init__(self, errors_queue, level=logging.NOTSET):
super(BackupTestsMixin.BackupErrorHandler, self).__init__(level) super(BackupTestsMixin.BackupErrorHandler, self).__init__(level)
@ -281,7 +281,7 @@ class BackupTestsMixin(qubes.tests.SystemTestsMixin):
vm.name)) vm.name))
class TC_00_Backup(BackupTestsMixin, qubes.tests.QubesTestCase): class TC_00_Backup(BackupTestsMixin, qubes.tests.SystemTestCase):
def test_000_basic_backup(self): def test_000_basic_backup(self):
vms = self.create_backup_vms() vms = self.create_backup_vms()
orig_hashes = self.vm_checksum(vms) orig_hashes = self.vm_checksum(vms)

View File

@ -143,7 +143,7 @@ compression-filter=gzip
''' '''
class TC_00_BackupCompatibility( class TC_00_BackupCompatibility(
qubes.tests.integ.backup.BackupTestsMixin, qubes.tests.QubesTestCase): qubes.tests.integ.backup.BackupTestsMixin, qubes.tests.SystemTestCase):
def tearDown(self): def tearDown(self):
self.remove_test_vms(prefix="test-") self.remove_test_vms(prefix="test-")

View File

@ -42,7 +42,7 @@ import qubes.vm.templatevm
import libvirt # pylint: disable=import-error import libvirt # pylint: disable=import-error
class TC_00_Basic(qubes.tests.SystemTestsMixin, qubes.tests.QubesTestCase): class TC_00_Basic(qubes.tests.SystemTestCase):
def setUp(self): def setUp(self):
super(TC_00_Basic, self).setUp() super(TC_00_Basic, self).setUp()
self.init_default_template() self.init_default_template()
@ -66,7 +66,7 @@ class TC_00_Basic(qubes.tests.SystemTestsMixin, qubes.tests.QubesTestCase):
vm.storage.verify() vm.storage.verify()
class TC_01_Properties(qubes.tests.SystemTestsMixin, qubes.tests.QubesTestCase): class TC_01_Properties(qubes.tests.SystemTestCase):
# pylint: disable=attribute-defined-outside-init # pylint: disable=attribute-defined-outside-init
def setUp(self): def setUp(self):
super(TC_01_Properties, self).setUp() super(TC_01_Properties, self).setUp()
@ -75,7 +75,6 @@ class TC_01_Properties(qubes.tests.SystemTestsMixin, qubes.tests.QubesTestCase):
self.vm = self.app.add_new_vm(qubes.vm.appvm.AppVM, name=self.vmname, self.vm = self.app.add_new_vm(qubes.vm.appvm.AppVM, name=self.vmname,
template=self.app.default_template, template=self.app.default_template,
label='red') label='red')
self.loop.run_until_complete(self.vm.create_on_disk())
@unittest.expectedFailure @unittest.expectedFailure
def test_030_clone(self): def test_030_clone(self):
@ -185,13 +184,12 @@ class TC_01_Properties(qubes.tests.SystemTestsMixin, qubes.tests.QubesTestCase):
self.vm2 = self.app.add_new_vm(qubes.vm.appvm.AppVM, self.vm2 = self.app.add_new_vm(qubes.vm.appvm.AppVM,
name=vm2name, template=self.app.default_template, label='red') name=vm2name, template=self.app.default_template, label='red')
self.loop.run_until_complete(self.vm2.create_on_disk())
with self.assertNotRaises(OSError): with self.assertNotRaises(OSError):
with self.assertRaises(qubes.exc.QubesException): with self.assertRaises(qubes.exc.QubesException):
self.vm2.name = self.vmname self.vm2.name = self.vmname
class TC_02_QvmPrefs(qubes.tests.SystemTestsMixin, qubes.tests.QubesTestCase): class TC_02_QvmPrefs(qubes.tests.SystemTestCase):
# pylint: disable=attribute-defined-outside-init # pylint: disable=attribute-defined-outside-init
def setUp(self): def setUp(self):
@ -302,8 +300,7 @@ class TC_02_QvmPrefs(qubes.tests.SystemTestsMixin, qubes.tests.QubesTestCase):
self.execute_tests('kernel', [('default', '', False)]) self.execute_tests('kernel', [('default', '', False)])
self.execute_tests('kernelopts', [('default', '', False)]) self.execute_tests('kernelopts', [('default', '', False)])
class TC_03_QvmRevertTemplateChanges(qubes.tests.SystemTestsMixin, class TC_03_QvmRevertTemplateChanges(qubes.tests.SystemTestCase):
qubes.tests.QubesTestCase):
# pylint: disable=attribute-defined-outside-init # pylint: disable=attribute-defined-outside-init
def setUp(self): def setUp(self):
@ -371,7 +368,7 @@ class TC_03_QvmRevertTemplateChanges(qubes.tests.SystemTestsMixin,
self.setup_hvm_template() self.setup_hvm_template()
self._do_test() self._do_test()
class TC_30_Gui_daemon(qubes.tests.SystemTestsMixin, qubes.tests.QubesTestCase): class TC_30_Gui_daemon(qubes.tests.SystemTestCase):
def setUp(self): def setUp(self):
super(TC_30_Gui_daemon, self).setUp() super(TC_30_Gui_daemon, self).setUp()
self.init_default_template() self.init_default_template()
@ -448,7 +445,7 @@ class TC_30_Gui_daemon(qubes.tests.SystemTestsMixin, qubes.tests.QubesTestCase):
self.assertEqual(clipboard_source, "", self.assertEqual(clipboard_source, "",
"Clipboard not wiped after paste - owner") "Clipboard not wiped after paste - owner")
class TC_05_StandaloneVM(qubes.tests.SystemTestsMixin, qubes.tests.QubesTestCase): class TC_05_StandaloneVM(qubes.tests.SystemTestCase):
def setUp(self): def setUp(self):
super(TC_05_StandaloneVM, self).setUp() super(TC_05_StandaloneVM, self).setUp()
self.init_default_template() self.init_default_template()

View File

@ -31,8 +31,7 @@ import qubes.ext.pci
import qubes.tests import qubes.tests
class TC_00_Devices_PCI(qubes.tests.SystemTestsMixin, class TC_00_Devices_PCI(qubes.tests.SystemTestCase):
qubes.tests.QubesTestCase):
def setUp(self): def setUp(self):
super(TC_00_Devices_PCI, self).setUp() super(TC_00_Devices_PCI, self).setUp()
if self._testMethodName not in ['test_000_list']: if self._testMethodName not in ['test_000_list']:

View File

@ -27,8 +27,7 @@ import unittest
import os import os
import time import time
class TC_04_DispVM(qubes.tests.SystemTestsMixin, class TC_04_DispVM(qubes.tests.SystemTestCase):
qubes.tests.QubesTestCase):
def setUp(self): def setUp(self):
super(TC_04_DispVM, self).setUp() super(TC_04_DispVM, self).setUp()
@ -91,7 +90,7 @@ class TC_04_DispVM(qubes.tests.SystemTestsMixin,
self.assertNotIn(dispvm_name, self.app.domains) self.assertNotIn(dispvm_name, self.app.domains)
class TC_20_DispVMMixin(qubes.tests.SystemTestsMixin): class TC_20_DispVMMixin(object):
def setUp(self): def setUp(self):
super(TC_20_DispVMMixin, self).setUp() super(TC_20_DispVMMixin, self).setUp()
@ -265,7 +264,7 @@ def load_tests(loader, tests, pattern):
tests.addTests(loader.loadTestsFromTestCase( tests.addTests(loader.loadTestsFromTestCase(
type( type(
'TC_20_DispVM_' + template, 'TC_20_DispVM_' + template,
(TC_20_DispVMMixin, qubes.tests.QubesTestCase), (TC_20_DispVMMixin, qubes.tests.SystemTestCase),
{'template': template}))) {'template': template})))
return tests return tests

View File

@ -32,7 +32,7 @@ VM_PREFIX = "test-"
@unittest.skipUnless(os.path.exists('/usr/bin/rpmsign') and @unittest.skipUnless(os.path.exists('/usr/bin/rpmsign') and
os.path.exists('/usr/bin/rpmbuild'), os.path.exists('/usr/bin/rpmbuild'),
'rpm-sign and/or rpm-build not installed') 'rpm-sign and/or rpm-build not installed')
class TC_00_Dom0UpgradeMixin(qubes.tests.SystemTestsMixin): class TC_00_Dom0UpgradeMixin(object):
""" """
Tests for downloading dom0 updates using VMs based on different templates Tests for downloading dom0 updates using VMs based on different templates
""" """
@ -369,7 +369,7 @@ def load_tests(loader, tests, pattern):
tests.addTests(loader.loadTestsFromTestCase( tests.addTests(loader.loadTestsFromTestCase(
type( type(
'TC_00_Dom0Upgrade_' + template, 'TC_00_Dom0Upgrade_' + template,
(TC_00_Dom0UpgradeMixin, qubes.tests.QubesTestCase), (TC_00_Dom0UpgradeMixin, qubes.tests.SystemTestCase),
{'template': template}))) {'template': template})))
return tests return tests

View File

@ -37,7 +37,7 @@ class NcVersion:
Nmap = 2 Nmap = 2
# noinspection PyAttributeOutsideInit # noinspection PyAttributeOutsideInit
class VmNetworkingMixin(qubes.tests.SystemTestsMixin): class VmNetworkingMixin(object):
test_ip = '192.168.123.45' test_ip = '192.168.123.45'
test_name = 'test.example.com' test_name = 'test.example.com'
@ -645,7 +645,7 @@ class VmNetworkingMixin(qubes.tests.SystemTestsMixin):
# noinspection PyAttributeOutsideInit # noinspection PyAttributeOutsideInit
class VmUpdatesMixin(qubes.tests.SystemTestsMixin): class VmUpdatesMixin(object):
""" """
Tests for VM updates Tests for VM updates
""" """
@ -944,11 +944,11 @@ def load_tests(loader, tests, pattern):
tests.addTests(loader.loadTestsFromTestCase( tests.addTests(loader.loadTestsFromTestCase(
type( type(
'VmNetworking_' + template, 'VmNetworking_' + template,
(VmNetworkingMixin, qubes.tests.QubesTestCase), (VmNetworkingMixin, qubes.tests.SystemTestCase),
{'template': template}))) {'template': template})))
tests.addTests(loader.loadTestsFromTestCase( tests.addTests(loader.loadTestsFromTestCase(
type( type(
'VmUpdates_' + template, 'VmUpdates_' + template,
(VmUpdatesMixin, qubes.tests.QubesTestCase), (VmUpdatesMixin, qubes.tests.SystemTestCase),
{'template': template}))) {'template': template})))
return tests return tests

View File

@ -29,7 +29,7 @@ import qubes.tests.storage_lvm
import qubes.vm.appvm import qubes.vm.appvm
class StorageTestMixin(qubes.tests.SystemTestsMixin): class StorageTestMixin(object):
def setUp(self): def setUp(self):
super(StorageTestMixin, self).setUp() super(StorageTestMixin, self).setUp()
self.init_default_template() self.init_default_template()
@ -254,7 +254,7 @@ class StorageTestMixin(qubes.tests.SystemTestsMixin):
user='root') user='root')
class StorageFile(StorageTestMixin, qubes.tests.QubesTestCase): class StorageFile(StorageTestMixin, qubes.tests.SystemTestCase):
def init_pool(self): def init_pool(self):
self.dir_path = '/var/tmp/test-pool' self.dir_path = '/var/tmp/test-pool'
self.pool = self.app.add_pool(dir_path=self.dir_path, self.pool = self.app.add_pool(dir_path=self.dir_path,
@ -269,7 +269,7 @@ class StorageFile(StorageTestMixin, qubes.tests.QubesTestCase):
@qubes.tests.storage_lvm.skipUnlessLvmPoolExists @qubes.tests.storage_lvm.skipUnlessLvmPoolExists
class StorageLVM(StorageTestMixin, qubes.tests.QubesTestCase): class StorageLVM(StorageTestMixin, qubes.tests.SystemTestCase):
def init_pool(self): def init_pool(self):
# check if the default LVM Thin pool qubes_dom0/pool00 exists # check if the default LVM Thin pool qubes_dom0/pool00 exists
volume_group, thin_pool = \ volume_group, thin_pool = \

View File

@ -25,8 +25,7 @@ import qubes.tools.qubes_create
import qubes.tests import qubes.tests
@qubes.tests.skipUnlessDom0 @qubes.tests.skipUnlessDom0
class TC_00_qubes_create( class TC_00_qubes_create(qubes.tests.SystemTestCase):
qubes.tests.SystemTestsMixin, qubes.tests.QubesTestCase):
def test_000_basic(self): def test_000_basic(self):
self.assertEqual(0, qubes.tools.qubes_create.main([ self.assertEqual(0, qubes.tools.qubes_create.main([
'--qubesxml', qubes.tests.XMLPATH])) '--qubesxml', qubes.tests.XMLPATH]))

View File

@ -35,7 +35,7 @@ import qubes.vm.templatevm
TEST_DATA = b"0123456789" * 1024 TEST_DATA = b"0123456789" * 1024
class TC_00_AppVMMixin(qubes.tests.SystemTestsMixin): class TC_00_AppVMMixin(object):
def setUp(self): def setUp(self):
super(TC_00_AppVMMixin, self).setUp() super(TC_00_AppVMMixin, self).setUp()
self.init_default_template(self.template) self.init_default_template(self.template)
@ -959,7 +959,7 @@ int main(int argc, char **argv) {
if vm_image != dom0_image: if vm_image != dom0_image:
self.fail("Dom0 window doesn't match VM window content") self.fail("Dom0 window doesn't match VM window content")
class TC_10_Generic(qubes.tests.SystemTestsMixin, qubes.tests.QubesTestCase): class TC_10_Generic(qubes.tests.SystemTestCase):
def setUp(self): def setUp(self):
super(TC_10_Generic, self).setUp() super(TC_10_Generic, self).setUp()
self.init_default_template() self.init_default_template()
@ -1011,7 +1011,7 @@ def load_tests(loader, tests, pattern):
tests.addTests(loader.loadTestsFromTestCase( tests.addTests(loader.loadTestsFromTestCase(
type( type(
'TC_00_AppVM_' + template, 'TC_00_AppVM_' + template,
(TC_00_AppVMMixin, qubes.tests.QubesTestCase), (TC_00_AppVMMixin, qubes.tests.SystemTestCase),
{'template': template}))) {'template': template})))
return tests return tests

View File

@ -22,7 +22,7 @@ import qubes.log
from qubes.exc import QubesException from qubes.exc import QubesException
from qubes.storage import pool_drivers from qubes.storage import pool_drivers
from qubes.storage.file import FilePool from qubes.storage.file import FilePool
from qubes.tests import QubesTestCase from qubes.tests import SystemTestCase
# :pylint: disable=invalid-name # :pylint: disable=invalid-name
@ -75,7 +75,7 @@ class TestApp(qubes.Qubes):
load=False, offline_mode=True, **kwargs) load=False, offline_mode=True, **kwargs)
self.load_initial_values() self.load_initial_values()
class TC_00_Pool(QubesTestCase): class TC_00_Pool(SystemTestCase):
""" This class tests the utility methods from :mod:``qubes.storage`` """ """ This class tests the utility methods from :mod:``qubes.storage`` """
def setUp(self): def setUp(self):

View File

@ -160,7 +160,7 @@ class TC_00_ThinPool(ThinPoolBase):
volume.remove() volume.remove()
@skipUnlessLvmPoolExists @skipUnlessLvmPoolExists
class TC_01_ThinPool(qubes.tests.SystemTestsMixin, ThinPoolBase): class TC_01_ThinPool(qubes.tests.SystemTestCase, ThinPoolBase):
''' Sanity tests for :py:class:`qubes.storage.lvm.ThinPool` ''' ''' Sanity tests for :py:class:`qubes.storage.lvm.ThinPool` '''
def setUp(self): def setUp(self):