|
Packit Service |
a04d08 |
# This file is part of cloud-init. See LICENSE file for license information.
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
"""Main init."""
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
import importlib
|
|
Packit Service |
a04d08 |
import inspect
|
|
Packit Service |
a04d08 |
import unittest
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
from cloudinit.util import read_conf
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
from tests.cloud_tests import config
|
|
Packit Service |
a04d08 |
from tests.cloud_tests.testcases.base import CloudTestCase as base_test
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def discover_test(test_name):
|
|
Packit Service |
a04d08 |
"""Discover tests in test file for 'testname'.
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
@return_value: list of test classes
|
|
Packit Service |
a04d08 |
"""
|
|
Packit Service |
a04d08 |
testmod_name = 'tests.cloud_tests.testcases.{}'.format(
|
|
Packit Service |
a04d08 |
config.name_sanitize(test_name))
|
|
Packit Service |
a04d08 |
try:
|
|
Packit Service |
a04d08 |
testmod = importlib.import_module(testmod_name)
|
|
Packit Service |
a04d08 |
except NameError as e:
|
|
Packit Service |
a04d08 |
raise ValueError(
|
|
Packit Service |
a04d08 |
'no test verifier found at: {}'.format(testmod_name)
|
|
Packit Service |
a04d08 |
) from e
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
found = [mod for name, mod in inspect.getmembers(testmod)
|
|
Packit Service |
a04d08 |
if (inspect.isclass(mod)
|
|
Packit Service |
a04d08 |
and base_test in inspect.getmro(mod)
|
|
Packit Service |
a04d08 |
and getattr(mod, '__test__', True))]
|
|
Packit Service |
a04d08 |
if len(found) != 1:
|
|
Packit Service |
a04d08 |
raise RuntimeError(
|
|
Packit Service |
a04d08 |
"Unexpected situation, multiple tests for %s: %s" % (
|
|
Packit Service |
a04d08 |
test_name, found))
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
return found
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def get_test_class(test_name, test_data, test_conf):
|
|
Packit Service |
a04d08 |
test_class = discover_test(test_name)[0]
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
class DynamicTestSubclass(test_class):
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
_realclass = test_class
|
|
Packit Service |
a04d08 |
data = test_data
|
|
Packit Service |
a04d08 |
conf = test_conf
|
|
Packit Service |
a04d08 |
release_conf = read_conf(config.RELEASES_CONF)['releases']
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def __str__(self):
|
|
Packit Service |
a04d08 |
return "%s (%s)" % (self._testMethodName,
|
|
Packit Service |
a04d08 |
unittest.util.strclass(self._realclass))
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
@classmethod
|
|
Packit Service |
a04d08 |
def setUpClass(cls):
|
|
Packit Service |
a04d08 |
cls.maybeSkipTest()
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
return DynamicTestSubclass
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def get_suite(test_name, data, conf):
|
|
Packit Service |
a04d08 |
"""Get test suite with all tests for 'testname'.
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
@return_value: a test suite
|
|
Packit Service |
a04d08 |
"""
|
|
Packit Service |
a04d08 |
suite = unittest.TestSuite()
|
|
Packit Service |
a04d08 |
suite.addTest(
|
|
Packit Service |
a04d08 |
unittest.defaultTestLoader.loadTestsFromTestCase(
|
|
Packit Service |
a04d08 |
get_test_class(test_name, data, conf)))
|
|
Packit Service |
a04d08 |
return suite
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
# vi: ts=4 expandtab
|