# # The Qubes OS Project, https://www.qubes-os.org/ # # Copyright (C) 2016 # Marek Marczykowski-Górecki # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, see . # import sys import pkg_resources import qubes.tests import qubes.vm.appvm class ExtraTestCase(qubes.tests.SystemTestCase): template = None def setUp(self): super(ExtraTestCase, self).setUp() self.init_default_template(self.template) def create_vms(self, names): """ Create AppVMs for the duration of the test. Will be automatically removed after completing the test. :param names: list of VM names to create (each of them will be prefixed with some test specific string) :return: list of created VM objects """ if self.template: template = self.app.domains[self.template] else: template = self.app.default_template for vmname in names: vm = self.app.add_new_vm(qubes.vm.appvm.AppVM, name=self.make_vm_name(vmname), template=template, label='red') vm.create_on_disk() self.app.save() # get objects after reload vms = [] for vmname in names: vms.append(self.app.domains[self.make_vm_name(vmname)]) return vms def enable_network(self): """ Enable access to the network. Must be called before creating VMs. """ self.init_networking() def load_tests(loader, tests, pattern): for entry in pkg_resources.iter_entry_points('qubes.tests.extra'): try: for test_case in entry.load()(): tests.addTests(loader.loadTestsFromTestCase(test_case)) except Exception as err: # pylint: disable=broad-except def runTest(self): raise err ExtraLoadFailure = type('ExtraLoadFailure', (qubes.tests.QubesTestCase,), {entry.name: runTest}) tests.addTest(ExtraLoadFailure(entry.name)) for entry in pkg_resources.iter_entry_points( 'qubes.tests.extra.for_template'): try: for test_case in entry.load()(): for template in qubes.tests.list_templates(): tests.addTests(loader.loadTestsFromTestCase( type( '{}_{}_{}'.format( entry.name, test_case.__name__, template), (test_case,), {'template': template} ) )) except Exception as err: # pylint: disable=broad-except def runTest(self): raise err ExtraForTemplateLoadFailure = type('ExtraForTemplateLoadFailure', (qubes.tests.QubesTestCase,), {entry.name: runTest}) tests.addTest(ExtraLoadFailure(entry.name)) return tests