diff --git a/tests/JFJochFullIntegrationTest.cpp b/tests/JFJochFullIntegrationTest.cpp index 28a72d87..5909b531 100644 --- a/tests/JFJochFullIntegrationTest.cpp +++ b/tests/JFJochFullIntegrationTest.cpp @@ -598,6 +598,87 @@ TEST_CASE("JFJochIntegrationTest_Cancel", "[JFJochReceiver]") { writer_server->Shutdown(); } +TEST_CASE("JFJochIntegrationTest_Cancel_Summation100", "[JFJochReceiver]") { + Logger logger("JFJochIntegrationTest_Cancel_Summation100"); + + ZMQContext zmq_context; + + RegisterHDF5Filter(); + + int64_t nimages = 5; + int64_t ndatastream = 2; + int64_t nmodules = 4; + + JFJochServices services(logger); + JFJochStateMachine state_machine(services, logger); + state_machine.AddDetectorSetup(DetectorGeometry(ndatastream * nmodules, 2, 8, 36)); + + state_machine.NotThreadSafe_Experiment().DataStreams(ndatastream).Summation(200); + state_machine.NotThreadSafe_Experiment().PedestalG0Frames(0).PedestalG1Frames(0).PedestalG2Frames(0); + services.Writer("unix:writer_test", "inproc://#1").Receiver("unix:fpga_receiver_test"); + + logger.Verbose(true); + + std::vector image(RAW_MODULE_SIZE); + + std::vector> aq_devices; + + for (int i = 0; i < ndatastream; i++) { + auto *test = new MockAcquisitionDevice(i, 1024); + test->EnableLogging(&logger); + for (int m = 0; m < state_machine.NotThreadSafe_Experiment().GetModulesNum(i); m++) { + for (int frame = 1; frame <= 2*100+5; frame++) + test->AddModule(frame, m, image.data()); + } + aq_devices.emplace_back(test); + } + + std::vector tmp_devices; + for (const auto &i: aq_devices) + tmp_devices.emplace_back(i.get()); + + ZMQImagePusher pusher(zmq_context, {"inproc://#1"}); + JFJochReceiverService fpga_receiver(tmp_devices, logger, pusher); + JFJochWriterService writer(zmq_context, logger); + + auto fpga_receiver_server = gRPCServer("unix:fpga_receiver_test", fpga_receiver); + auto writer_server = gRPCServer("unix:writer_test", writer); + + REQUIRE_NOTHROW(state_machine.Initialize()); + logger.Info("Initialized"); + + JFJochProtoBuf::DatasetSettings setup; + setup.set_ntrigger(1); + setup.set_detector_distance_mm(100); + setup.set_file_prefix("integration_test_sum100"); + setup.set_images_per_trigger(2 * nimages); + setup.set_photon_energy_kev(12.4); + setup.set_summation(100); + setup.set_data_file_count(1); + + REQUIRE_NOTHROW(state_machine.Start(setup)); + logger.Info("Started measurement"); + + logger.Info("Cancelling"); + REQUIRE_NOTHROW(state_machine.Cancel()); + REQUIRE_NOTHROW(state_machine.Stop()); + logger.Info("Stopped measurement"); + + auto tmp = state_machine.GetMeasurementStatistics(); + REQUIRE(tmp.has_value()); + auto statistics = tmp.value(); + + CHECK(statistics.collection_efficiency() == 0.205f); + CHECK(statistics.images_collected() == 3); + CHECK(statistics.has_images_written()); + CHECK(statistics.images_written() == 3); + CHECK(statistics.max_image_number_sent() == 2); + CHECK(statistics.cancelled()); + + fpga_receiver_server->Shutdown(); + writer_server->Shutdown(); +} + TEST_CASE("JFJochIntegrationTest_ZMQ_with_preview", "[JFJochReceiver]") { Logger logger("JFJochIntegrationTest_ZMQ_with_preview");