Module tests.conftest

Functions

def pytest_addoption(parser)
Expand source code
def pytest_addoption(parser):
    parser.addoption(SKIP_BACKING_IMAGE_OPT, action="store_true",
                     default=False, help="skip backing image tests")

    parser.addoption(SKIP_RECURRING_JOB_OPT, action="store_true",
                     default=False,
                     help="skip recurring job test or not")

    parser.addoption(SKIP_INFRA_OPT, action="store_true",
                     default=False,
                     help="skip infra tests (default: False)")

    parser.addoption(INCLUDE_STRESS_OPT, action="store_true",
                     default=False,
                     help="include stress tests (default: False)")

    parser.addoption(INCLUDE_UPGRADE_OPT, action="store_true",
                     default=False,
                     help="include upgrade tests (default: False)")

    parser.addoption(INCLUDE_CA_OPT, action="store_true",
                     default=False,
                     help="include cluster autoscaler tests (default: False)")
def pytest_collection_modifyitems(config, items)
Expand source code
def pytest_collection_modifyitems(config, items):
    c = Configuration()
    c.assert_hostname = False
    Configuration.set_default(c)
    k8sconfig.load_incluster_config()
    core_api = k8sclient.CoreV1Api()

    check_longhorn(core_api)

    if config.getoption(SKIP_BACKING_IMAGE_OPT):
        skip_backing_image = pytest.mark.skip(
            reason="remove " + SKIP_BACKING_IMAGE_OPT + " option to run")
        for item in items:
            if "backing_image" in item.keywords:
                item.add_marker(skip_backing_image)

    if config.getoption(SKIP_RECURRING_JOB_OPT):
        skip_upgrade = pytest.mark.skip(reason="remove " +
                                               SKIP_RECURRING_JOB_OPT +
                                               " option to run")
        for item in items:
            if "recurring_job" in item.keywords:
                item.add_marker(skip_upgrade)

    csi_expansion_enabled = check_csi_expansion(core_api)
    if not csi_expansion_enabled:
        skip_csi_expansion = pytest.mark.skip(reason="environment is not " +
                                                     "using csi expansion")
        for item in items:
            if "csi_expansion" in item.keywords:
                item.add_marker(skip_csi_expansion)

    all_nodes_support_mount_propagation = True
    for node in get_longhorn_api_client().list_node():
        node = wait_for_node_mountpropagation_condition(
            get_longhorn_api_client(), node.name)
        if "conditions" not in node.keys():
            all_nodes_support_mount_propagation = False
        else:
            conditions = node.conditions
            for key, condition in conditions.items():
                if key == NODE_CONDITION_MOUNTPROPAGATION and \
                        condition.status != CONDITION_STATUS_TRUE:
                    all_nodes_support_mount_propagation = False
                    break
        if not all_nodes_support_mount_propagation:
            break

    if not all_nodes_support_mount_propagation:
        skip_node = pytest.mark.skip(reason="environment does not " +
                                            "support mount disk")
        for item in items:
            if "mountdisk" in item.keywords:
                item.add_marker(skip_node)

    if config.getoption(SKIP_INFRA_OPT):
        skip_infra = pytest.mark.skip(reason="remove " +
                                      SKIP_INFRA_OPT +
                                      " option to run")

        for item in items:
            if "infra" in item.keywords:
                item.add_marker(skip_infra)

    if not config.getoption(INCLUDE_STRESS_OPT):
        skip_stress = pytest.mark.skip(reason="include " +
                                       INCLUDE_STRESS_OPT +
                                       " option to run")

        for item in items:
            if "stress" in item.keywords:
                item.add_marker(skip_stress)

    if not config.getoption(INCLUDE_UPGRADE_OPT):
        skip_upgrade = pytest.mark.skip(reason="include " +
                                        INCLUDE_UPGRADE_OPT +
                                        " option to run")

        for item in items:
            if "upgrade" in item.keywords:
                item.add_marker(skip_upgrade)

    if not config.getoption(INCLUDE_CA_OPT):
        skip_upgrade = pytest.mark.skip(reason="include " +
                                        INCLUDE_CA_OPT +
                                        " option to run")

        for item in items:
            if "cluster_autoscaler" in item.keywords:
                item.add_marker(skip_upgrade)
def pytest_exception_interact(call, report)
Expand source code
def pytest_exception_interact(call, report):

    # Only work on TestReport, not on CollectReport
    if type(report).__name__ != "TestReport":
        return

    # Get case name
    case_name = str(report).split()[1]
    case_name = case_name.split('/')[1].replace('\'', '')

    generate_support_bundle(case_name)