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) |