diff --git a/slsDetectorSoftware/tests/Caller/test-Caller-master-attributes.cpp b/slsDetectorSoftware/tests/Caller/test-Caller-master-attributes.cpp index 5a3933ea8..f42ce28ef 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller-master-attributes.cpp +++ b/slsDetectorSoftware/tests/Caller/test-Caller-master-attributes.cpp @@ -44,31 +44,23 @@ TEST_CASE("check_master_file_attributes", } acq::CTBStateGuard ctb_guard(det, ctb_state); - // binary => /tmp/sls_test_master_0.json - file_state.file_format = defs::BINARY; - acq::run(det, acq_state, file_state); - - std::string fname = acq::get_master_file_name(file_state); - mf::Checker checker(fname); - - // get expected state of parameters and check against master file - acq::ExpectedState expected_state = - acq::build_expected_state(det, acq_state, file_state, ctb_state); - checks::check_metadata(checker, expected_state); - #ifdef HDF5C try { - // hdf5 => /tmp/sls_test_master_0.h5 - file_state.file_format = defs::HDF5; - acq::run(det, acq_state, file_state); - - std::string fname = acq::get_master_file_name(file_state); - mf::Checker checker(fname); - - // get expected state of parameters and check against master file - acq::ExpectedState expected_state = - acq::build_expected_state(det, acq_state, file_state, ctb_state); - checks::check_metadata(checker, expected_state); +#endif + std::vector formats = {defs::BINARY, defs::HDF5}; + for (auto format : formats) { + file_state.file_format = format; + acq::run(det, acq_state, file_state); + std::string fname = acq::get_master_file_name(file_state); + mf::with_checker(fname, format, [&](auto &checker) { + // get expected state of parameters and check against master + // file + acq::ExpectedState expected_state = acq::build_expected_state( + det, acq_state, file_state, ctb_state); + checks::check_metadata(checker, expected_state); + }); + } +#ifdef HDF5C } catch (H5::Exception &e) { LOG(logERROR) << "HDF5 error: " << e.getDetailMsg(); throw; diff --git a/slsDetectorSoftware/tests/Caller/test-Caller.cpp b/slsDetectorSoftware/tests/Caller/test-Caller.cpp index 77a1bd240..decf563e8 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller.cpp +++ b/slsDetectorSoftware/tests/Caller/test-Caller.cpp @@ -7,6 +7,8 @@ #include "sls/sls_detector_defs.h" #include "test-Caller-global.h" +#include "checks/MasterFileChecks.h" + #include #include #include @@ -17,6 +19,10 @@ namespace sls { +namespace acq = sls::test::acquire; +namespace mf = sls::test::master_file; +namespace checks = sls::test::checks; + using test::GET; using test::PUT; @@ -3086,6 +3092,28 @@ TEST_CASE("udp_datastream", "[.detectorintegration]") { caller.call("udp_datastream", {"left", "0"}, -1, PUT, oss); REQUIRE(oss.str() == "udp_datastream [left, 0]\n"); } + // check master file + { + // expected + std::vector expected_ports = + det.getPortPositionList(); + std::vector expected_disabled_ports = + det.getRxDisabledUDPPortIndices(); + // run + auto acq_state = acq::default_acquisition_state(); + auto file_state = acq::default_file_state(); + std::vector formats = {defs::BINARY, defs::HDF5}; + for (auto format : formats) { + file_state.file_format = format; + acq::run(det, acq_state, file_state); + std::string fname = acq::get_master_file_name(file_state); + mf::with_checker(fname, format, [&](auto &checker) { + checks::check_udp_ports_type(checker, expected_ports); + checks::check_udp_ports_disabled(checker, + expected_disabled_ports); + }); + } + } { std::ostringstream oss; caller.call("udp_datastream", {"right", "0"}, -1, PUT, oss); @@ -3139,6 +3167,29 @@ TEST_CASE("udp_datastream", "[.detectorintegration]") { caller.call("udp_datastream", {"top", "1"}, -1, PUT, oss); REQUIRE(oss.str() == "udp_datastream [top, 1]\n"); } + // check master file + { + // expected + std::vector expected_ports = + det.getPortPositionList(); + std::vector expected_disabled_ports = + det.getRxDisabledUDPPortIndices(); + // run + auto acq_state = acq::default_acquisition_state(); + auto file_state = acq::default_file_state(); + std::vector formats = {defs::BINARY, + defs::HDF5}; + for (auto format : formats) { + file_state.file_format = format; + acq::run(det, acq_state, file_state); + std::string fname = acq::get_master_file_name(file_state); + mf::with_checker(fname, format, [&](auto &checker) { + checks::check_udp_ports_type(checker, expected_ports); + checks::check_udp_ports_disabled( + checker, expected_disabled_ports); + }); + } + } { std::ostringstream oss; caller.call("udp_datastream", {"bottom", "1"}, -1, PUT, oss); diff --git a/slsDetectorSoftware/tests/master_file/Checker.h b/slsDetectorSoftware/tests/master_file/Checker.h index 94f1de687..3cc54c6d4 100644 --- a/slsDetectorSoftware/tests/master_file/Checker.h +++ b/slsDetectorSoftware/tests/master_file/Checker.h @@ -56,4 +56,23 @@ template <> class Checker { #endif +template +void with_checker(const std::string &fname, defs::fileFormat format, +#ifdef HDF5C + F &&f) +#else + F &&f) +#endif +{ + if (format == defs::HDF5) { +#ifdef HDF5C + Checker checker(fname); + f(checker); +#endif + } else { + Checker checker(fname); + f(checker); + } +} + } // namespace sls::test::master_file \ No newline at end of file