#include "gtest/gtest.h" #include "H5WriteModule.hpp" #include #include "RingBuffer.hpp" #include "mock/TestH5Format.cpp" using namespace std; // Shape * 2 bytes/value (uint16_t) size_t image_n_bytes = 1024*2*2; void generate_frames(RingBuffer& ring_buffer, int n_frames) { size_t y_length = 2; size_t x_length = 1024; for (int i_frame=0; i_frame < n_frames; i_frame++) { FrameMetadata metadata = { 0, // size_t buffer_slot_index; image_n_bytes, // size_t frame_bytes_size; static_cast(i_frame), // uint64_t frame_index; "little", // std::string endianness; "uint16", //std::string type; {y_length, x_length} // std::vector frame_shape; }; auto ptr_metadata = make_shared(metadata); auto ptr_buffer = ring_buffer.reserve(ptr_metadata); auto value_ptr = (uint16_t*) ptr_buffer; for (size_t y=0; y(i_frame); } } ring_buffer.commit(ptr_metadata); } } TEST(H5WriteModule, basic_interaction) { TestH5Format format("start_dataset"); RingBuffer ring_buffer(10); ring_buffer.initialize(image_n_bytes); std::unordered_map header_map; H5WriteModule h5_write_module(ring_buffer, header_map, format); ASSERT_FALSE(h5_write_module.is_writing()); h5_write_module.start_writing("ignore_out.h5", 5); ASSERT_TRUE(h5_write_module.is_writing()); generate_frames(ring_buffer, 3); this_thread::sleep_for(chrono::milliseconds(100)); ASSERT_TRUE(h5_write_module.is_writing()); generate_frames(ring_buffer, 2); this_thread::sleep_for(chrono::milliseconds(100)); // Writing should be completed by now. ASSERT_FALSE(h5_write_module.is_writing()); // Stop should never throw an exception. h5_write_module.stop_writing(); EXPECT_NO_THROW(h5_write_module.stop_writing()); EXPECT_TRUE(ring_buffer.is_empty()); }