90 lines
3.1 KiB
Python
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])
|