You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.4 KiB
81 lines
2.4 KiB
import os
|
|
import pytest
|
|
import random
|
|
|
|
from openpilot.common.prefix import OpenpilotPrefix
|
|
from openpilot.system.hardware import TICI
|
|
|
|
global_seed = None
|
|
|
|
|
|
# @pytest.fixture(scope="session", autouse=True)
|
|
def pytest_sessionstart(session):
|
|
# session.config.cache.clear_cache()
|
|
seed = random.randint(0, 100000)
|
|
print('setting seed in sessionstart', seed)
|
|
session.config.cache.set('worker/seed', seed)
|
|
|
|
|
|
# global global_seed
|
|
# global_seed = 0#random.randint(0, 10000)
|
|
# os.environ['PYTEST_SEED'] = '0'
|
|
# # random.seed(seed)
|
|
# # print(f"Random seed set to {seed} for worker")
|
|
# print(f"Random seed selected for this session: {global_seed}")
|
|
|
|
|
|
@pytest.fixture(scope="function", autouse=True)
|
|
def openpilot_function_fixture():
|
|
starting_env = dict(os.environ)
|
|
|
|
random.seed(0)
|
|
|
|
# setup a clean environment for each test
|
|
with OpenpilotPrefix():
|
|
prefix = os.environ["OPENPILOT_PREFIX"]
|
|
|
|
yield
|
|
|
|
# ensure the test doesn't change the prefix
|
|
assert "OPENPILOT_PREFIX" in os.environ and prefix == os.environ["OPENPILOT_PREFIX"]
|
|
|
|
os.environ.clear()
|
|
os.environ.update(starting_env)
|
|
|
|
|
|
# If you use setUpClass, the environment variables won't be cleared properly,
|
|
# so we need to hook both the function and class pytest fixtures
|
|
@pytest.fixture(scope="class", autouse=True)
|
|
def openpilot_class_fixture():
|
|
starting_env = dict(os.environ)
|
|
|
|
yield
|
|
|
|
os.environ.clear()
|
|
os.environ.update(starting_env)
|
|
|
|
|
|
@pytest.hookimpl(tryfirst=True)
|
|
def pytest_collection_modifyitems(config, items):
|
|
skipper = pytest.mark.skip(reason="Skipping tici test on PC")
|
|
for item in items:
|
|
if not TICI and "tici" in item.keywords:
|
|
item.add_marker(skipper)
|
|
|
|
if "xdist_group_class_property" in item.keywords:
|
|
class_property_name = item.get_closest_marker('xdist_group_class_property').args[0]
|
|
class_property_value = getattr(item.cls, class_property_name)
|
|
item.add_marker(pytest.mark.xdist_group(class_property_value))
|
|
|
|
|
|
@pytest.hookimpl(trylast=True)
|
|
def pytest_configure(config):
|
|
if config.cache.get('worker/seed', None) is None:
|
|
config.cache.set('worker/seed', random.randint(0, 100000))
|
|
seed = config.cache.get('worker/seed', None)
|
|
random.seed(seed)
|
|
print('setting seed in configure', seed)
|
|
config_line = (
|
|
"xdist_group_class_property: group tests by a property of the class that contains them"
|
|
)
|
|
config.addinivalue_line("markers", config_line) |