Blame tests/cloud_tests/testcases/__init__.py

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