Просмотр исходного кода

tests: move external test loader to qubes.tests.extra module

This way, tests will appear as from 'extra' module.

Besides the move, some minor changes:
 - add missing self.qc.unlock_db() in create_vms()
 - suffix per-template tests with template name

QubesOS/qubes-issues#1800
Marek Marczykowski-Górecki 8 лет назад
Родитель
Сommit
bc240bd742
3 измененных файлов с 112 добавлено и 78 удалено
  1. 2 0
      tests/Makefile
  2. 1 77
      tests/__init__.py
  3. 109 1
      tests/extra.py

+ 2 - 0
tests/Makefile

@@ -33,3 +33,5 @@ endif
 	cp storage_xen.py[co] $(DESTDIR)$(PYTHON_TESTSPATH)
 	cp hardware.py $(DESTDIR)$(PYTHON_TESTSPATH)
 	cp hardware.py[co] $(DESTDIR)$(PYTHON_TESTSPATH)
+	cp extra.py $(DESTDIR)$(PYTHON_TESTSPATH)
+	cp extra.py[co] $(DESTDIR)$(PYTHON_TESTSPATH)

+ 1 - 77
tests/__init__.py

@@ -740,48 +740,6 @@ class BackupTestsMixin(SystemTestsMixin):
         f.truncate(size)
         f.close()
 
-class ExtraTestMixin(SystemTestsMixin):
-
-    template = None
-
-    def setUp(self):
-        super(ExtraTestMixin, self).setUp()
-        self.qc.unlock_db()
-
-    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
-        """
-        self.qc.lock_db_for_writing()
-        self.qc.load()
-        if self.template:
-            template = self.qc.get_vm_by_name(self.template)
-        else:
-            template = self.qc.get_default_template()
-        for vmname in names:
-            vm = self.qc.add_new_vm("QubesAppVm",
-                                    name=self.make_vm_name(vmname),
-                                    template=template)
-            vm.create_on_disk(verbose=False)
-        self.save_and_reload_db()
-
-        # get objects after reload
-        vms = []
-        for vmname in names:
-            vms.append(self.qc.get_vm_by_name(self.make_vm_name(vmname)))
-        return vms
-
-    def enable_network(self):
-        """
-        Enable access to the network. Must be called before creating VMs.
-        """
-        # nothing to do in core2
-        pass
-
 
 def load_tests(loader, tests, pattern):
     # discard any tests from this module, because it hosts base classes
@@ -798,43 +756,9 @@ def load_tests(loader, tests, pattern):
             'qubes.tests.storage',
             'qubes.tests.storage_xen',
             'qubes.tests.hardware',
+            'qubes.tests.extra',
             ):
         tests.addTests(loader.loadTestsFromName(modname))
-
-    for entry in pkg_resources.iter_entry_points('qubes.tests.extra'):
-        for test_case in entry():
-            tests.addTests(loader.loadTestsFromTestCase(
-                type(
-                    entry.name + '_' + test_case.__name__,
-                    (test_case, ExtraTestMixin, QubesTestCase),
-                    {}
-                )
-            ))
-
-
-    try:
-        qc = qubes.qubes.QubesVmCollection()
-        qc.lock_db_for_reading()
-        qc.load()
-        qc.unlock_db()
-        templates = [vm.name for vm in qc.values() if
-                     isinstance(vm, qubes.qubes.QubesTemplateVm)]
-    except OSError:
-        templates = []
-
-    for entry in pkg_resources.iter_entry_points(
-            'qubes.tests.extra.for_template'):
-        for test_case in entry():
-            for template in templates:
-                tests.addTests(loader.loadTestsFromTestCase(
-                    type(
-                        entry.name + '_' + test_case.__name__,
-                        (test_case, ExtraTestMixin,
-                         QubesTestCase),
-                        {'template': template}
-                    )
-                ))
-
     return tests
 
 

+ 109 - 1
tests/extra.py

@@ -1 +1,109 @@
-__author__ = 'user'
+#!/usr/bin/python2 -O
+# vim: fileencoding=utf-8
+
+#
+# The Qubes OS Project, https://www.qubes-os.org/
+#
+# Copyright (C) 2016
+#                   Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+
+import pkg_resources
+import qubes.tests
+import qubes.qubes
+
+
+class ExtraTestMixin(qubes.tests.SystemTestsMixin):
+
+    template = None
+
+    def setUp(self):
+        super(ExtraTestMixin, self).setUp()
+        self.qc.unlock_db()
+
+    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
+        """
+        self.qc.lock_db_for_writing()
+        self.qc.load()
+        if self.template:
+            template = self.qc.get_vm_by_name(self.template)
+        else:
+            template = self.qc.get_default_template()
+        for vmname in names:
+            vm = self.qc.add_new_vm("QubesAppVm",
+                                    name=self.make_vm_name(vmname),
+                                    template=template)
+            vm.create_on_disk(verbose=False)
+        self.save_and_reload_db()
+        self.qc.unlock_db()
+
+        # get objects after reload
+        vms = []
+        for vmname in names:
+            vms.append(self.qc.get_vm_by_name(self.make_vm_name(vmname)))
+        return vms
+
+    def enable_network(self):
+        """
+        Enable access to the network. Must be called before creating VMs.
+        """
+        # nothing to do in core2
+        pass
+
+
+def load_tests(loader, tests, pattern):
+    for entry in pkg_resources.iter_entry_points('qubes.tests.extra'):
+        for test_case in entry():
+            tests.addTests(loader.loadTestsFromTestCase(
+                type(
+                    entry.name + '_' + test_case.__name__,
+                    (test_case, ExtraTestMixin, qubes.tests.QubesTestCase),
+                    {}
+                )
+            ))
+
+    try:
+        qc = qubes.qubes.QubesVmCollection()
+        qc.lock_db_for_reading()
+        qc.load()
+        qc.unlock_db()
+        templates = [vm.name for vm in qc.values() if
+                     isinstance(vm, qubes.qubes.QubesTemplateVm)]
+    except OSError:
+        templates = []
+
+    for entry in pkg_resources.iter_entry_points(
+            'qubes.tests.extra.for_template'):
+        for test_case in entry.load()():
+            for template in templates:
+                tests.addTests(loader.loadTestsFromTestCase(
+                    type(
+                        '{}_{}_{}'.format(
+                            entry.name, test_case.__name__, template),
+                        (test_case, ExtraTestMixin,
+                         qubes.tests.QubesTestCase),
+                        {'template': template}
+                    )
+                ))
+
+    return tests