mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-12-23 04:41:19 +01:00
wrapped virtual detector setup in a test fixture
This commit is contained in:
80
python/tests/conftest.py
Normal file
80
python/tests/conftest.py
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
import pytest
|
||||||
|
import sys
|
||||||
|
import traceback
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
current_dir = Path(__file__).resolve().parents[2]
|
||||||
|
|
||||||
|
scripts_dir = current_dir / "tests" / "scripts"
|
||||||
|
|
||||||
|
sys.path.append(str(scripts_dir))
|
||||||
|
|
||||||
|
print(sys.path)
|
||||||
|
|
||||||
|
from utils_for_test import (
|
||||||
|
Log,
|
||||||
|
LogLevel,
|
||||||
|
RuntimeException,
|
||||||
|
cleanup,
|
||||||
|
startProcessInBackground,
|
||||||
|
startReceiver,
|
||||||
|
startDetectorVirtualServer,
|
||||||
|
connectToVirtualServers,
|
||||||
|
loadConfig,
|
||||||
|
loadBasicSettings,
|
||||||
|
runProcessWithLogFile
|
||||||
|
)
|
||||||
|
|
||||||
|
def pytest_addoption(parser):
|
||||||
|
parser.addoption(
|
||||||
|
"--with-detector-simulators", action="store_true", default=False, help="Run tests that require detector simulators"
|
||||||
|
)
|
||||||
|
|
||||||
|
def pytest_configure(config):
|
||||||
|
config.addinivalue_line("markers", "withdetectorsimulators: mark test as needing detector simulators to run")
|
||||||
|
|
||||||
|
def pytest_collection_modifyitems(config, items):
|
||||||
|
if config.getoption("--with-detector-simulators"):
|
||||||
|
return
|
||||||
|
skip = pytest.mark.skip(reason="need --with-detector-simulators option to run")
|
||||||
|
for item in items:
|
||||||
|
if "withdetectorsimulators" in item.keywords:
|
||||||
|
item.add_marker(skip)
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def test_with_simulators():
|
||||||
|
""" Fixture to automatically setup virtual detector servers for testing. """
|
||||||
|
|
||||||
|
LOG_PREFIX_FNAME = '/tmp/slsDetectorPackage_virtual_PythonAPI_test'
|
||||||
|
MAIN_LOG_FNAME = LOG_PREFIX_FNAME + '_log.txt'
|
||||||
|
|
||||||
|
with open(MAIN_LOG_FNAME, 'w') as fp:
|
||||||
|
try:
|
||||||
|
servers = ['moench']
|
||||||
|
nmods = 2
|
||||||
|
for server in servers:
|
||||||
|
for ninterfaces in range(1,2):
|
||||||
|
if ninterfaces == 2 and server != 'jungfrau' and server != 'moench':
|
||||||
|
continue
|
||||||
|
|
||||||
|
msg = f'Starting Python API Tests for {server}'
|
||||||
|
|
||||||
|
if server == 'jungfrau' or server == 'moench':
|
||||||
|
msg += f' with {ninterfaces} interfaces'
|
||||||
|
|
||||||
|
Log(LogLevel.INFOBLUE, msg, fp)
|
||||||
|
cleanup(fp)
|
||||||
|
startDetectorVirtualServer(server, nmods, fp)
|
||||||
|
startReceiver(nmods, fp)
|
||||||
|
d = loadConfig(name=server, log_file_fp=fp, num_mods=nmods, num_frames=1, num_interfaces=ninterfaces)
|
||||||
|
loadBasicSettings(name=server, d=d, fp=fp)
|
||||||
|
yield # run test
|
||||||
|
cleanup(fp) # teardown
|
||||||
|
except Exception as e:
|
||||||
|
with open(MAIN_LOG_FNAME, 'a') as fp_error:
|
||||||
|
traceback.print_exc(file=fp_error)
|
||||||
|
Log(LogLevel.ERROR, f'Tests Failed.', fp)
|
||||||
|
cleanup(fp)
|
||||||
|
|
||||||
|
|
||||||
@@ -1,8 +1,12 @@
|
|||||||
import pytest
|
import pytest
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from conftest import test_with_simulators
|
||||||
|
|
||||||
from slsdet import Detector
|
from slsdet import Detector
|
||||||
|
|
||||||
def test_rx_ROI():
|
@pytest.mark.withdetectorsimulators
|
||||||
|
def test_rx_ROI(test_with_simulators):
|
||||||
""" Test setting and getting rx_ROI property of Detector class. """
|
""" Test setting and getting rx_ROI property of Detector class. """
|
||||||
|
|
||||||
d = Detector()
|
d = Detector()
|
||||||
|
|||||||
@@ -1,70 +0,0 @@
|
|||||||
# SPDX-License-Identifier: LGPL-3.0-or-other
|
|
||||||
# Copyright (C) 2021 Contributors to the SLS Detector Package
|
|
||||||
|
|
||||||
'''
|
|
||||||
This file is used to start up simulators, receivers and test python API, tests are less exhaustive than C++ tests.
|
|
||||||
'''
|
|
||||||
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
from utils_for_test import (
|
|
||||||
Log,
|
|
||||||
LogLevel,
|
|
||||||
RuntimeException,
|
|
||||||
cleanup,
|
|
||||||
startProcessInBackground,
|
|
||||||
startReceiver,
|
|
||||||
startDetectorVirtualServer,
|
|
||||||
connectToVirtualServers,
|
|
||||||
loadConfig,
|
|
||||||
loadBasicSettings,
|
|
||||||
runProcessWithLogFile
|
|
||||||
)
|
|
||||||
|
|
||||||
LOG_PREFIX_FNAME = '/tmp/slsDetectorPackage_virtual_PythonAPI_test'
|
|
||||||
MAIN_LOG_FNAME = LOG_PREFIX_FNAME + '_log.txt'
|
|
||||||
PYTHONAPI_TEST_FNAME = LOG_PREFIX_FNAME + '_results_'
|
|
||||||
|
|
||||||
def startTests(fp):
|
|
||||||
servers = [
|
|
||||||
'moench',
|
|
||||||
]
|
|
||||||
nmods = 2
|
|
||||||
for server in servers:
|
|
||||||
for ninterfaces in range(1,2):
|
|
||||||
if ninterfaces == 2 and server != 'jungfrau' and server != 'moench':
|
|
||||||
continue
|
|
||||||
try:
|
|
||||||
msg = f'Starting Python API Tests for {server}'
|
|
||||||
if server == 'jungfrau' or server == 'moench':
|
|
||||||
msg += f' with {ninterfaces} interfaces'
|
|
||||||
Log(LogLevel.INFOBLUE, msg)
|
|
||||||
Log(LogLevel.INFOBLUE, msg, fp)
|
|
||||||
cleanup(fp)
|
|
||||||
startDetectorVirtualServer(server, nmods, fp)
|
|
||||||
startReceiver(nmods, fp)
|
|
||||||
d = loadConfig(name=server, log_file_fp=fp, num_mods=nmods, num_frames=1, num_interfaces=ninterfaces)
|
|
||||||
loadBasicSettings(name=server, d=d, fp=fp)
|
|
||||||
|
|
||||||
fname = PYTHONAPI_TEST_FNAME + server + '.txt'
|
|
||||||
cmd = ['python', '-m', 'pytest', '../python/tests/test_pythonAPI.py']
|
|
||||||
runProcessWithLogFile('Python API Tests for ' + server, cmd, fp, fname)
|
|
||||||
Log(LogLevel.INFO, '\n')
|
|
||||||
except Exception as e:
|
|
||||||
raise RuntimeException(f'Python API Tests failed') from e
|
|
||||||
|
|
||||||
Log(LogLevel.INFOGREEN, 'Passed all Python API tests for server ' + str(servers) + '\n')
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
Log(LogLevel.INFOBLUE, '\nLog File: ' + MAIN_LOG_FNAME + '\n')
|
|
||||||
|
|
||||||
with open(MAIN_LOG_FNAME, 'w') as fp:
|
|
||||||
try:
|
|
||||||
startTests(fp)
|
|
||||||
cleanup(fp)
|
|
||||||
except Exception as e:
|
|
||||||
with open(MAIN_LOG_FNAME, 'a') as fp_error:
|
|
||||||
traceback.print_exc(file=fp_error)
|
|
||||||
cleanup(fp)
|
|
||||||
Log(LogLevel.ERROR, f'Tests Failed.')
|
|
||||||
Reference in New Issue
Block a user