qubes/tests: change globals= to module= and fix syntax errors

This commit is contained in:
Wojtek Porczyk 2018-04-24 18:30:55 +02:00
parent dfe7688158
commit 843bbdb2c5
6 changed files with 39 additions and 37 deletions

View File

@ -1127,7 +1127,7 @@ def list_templates():
_templates = () _templates = ()
return _templates return _templates
def create_testcases_for_templates(name, *bases, globals, **kwds): def create_testcases_for_templates(name, *bases, module, **kwds):
'''Do-it-all helper for generating per-template tests via load_tests proto '''Do-it-all helper for generating per-template tests via load_tests proto
This does several things: This does several things:
@ -1149,27 +1149,24 @@ def create_testcases_for_templates(name, *bases, globals, **kwds):
... tests.addTests(loader.loadTestsFromNames( ... tests.addTests(loader.loadTestsFromNames(
... qubes.tests.create_testcases_for_templates( ... qubes.tests.create_testcases_for_templates(
... 'TC_00_MyTests', MyTestsMixIn, qubes.tests.SystemTestCase, ... 'TC_00_MyTests', MyTestsMixIn, qubes.tests.SystemTestCase,
... globals=globals()))) ... module=sys.modules[__name__])))
*NOTE* adding ``globals=globals()`` is *mandatory*, and to allow enforcing *NOTE* adding ``module=sys.modules[__name__]`` is *mandatory*, and to allow
this, it uses keyword-only argument syntax, which is Python 3 only. enforcing this, it uses keyword-only argument syntax, which is only in
Python 3.
''' '''
# Do not attempt to grab the module from traceback, since we are actually
# a generator and loadTestsFromNames may also be a generator, so it's not
# possible to correctly guess frame from stack. Explicit is better than
# implicit!
# NOTE globals is passed from calling function, and has slightly different
# semantics (no ``()``).
#
# Do not attempt to grab from traceback, since we are actually a generator
# and loadTestsFromNames may also be a generator, so it's not possible to
# correctly guess frame from stack. Explicit is better than implicit!
module = globals['__name__']
for template in list_templates(): for template in list_templates():
clsname = name + '_' + template clsname = name + '_' + template
cls = type(clsname, bases, {'template': template, **kwds}) cls = type(clsname, bases, {'template': template, **kwds})
cls.__module__ = module cls.__module__ = module.__name__
# XXX I wonder what other __dunder__ attrs did I miss # XXX I wonder what other __dunder__ attrs did I miss
globals[clsname] = cls setattr(module, clsname, cls)
yield '.'.join((module, clsname)) yield '.'.join((module.__name__, clsname))
def extra_info(obj): def extra_info(obj):
'''Return short info identifying object. '''Return short info identifying object.

View File

@ -18,14 +18,14 @@
# USA. # USA.
# #
import asyncio
import os import os
import shutil import shutil
import subprocess import subprocess
import sys
import tempfile import tempfile
import unittest import unittest
import asyncio
import qubes import qubes
import qubes.tests import qubes.tests
@ -388,6 +388,6 @@ Test package
def load_tests(loader, tests, pattern): def load_tests(loader, tests, pattern):
tests.addTests(loader.loadTestsFromNames( tests.addTests(loader.loadTestsFromNames(
qubes.tests.create_testcases_for_templates('TC_00_Dom0Upgrade', qubes.tests.create_testcases_for_templates('TC_00_Dom0Upgrade',
TC_00_Dom0UpgradeMixin, qubes.tests.SystemTestCase TC_00_Dom0UpgradeMixin, qubes.tests.SystemTestCase,
globals=globals()))) module=sys.modules[__name__])))
return tests return tests

View File

