From d82bbf6cab89a84d30dbc07e4d5fd2923550dec4 Mon Sep 17 00:00:00 2001 From: Alice Date: Fri, 14 Nov 2025 12:29:42 +0100 Subject: [PATCH] added tests --- python/tests/test_pythonAPI.py | 26 ++++++++++++ tests/scripts/test_PythonAPI.py | 70 +++++++++++++++++++++++++++++++++ tests/scripts/test_roi.py | 43 ++------------------ tests/scripts/utils_for_test.py | 21 ++++++++-- 4 files changed, 117 insertions(+), 43 deletions(-) create mode 100644 python/tests/test_pythonAPI.py create mode 100644 tests/scripts/test_PythonAPI.py diff --git a/python/tests/test_pythonAPI.py b/python/tests/test_pythonAPI.py new file mode 100644 index 000000000..2e53d42cb --- /dev/null +++ b/python/tests/test_pythonAPI.py @@ -0,0 +1,26 @@ +import pytest + +from slsdet import Detector + +def test_rx_ROI(): + """ Test setting and getting rx_ROI property of Detector class. """ + + d = Detector() + d.rx_roi = (0, 10, 10, 20) + roi = d.rx_roi + assert roi == [(0, 10, 10, 20)] + + d.rx_roi = [5,15,15,25] + + assert d.rx_roi == [(5,15,15,25)] + + d.rx_roi = [[0,10,0,20], [5,20,410,420]] #needs to be in second module + + roi = d.rx_roi + assert roi == [(0,10,0,20), (5,20,410,420)] + + d.clear_rx_roi() + roi = d.rx_roi + assert roi == [(-1,-1,-1,-1)] + + diff --git a/tests/scripts/test_PythonAPI.py b/tests/scripts/test_PythonAPI.py new file mode 100644 index 000000000..3b4c8ee99 --- /dev/null +++ b/tests/scripts/test_PythonAPI.py @@ -0,0 +1,70 @@ +# 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.') \ No newline at end of file diff --git a/tests/scripts/test_roi.py b/tests/scripts/test_roi.py index ffb0ef686..17d35c56d 100644 --- a/tests/scripts/test_roi.py +++ b/tests/scripts/test_roi.py @@ -18,9 +18,11 @@ from utils_for_test import ( RuntimeException, cleanup, startProcessInBackground, + startReceiver, startDetectorVirtualServer, connectToVirtualServers, loadBasicSettings, + loadConfig, runProcessWithLogFile ) @@ -28,45 +30,6 @@ LOG_PREFIX_FNAME = '/tmp/slsDetectorPackage_virtual_roi_test' MAIN_LOG_FNAME = LOG_PREFIX_FNAME + '_log.txt' ROI_TEST_FNAME = LOG_PREFIX_FNAME + '_results_' -def startReceiver(num_mods, fp): - if num_mods == 1: - cmd = ['slsReceiver'] - else: - cmd = ['slsMultiReceiver', str(DEFAULT_TCP_RX_PORTNO), str(num_mods)] - # in 10.0.0 - #cmd = ['slsMultiReceiver', '-p', str(DEFAULT_TCP_RX_PORTNO), '-n', str(num_mods)] - startProcessInBackground(cmd, fp) - time.sleep(1) - - -def loadConfigForRoi(name, fp, num_mods = 1, num_interfaces = 1): - Log(LogLevel.INFO, 'Loading config') - Log(LogLevel.INFO, 'Loading config', fp) - try: - d = connectToVirtualServers(name, num_mods) - - if name == 'jungfrau' or name == 'moench': - d.numinterfaces = num_interfaces - - d.udp_dstport = DEFAULT_UDP_DST_PORTNO - if name == 'eiger' or name == 'jungfrau' or name == 'moench': - d.udp_dstport2 = DEFAULT_UDP_DST_PORTNO + 1 - - d.rx_hostname = 'localhost' - d.udp_dstip = 'auto' - if name != "eiger": - d.udp_srcip = 'auto' - if name == 'jungfrau' or name == 'moench': - d.udp_dstip2 = 'auto' - d.powerchip = 1 - - d.frames = 5 - - except Exception as e: - raise RuntimeException(f'Could not load config for {name}. Error: {str(e)}') from e - - return d - def startTestsForAll(fp): servers = [ 'eiger', @@ -89,7 +52,7 @@ def startTestsForAll(fp): cleanup(fp) startDetectorVirtualServer(server, nmods, fp) startReceiver(nmods, fp) - d = loadConfigForRoi(name=server, fp=fp, num_mods=nmods, num_interfaces=ninterfaces) + d = loadConfig(name=server, log_file_fp = fp, num_mods=nmods, num_frames=5, num_interfaces=ninterfaces) loadBasicSettings(name=server, d=d, fp=fp) fname = ROI_TEST_FNAME + server + '.txt' diff --git a/tests/scripts/utils_for_test.py b/tests/scripts/utils_for_test.py index 71a7ddde7..9f6a65ddc 100644 --- a/tests/scripts/utils_for_test.py +++ b/tests/scripts/utils_for_test.py @@ -193,14 +193,28 @@ def connectToVirtualServers(name, num_mods, ctb_object=False): return d +def startReceiver(num_mods, fp): + if num_mods == 1: + cmd = ['slsReceiver'] + else: + cmd = ['slsMultiReceiver', str(DEFAULT_TCP_RX_PORTNO), str(num_mods)] + # in 10.0.0 + #cmd = ['slsMultiReceiver', '-p', str(DEFAULT_TCP_RX_PORTNO), '-n', str(num_mods)] + startProcessInBackground(cmd, fp) + time.sleep(1) -def loadConfig(name, rx_hostname, settingsdir, fp, num_mods = 1, num_frames = 1): + +def loadConfig(name, rx_hostname = 'localhost', settingsdir = None, log_file_fp = None, num_mods = 1, num_frames = 1, num_interfaces = 1): Log(LogLevel.INFO, 'Loading config') - Log(LogLevel.INFO, 'Loading config', fp) + Log(LogLevel.INFO, 'Loading config', log_file_fp) try: d = connectToVirtualServers(name, num_mods) + + if name == 'jungfrau' or name == 'moench': + d.numinterfaces = num_interfaces + d.udp_dstport = DEFAULT_UDP_DST_PORTNO - if name == 'eiger': + if name == 'eiger' or name == 'jungfrau' or name == 'moench': d.udp_dstport2 = DEFAULT_UDP_DST_PORTNO + 1 d.rx_hostname = rx_hostname @@ -209,6 +223,7 @@ def loadConfig(name, rx_hostname, settingsdir, fp, num_mods = 1, num_frames = 1) d.udp_srcip = 'auto' if name == "jungfrau" or name == "moench" or name == "xilinx_ctb": + d.udp_dstip2 = 'auto' d.powerchip = 1 if name == "xilinx_ctb":