diff --git a/slsDetectorSoftware/tests/Caller/test-Caller.cpp b/slsDetectorSoftware/tests/Caller/test-Caller.cpp index fa7c55d50..4c677c0a3 100644 --- a/slsDetectorSoftware/tests/Caller/test-Caller.cpp +++ b/slsDetectorSoftware/tests/Caller/test-Caller.cpp @@ -2620,7 +2620,7 @@ TEST_CASE("numinterfaces", "[.detectorintegration]") { "inconsistent numinterfaces to test"); Result prev_udp_dest; IpAddr prev_src_ip2{}; - if (prev_val == 2 && det_type != defs::EIGER) { + if (prev_val == 2) { prev_udp_dest = det.getDestinationUDPList(0); prev_src_ip2 = det.getSourceUDPIP2()[0]; } @@ -2639,7 +2639,7 @@ TEST_CASE("numinterfaces", "[.detectorintegration]") { caller.call("numinterfaces", {}, -1, GET, oss); REQUIRE(oss.str() == "numinterfaces 1\n"); } - if (prev_val == 2 && det_type != defs::EIGER) { + if (prev_val == 2) { for (int i = 0; i != det.size(); ++i) { det.setDestinationUDPList({prev_udp_dest[i]}, {i}); } @@ -2663,6 +2663,50 @@ TEST_CASE("numinterfaces", "[.detectorintegration]") { REQUIRE_THROWS(caller.call("numinterfaces", {"0"}, -1, PUT)); } +TEST_CASE("numinterfaces_with_fwrite", + "[.detectorintegration][.disable_check_data_file]") { + Detector det; + auto det_type = det.getDetectorType().squash(); + if (det_type == defs::JUNGFRAU || det_type == defs::MOENCH) { + + // previous state + auto prev_val = det.getNumberofUDPInterfaces().tsquash( + "inconsistent numinterfaces to test"); + Result prev_udp_dest; + IpAddr prev_src_ip2{}; + if (prev_val == 2) { + prev_udp_dest = det.getDestinationUDPList(0); + prev_src_ip2 = det.getSourceUDPIP2()[0]; + } + auto prev_fwrite = + det.getFileWrite().tsquash("inconsistent file write state"); + + // testing file write before and after num interface change + det.setNumberofUDPInterfaces(2); + det.setFileWrite(true); + det.setNumberofUDPInterfaces(1); + REQUIRE(det.getFileWrite().tsquash("inconsistent file write state") == + true); + // check if file write actually works + auto acq_state = acq::default_acquisition_state(); + auto file_state = acq::default_file_state(); + file_state.file_format = defs::BINARY; + acq::run(det, acq_state, file_state); + std::string fname = acq::get_master_file_name(file_state); + REQUIRE(std::filesystem::exists(fname)); + + // restore previous state + det.setFileWrite(prev_fwrite); + if (prev_val == 2) { + for (int i = 0; i != det.size(); ++i) { + det.setDestinationUDPList({prev_udp_dest[i]}, {i}); + } + det.setSourceUDPIP2({prev_src_ip2}); + } + det.setNumberofUDPInterfaces(prev_val); + } +} + TEST_CASE("udp_srcip", "[.detectorintegration]") { Detector det; Caller caller(&det); diff --git a/slsReceiverSoftware/src/Implementation.cpp b/slsReceiverSoftware/src/Implementation.cpp index 6a78b764e..60c704578 100644 --- a/slsReceiverSoftware/src/Implementation.cpp +++ b/slsReceiverSoftware/src/Implementation.cpp @@ -1164,6 +1164,13 @@ void Implementation::setNumberofUDPInterfaces(const int n) { // test socket buffer size with current set up setUDPSocketBufferSize(0); + + // set up file write if enabled + if (fileWriteEnable) { + for (const auto &it : dataProcessor) + it->SetupFileWriter(fileWriteEnable, fileFormatType, + &hdf5LibMutex); + } } LOG(logINFO) << "Number of Interfaces: " << generalData->numUDPInterfaces;