diff --git a/slsDetectorSoftware/tests/Caller/test-Caller-eiger.cpp b/slsDetectorSoftware/tests/Caller/test-Caller-eiger.cpp index 3053ca9e4..265c39510 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller-eiger.cpp +++ b/slsDetectorSoftware/tests/Caller/test-Caller-eiger.cpp @@ -53,7 +53,7 @@ TEST_CASE("eiger_acquire_check_file_size", "[.cmdcall]") { det.setDynamicRange(16); // acquire - test_acquire_with_receiver(caller, std::chrono::seconds{2}); + test_acquire_with_receiver(caller, det); // check frames caught test_frames_caught(det, num_frames_to_acquire); diff --git a/slsDetectorSoftware/tests/Caller/test-Caller-global.cpp b/slsDetectorSoftware/tests/Caller/test-Caller-global.cpp index c04ccfb8b..0c56ac15d 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller-global.cpp +++ b/slsDetectorSoftware/tests/Caller/test-Caller-global.cpp @@ -130,10 +130,21 @@ void test_frames_caught(const Detector &det, int num_frames_to_acquire) { REQUIRE(frames_caught == num_frames_to_acquire); } -void test_acquire_with_receiver(Caller &caller, std::chrono::seconds timeout) { +void test_acquire_with_receiver(Caller &caller, const Detector &det) { REQUIRE_NOTHROW(caller.call("rx_start", {}, -1, PUT)); REQUIRE_NOTHROW(caller.call("start", {}, -1, PUT)); - std::this_thread::sleep_for(timeout); + bool idle = false; + while (!idle) { + std::ostringstream oss; + REQUIRE_NOTHROW(caller.call("status", {}, -1, GET)); + auto statusList = det.getDetectorStatus(); + if (statusList.any(defs::ERROR)) { + throw std::runtime_error("error status while acquiring"); + } + if (statusList.contains_only(defs::IDLE, defs::STOPPED)) { + idle = true; + } + } REQUIRE_NOTHROW(caller.call("rx_stop", {}, -1, PUT)); } @@ -285,8 +296,7 @@ void test_ctb_acquire_with_receiver(const testCtbAcquireInfo &test_info, set_ctb_config_state(det, test_info); // acquire - REQUIRE_NOTHROW( - test_acquire_with_receiver(caller, std::chrono::seconds{2})); + REQUIRE_NOTHROW(test_acquire_with_receiver(caller, det)); // check frames caught REQUIRE_NOTHROW(test_frames_caught(det, num_frames_to_acquire)); diff --git a/slsDetectorSoftware/tests/Caller/test-Caller-global.h b/slsDetectorSoftware/tests/Caller/test-Caller-global.h index 2d9345623..be944ecd2 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller-global.h +++ b/slsDetectorSoftware/tests/Caller/test-Caller-global.h @@ -58,7 +58,7 @@ void test_acquire_binary_file_size(const testFileInfo &file_info, void test_frames_caught(const Detector &det, int num_frames_to_acquire); -void test_acquire_with_receiver(Caller &caller, std::chrono::seconds timeout); +void test_acquire_with_receiver(Caller &caller, const Detector &det); testCommonDetAcquireInfo get_common_acquire_config_state(const Detector &det); void set_common_acquire_config_state( diff --git a/slsDetectorSoftware/tests/Caller/test-Caller-gotthard2.cpp b/slsDetectorSoftware/tests/Caller/test-Caller-gotthard2.cpp index 103167f07..c56e79634 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller-gotthard2.cpp +++ b/slsDetectorSoftware/tests/Caller/test-Caller-gotthard2.cpp @@ -54,7 +54,7 @@ TEST_CASE("gotthard2_acquire_check_file_size", "[.cmdcall]") { det.setBurstPeriod(std::chrono::milliseconds{0}); // acquire - test_acquire_with_receiver(caller, std::chrono::seconds{2}); + test_acquire_with_receiver(caller, det); // check frames caught test_frames_caught(det, num_frames_to_acquire); diff --git a/slsDetectorSoftware/tests/Caller/test-Caller-jungfrau.cpp b/slsDetectorSoftware/tests/Caller/test-Caller-jungfrau.cpp index 7d56a0a00..07cabaa04 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller-jungfrau.cpp +++ b/slsDetectorSoftware/tests/Caller/test-Caller-jungfrau.cpp @@ -48,7 +48,7 @@ TEST_CASE("jungfrau_acquire_check_file_size", "[.cmdcall]") { det.setReadNRows(512); // acquire - test_acquire_with_receiver(caller, std::chrono::seconds{2}); + test_acquire_with_receiver(caller, det); // check frames caught test_frames_caught(det, num_frames_to_acquire); diff --git a/slsDetectorSoftware/tests/Caller/test-Caller-moench.cpp b/slsDetectorSoftware/tests/Caller/test-Caller-moench.cpp index 52e3c27e3..9c79a51ab 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller-moench.cpp +++ b/slsDetectorSoftware/tests/Caller/test-Caller-moench.cpp @@ -48,7 +48,7 @@ TEST_CASE("moench_acquire_check_file_size", "[.cmdcall]") { det.setReadNRows(400); // acquire - test_acquire_with_receiver(caller, std::chrono::seconds{2}); + test_acquire_with_receiver(caller, det); // check frames caught test_frames_caught(det, num_frames_to_acquire); diff --git a/slsDetectorSoftware/tests/Caller/test-Caller-mythen3.cpp b/slsDetectorSoftware/tests/Caller/test-Caller-mythen3.cpp index 13270aefe..c5d644b3d 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller-mythen3.cpp +++ b/slsDetectorSoftware/tests/Caller/test-Caller-mythen3.cpp @@ -55,7 +55,7 @@ TEST_CASE("mythen3_acquire_check_file_size", "[.cmdcall]") { det.setCounterMask(test_counter_mask); // acquire - test_acquire_with_receiver(caller, std::chrono::seconds{2}); + test_acquire_with_receiver(caller, det); // check frames caught test_frames_caught(det, num_frames_to_acquire); diff --git a/tests/scripts/test_simulators.py b/tests/scripts/test_simulators.py index c1bc4a199..46510fc6a 100644 --- a/tests/scripts/test_simulators.py +++ b/tests/scripts/test_simulators.py @@ -6,7 +6,7 @@ This file is used to start up simulators, receivers and run all the tests on the import argparse import os, sys, subprocess, time, colorama -from colorama import Fore +from colorama import Fore, Style from slsdet import Detector, detectorType, detectorSettings from slsdet.defines import DEFAULT_TCP_CNTRL_PORTNO, DEFAULT_TCP_RX_PORTNO, DEFAULT_UDP_DST_PORTNO HALFMOD2_TCP_CNTRL_PORTNO=1955 @@ -14,48 +14,42 @@ HALFMOD2_TCP_RX_PORTNO=1957 colorama.init(autoreset=True) +def Log(color, message): + print(f"{color}{message}{Style.RESET_ALL}", flush=True) + class RuntimeException (Exception): def __init__ (self, message): - super().__init__(Fore.RED + message) + super().__init__(Log(Fore.RED, message)) -def Log(color, message): - print('\n' + color + message, flush=True) - - def checkIfProcessRunning(processName): cmd = f"pgrep -f {processName}" res = subprocess.getoutput(cmd) - return bool(res.strip()) + return res.strip().splitlines() def killProcess(name): - if checkIfProcessRunning(name): - Log(Fore.GREEN, 'killing ' + name) - p = subprocess.run(['killall', name]) - if p.returncode != 0 and checkIfProcessRunning(name): - raise RuntimeException('killall failed for ' + name) - else: - print('process not running : ' + name) + pids = checkIfProcessRunning(name) + if pids: + Log(Fore.GREEN, f"Killing '{name}' processes with PIDs: {', '.join(pids)}") + for pid in pids: + try: + cmd = f"kill -9 {pid}" + p = subprocess.run(['kill', '-9', pid]) + if p.returncode != 0: + raise RuntimeException("'kill -9' failed for " + name) + except Exception as e: + Log(Fore.RED, f"Failed to kill process {name} pid:{pid}. Exception occured: [code:{e}, msg:{e.stderr}]") + raise + #else: + # Log(Fore.WHITE, 'process not running : ' + name) -def killAllStaleProcesses(fp): - killProcess('eigerDetectorServer_virtual') - killProcess('jungfrauDetectorServer_virtual') - killProcess('mythen3DetectorServer_virtual') - killProcess('gotthard2DetectorServer_virtual') - killProcess('ctbDetectorServer_virtual') - killProcess('moenchDetectorServer_virtual') - killProcess('xilinx_ctbDetectorServer_virtual') - killProcess('slsReceiver') - killProcess('slsMultiReceiver') - cleanSharedmemory(fp) - -def cleanup(name, fp): +def cleanup(fp): ''' kill both servers, receivers and clean shared memory ''' Log(Fore.GREEN, 'Cleaning up...') - killProcess(name + 'DetectorServer_virtual') + killProcess('DetectorServer_virtual') killProcess('slsReceiver') killProcess('slsMultiReceiver') cleanSharedmemory(fp) @@ -184,7 +178,7 @@ else: servers = args.servers -Log(Fore.WHITE, 'Arguments:\nrx_hostname: ' + args.rx_hostname + '\nsettingspath: \'' + args.settingspath + '\'') +Log(Fore.WHITE, 'Arguments:\nrx_hostname: ' + args.rx_hostname + '\nsettingspath: \'' + args.settingspath + '\nservers: \'' + ' '.join(servers) + '\'') # redirect to file @@ -207,7 +201,7 @@ with open(fname, 'w') as fp: try: startGeneralTests(fp, file_results) - killAllStaleProcesses(fp) + cleanup(fp) testError = False for server in servers: @@ -222,12 +216,12 @@ with open(fname, 'w') as fp: Log(Fore.BLUE, 'Cmd tests for ' + server + ' (results: ' + file_results + ')') # cmd tests for det - cleanup(server, fp) + cleanup(fp) startServer(server) startReceiver(server) loadConfig(server, args.rx_hostname, args.settingspath) startCmdTests(server, fp, file_results) - cleanup(server, fp) + cleanup(fp) except Exception as e: # redirect to terminal