62 lines
2.4 KiB
C++
62 lines
2.4 KiB
C++
// Copyright (2019-2023) Paul Scherrer Institute
|
|
|
|
#include <catch2/catch_all.hpp>
|
|
#include <filesystem>
|
|
|
|
#include "../writer/StreamWriter.h"
|
|
#include "../frame_serialize/ZMQStream2Pusher.h"
|
|
#include "../receiver/JFJochReceiverService.h"
|
|
|
|
TEST_CASE("StreamWriterTest_ZMQ","[JFJochWriter]") {
|
|
RegisterHDF5Filter();
|
|
|
|
Logger logger("test");
|
|
|
|
DiffractionExperiment x(DetectorGeometry(2));
|
|
x.FilePrefix("subdir/JFJochWriterTest").NumTriggers(1).ImagesPerTrigger(5)
|
|
.UseInternalPacketGenerator(true).Mode(DetectorMode::Raw).PedestalG0Frames(0);
|
|
|
|
JFModuleGainCalibration gain;
|
|
AcquisitionDeviceGroup aq_devices;
|
|
for (int i = 0; i < x.GetDataStreamsNum(); i++)
|
|
aq_devices.AddHLSDevice(64);
|
|
|
|
ZMQStream2Pusher pusher ({"ipc://*"});
|
|
JFJochReceiverService fpga_receiver_service(aq_devices, logger, pusher);
|
|
|
|
JFJochReceiverOutput receiver_output;
|
|
|
|
std::unique_ptr<StreamWriter> writer;
|
|
REQUIRE(x.GetImageNum() == 5);
|
|
auto pusher_addr = pusher.GetAddress();
|
|
REQUIRE(pusher_addr.size() == 1);
|
|
REQUIRE_NOTHROW(writer = std::make_unique<StreamWriter>(logger, pusher_addr[0]));
|
|
CHECK (writer->GetStatistics().state == StreamWriterState::Idle);
|
|
REQUIRE_NOTHROW(fpga_receiver_service.Start(x, nullptr));
|
|
|
|
REQUIRE_NOTHROW(writer->Run());
|
|
|
|
REQUIRE_NOTHROW(receiver_output = fpga_receiver_service.Stop());
|
|
CHECK(receiver_output.status.images_sent == 5);
|
|
CHECK(writer->GetStatistics().state == StreamWriterState::Idle);
|
|
CHECK(writer->GetStatistics().processed_images == 5);
|
|
CHECK(writer->GetStatistics().file_prefix == x.GetFilePrefix());
|
|
|
|
// HDF5 file can be opened
|
|
std::unique_ptr<HDF5ReadOnlyFile> file;
|
|
REQUIRE_NOTHROW(file = std::make_unique<HDF5ReadOnlyFile>("subdir/JFJochWriterTest_data_000001.h5"));
|
|
std::unique_ptr<HDF5DataSet> dataset;
|
|
REQUIRE_NOTHROW(dataset = std::make_unique<HDF5DataSet>(*file, "/entry/data/data"));
|
|
std::unique_ptr<HDF5DataSpace> dataspace;
|
|
REQUIRE_NOTHROW(dataspace = std::make_unique<HDF5DataSpace>(*dataset));
|
|
|
|
REQUIRE(dataspace->GetNumOfDimensions() == 3);
|
|
REQUIRE(dataspace->GetDimensions()[0] == 5);
|
|
REQUIRE(dataspace->GetDimensions()[1] == RAW_MODULE_COLS);
|
|
REQUIRE(dataspace->GetDimensions()[2] == 2*RAW_MODULE_LINES);
|
|
|
|
REQUIRE(std::filesystem::remove("subdir/JFJochWriterTest_master.h5"));
|
|
REQUIRE(std::filesystem::remove("subdir/JFJochWriterTest_data_000001.h5"));
|
|
REQUIRE(std::filesystem::remove("subdir"));
|
|
}
|