Files
palladum-lightning/tests/conftest.py

90 lines
3.1 KiB
Python

import pytest
import os
from pyln.testing.utils import EXPERIMENTAL_DUAL_FUND, VALGRIND, SLOW_MACHINE
# This function is based upon the example of how to
# "[make] test result information available in fixtures" at:
# https://pytest.org/latest/example/simple.html#making-test-result-information-available-in-fixtures
# and:
# https://github.com/pytest-dev/pytest/issues/288
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
# execute all other hooks to obtain the report object
outcome = yield
rep = outcome.get_result()
# set a report attribute for each phase of a call, which can
# be "setup", "call", "teardown"
setattr(item, "rep_" + rep.when, rep)
def pytest_configure(config):
config.addinivalue_line("markers",
"slow_test: slow tests aren't run under Valgrind")
config.addinivalue_line("markers",
"openchannel: Limit this test to only run 'v1' or 'v2' openchannel protocol")
def pytest_runtest_setup(item):
open_versions = [mark.args[0] for mark in item.iter_markers(name='openchannel')]
if open_versions:
if 'v1' not in open_versions and not EXPERIMENTAL_DUAL_FUND:
pytest.skip('v2-only test, EXPERIMENTAL_DUAL_FUND=0')
if 'v2' not in open_versions and EXPERIMENTAL_DUAL_FUND:
pytest.skip('v1-only test, EXPERIMENTAL_DUAL_FUND=1')
else: # If there's no openchannel marker, skip if EXP_DF
if EXPERIMENTAL_DUAL_FUND:
pytest.skip('v1-only test, EXPERIMENTAL_DUAL_FUND=1')
if "slow_test" in item.keywords and VALGRIND and SLOW_MACHINE:
pytest.skip("Skipping slow tests under VALGRIND")
@pytest.hookimpl(tryfirst=True)
def pytest_sessionfinish(session, exitstatus):
"""Add environment variables to JUnit XML report.
This hook runs on the master node in pytest-xdist to add properties
directly to the JUnit XML report. This works around the limitation
that record_testsuite_property doesn't work with pytest-xdist.
We use tryfirst=True so we run before the junitxml plugin writes the file.
See: https://github.com/pytest-dev/pytest/issues/7767
"""
# Check if we're on the master node (not a worker)
# Workers have the workeroutput attribute
if hasattr(session.config, "workeroutput"):
return
# Find the LogXML instance among registered plugins
# We need to search through all plugins because it's not directly accessible
xml = None
for plugin in session.config.pluginmanager.get_plugins():
if hasattr(plugin, "add_global_property"):
xml = plugin
break
if xml is None:
return
# List of environment variables to include in the report
include = [
"GITHUB_ACTION_REPOSITORY",
"GITHUB_EVENT_NAME",
"GITHUB_HEAD_REF",
"GITHUB_REF_NAME",
"GITHUB_RUN_ATTEMPT",
"GITHUB_RUN_ID",
"GITHUB_RUN_NUMBER",
"RUNNER_ARCH",
"RUNNER_OS",
]
# Add properties to the XML report
for name in include:
if name in os.environ:
xml.add_global_property(name, os.environ[name])