blob: adb7700ed23269114784429d03c4b191408d258b [file] [log] [blame]
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
import logging
import os
from pathlib import Path
import pytest
import yaml
from . import utils
log = logging.getLogger(__name__)
@pytest.hookimpl(tryfirst=True)
def pytest_exception_interact(node, call, report):
"""Dump all log files in case of a test failure."""
try:
if not report.failed:
return
if 'tmp_path_factory' not in node.funcargs:
return
except Exception:
return
utils.dump_temp_files(node.funcargs['tmp_path_factory'].getbasetemp())
@pytest.fixture(scope="session")
def localconf():
"""Host-local configuration."""
if 'OPENTITAN_TEST_LOCALCONF' in os.environ:
localconf_yaml_file = Path(os.environ['OPENTITAN_TEST_LOCALCONF'])
log.info("Attempting to use configuration file set in "
"OPENTITAN_TEST_LOCALCONF.")
else:
XDG_CONFIG_HOME = Path(os.getenv(
'XDG_CONFIG_HOME', os.path.join(os.environ['HOME'], '.config')))
localconf_yaml_file = XDG_CONFIG_HOME / 'opentitan' / 'test-localconf.yaml'
log.info('Reading configuration from ' + str(localconf_yaml_file))
with open(str(localconf_yaml_file), 'r') as fp:
return yaml.load(fp, Loader=yaml.SafeLoader)
@pytest.fixture(scope="session")
def topsrcdir():
"""Return the top-level source directory as Path object."""
# TODO: Consider making this configurable using a pytest arg.
path = (Path(os.path.dirname(__file__)) / '..' / '..').resolve()
assert path.is_dir()
return path
@pytest.fixture(scope="session")
def bin_dir(topsrcdir):
""" Return the BIN_DIR (build output directory) """
if 'BIN_DIR' in os.environ:
bin_dir = Path(os.environ['BIN_DIR'])
log.info("Using build outputs from environment variable BIN_DIR={}".format(str(bin_dir)))
else:
bin_dir = topsrcdir / 'build-bin'
log.info("Using build outputs from $REPO_TOP/build-bin ({})".format(str(bin_dir)))
assert bin_dir.is_dir()
return bin_dir