@ -25,8 +25,9 @@ import asyncio
import multiprocessing import multiprocessing
import os import os
import subprocess import subprocess
import unittest import sys
import time import time
import unittest
import qubes.tests import qubes.tests
import qubes.firewall import qubes.firewall
@ -1325,14 +1326,14 @@ SHA256:
def load_tests(loader, tests, pattern): def load_tests(loader, tests, pattern):
tests.addTests(loader.loadTestsFromNames( tests.addTests(loader.loadTestsFromNames(
qubes.tests.create_testcases_for_templates('VmNetworking', qubes.tests.create_testcases_for_templates('VmNetworking',
VmNetworkingMixin, qubes.tests.SystemTestCase VmNetworkingMixin, qubes.tests.SystemTestCase,
globals=globals()))) module=sys.modules[__name__])))
tests.addTests(loader.loadTestsFromNames( tests.addTests(loader.loadTestsFromNames(
qubes.tests.create_testcases_for_templates('VmIPv6Networking', qubes.tests.create_testcases_for_templates('VmIPv6Networking',
VmIPv6NetworkingMixin, qubes.tests.SystemTestCase VmIPv6NetworkingMixin, qubes.tests.SystemTestCase,
globals=globals()))) module=sys.modules[__name__])))
tests.addTests(loader.loadTestsFromNames( tests.addTests(loader.loadTestsFromNames(
qubes.tests.create_testcases_for_templates('VmUpdates', qubes.tests.create_testcases_for_templates('VmUpdates',
VmUpdates, qubes.tests.SystemTestCase VmUpdates, qubes.tests.SystemTestCase,
globals=globals()))) module=sys.modules[__name__])))
return tests return tests

View File

@ -23,8 +23,11 @@
import os import os
import subprocess import subprocess
import sys
import unittest import unittest
import qubes.tests import qubes.tests
@unittest.skipUnless(os.path.exists('/var/lib/qubes/vm-kernels/pvgrub2'), @unittest.skipUnless(os.path.exists('/var/lib/qubes/vm-kernels/pvgrub2'),
'grub-xen package not installed') 'grub-xen package not installed')
class TC_40_PVGrub(object): class TC_40_PVGrub(object):
@ -138,6 +141,6 @@ class TC_40_PVGrub(object):
def load_tests(loader, tests, pattern): def load_tests(loader, tests, pattern):
tests.addTests(loader.loadTestsFromNames( tests.addTests(loader.loadTestsFromNames(
qubes.tests.create_testcases_for_templates('TC_40_PVGrub', qubes.tests.create_testcases_for_templates('TC_40_PVGrub',
TC_40_PVGrub, qubes.tests.SystemTestCase TC_40_PVGrub, qubes.tests.SystemTestCase,
globals=globals()))) module=sys.modules[__name__])))
return tests return tests

View File

@ -17,13 +17,13 @@
# #
# You should have received a copy of the GNU General Public License along # You should have received a copy of the GNU General Public License along
# with this program; if not, see <http://www.gnu.org/licenses/>. # with this program; if not, see <http://www.gnu.org/licenses/>.
import os
import subprocess
import json
import shutil
import asyncio import asyncio
import json
import os
import shutil
import subprocess
import sys
import qubes.tests import qubes.tests
@ -394,6 +394,6 @@ class SaltVMTestMixin(SaltTestMixin):
def load_tests(loader, tests, pattern): def load_tests(loader, tests, pattern):
tests.addTests(loader.loadTestsFromNames( tests.addTests(loader.loadTestsFromNames(
qubes.tests.create_testcases_for_templates('TC_10_VMSalt', qubes.tests.create_testcases_for_templates('TC_10_VMSalt',
SaltVMTestMixin, qubes.tests.SystemTestCase SaltVMTestMixin, qubes.tests.SystemTestCase,
globals=globals()))) module=sys.modules[__name__])))
return tests return tests

View File

@ -23,6 +23,7 @@ import asyncio
import multiprocessing import multiprocessing
import os import os
import subprocess import subprocess
import sys
import unittest import unittest
from distutils import spawn from distutils import spawn
@ -1014,6 +1015,6 @@ class TC_10_Generic(qubes.tests.SystemTestCase):
def load_tests(loader, tests, pattern): def load_tests(loader, tests, pattern):
tests.addTests(loader.loadTestsFromNames( tests.addTests(loader.loadTestsFromNames(
qubes.tests.create_testcases_for_templates('TC_00_AppVM', qubes.tests.create_testcases_for_templates('TC_00_AppVM',
TC_00_AppVMMixin, qubes.tests.SystemTestCase TC_00_AppVMMixin, qubes.tests.SystemTestCase,
globals=globals()))) module=sys.modules[__name__])))
return tests return tests