// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only // Run with LD_PRELOAD=enospc_shim.so ./jfjoch_hdf5_enospc_test #include #include "../writer/HDF5Objects.h" #include "../writer/FileWriter.h" #include "../common/DiffractionExperiment.h" #include TEST_CASE("HDF5File_enospc") { auto file = std::make_unique("enospc_test.h5"); std::vector small_vector(2056), large_vector(40 * 1024 * 1024); REQUIRE_NOTHROW(file->SaveVector("/small", small_vector)); REQUIRE_THROWS(file->SaveVector("/large1", large_vector)); REQUIRE_THROWS(file->SaveVector("/large2", large_vector)); REQUIRE_THROWS(file->Close()); REQUIRE_NOTHROW(file.reset()); // No leftover HDF5 objects REQUIRE (H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL) == 0); } TEST_CASE("FileWriter_enospc") { { RegisterHDF5Filter(); DiffractionExperiment x(DetJF4M()); x.FilePrefix("fw_enospc").ImagesPerTrigger(5).ImagesPerFile(2).Compression(CompressionAlgorithm::NO_COMPRESSION) .SetFileWriterFormat(FileWriterFormat::NXmxVDS); StartMessage start_message; x.FillMessage(start_message); FileWriter file_set(start_message); std::vector image(x.GetPixelsNum()); DataMessage message{}; message.image = CompressedImage(image, x.GetXPixelsNum(), x.GetYPixelsNum()); message.number = 0; REQUIRE_NOTHROW(file_set.Write(message)); message.number = 1; REQUIRE_THROWS(file_set.Write(message)); message.number = 2; REQUIRE_THROWS(file_set.Write(message)); EndMessage end_message{ .max_image_number = 3 }; REQUIRE_THROWS(file_set.WriteHDF5(end_message)); } // No leftover HDF5 objects REQUIRE (H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL) == 0); }