From f9370d820e4d0cf537a24e47b21862c313d6c254 Mon Sep 17 00:00:00 2001 From: Andrej Babic Date: Wed, 30 Jan 2019 14:16:09 +0100 Subject: [PATCH] Add tests for buffered writer --- lib/test/test_BufferedWriter.cpp | 74 ++++++++++++++++++++++++++++++++ lib/test/test_main.cpp | 1 + 2 files changed, 75 insertions(+) create mode 100644 lib/test/test_BufferedWriter.cpp diff --git a/lib/test/test_BufferedWriter.cpp b/lib/test/test_BufferedWriter.cpp new file mode 100644 index 0000000..336a64b --- /dev/null +++ b/lib/test/test_BufferedWriter.cpp @@ -0,0 +1,74 @@ +#include "gtest/gtest.h" +#include "../src/BufferedWriter.hpp" +using namespace std; + +TEST(BufferedWriter, get_buffered_writer) +{ + auto header_values = shared_ptr>(new unordered_map { + {"frame", HeaderDataType("uint64")}, + {"module_number", HeaderDataType("uint64", 2)} + }); + + auto metadata_buffer1 = unique_ptr(new MetadataBuffer(1, header_values)); + + auto dummy_writer = get_buffered_writer("/dev/null", 10, move(metadata_buffer1)); + EXPECT_TRUE(dynamic_cast(dummy_writer.get())); + + auto metadata_buffer2 = unique_ptr(new MetadataBuffer(1, header_values)); + + auto real_writer = get_buffered_writer("real_file.h5", 10, move(metadata_buffer2)); + EXPECT_FALSE(dynamic_cast(real_writer.get())); +} + +TEST(BufferedWriter, DummyBufferedWriter) +{ + DummyBufferedWriter dummy_writer; + + EXPECT_FALSE(dummy_writer.is_file_open()); + + EXPECT_TRUE(dummy_writer.is_data_for_current_file(12345678)); + + EXPECT_NO_THROW(dummy_writer.cache_metadata("test", 10, nullptr)); + + EXPECT_NO_THROW(dummy_writer.write_metadata_to_file()); + + EXPECT_NO_THROW(dummy_writer.close_file()); + + EXPECT_THROW(dummy_writer.get_h5_file(), runtime_error); + + unique_ptr buffer(new char[1]); + vector shape = {1}; + + EXPECT_NO_THROW(dummy_writer.write_data("does not matter", 0, buffer.get(), shape, 0, "nop", "nop")); +} + +TEST(BufferedWriter, process_manager_workflow) +{ + auto header_values = shared_ptr>(new unordered_map { + {"frame", HeaderDataType("uint64")}, + {"module_number", HeaderDataType("uint64", 2)} + }); + + auto metadata_buffer = unique_ptr(new MetadataBuffer(1, header_values)); + auto writer = get_buffered_writer("/dev/null", 10, move(metadata_buffer)); + + ASSERT_NO_THROW(writer->create_file()); + + EXPECT_TRUE(writer->is_data_for_current_file(0)); + EXPECT_TRUE(writer->is_data_for_current_file(123456)); + + // This 2 should not happen, because is_data_for_current_file should always return true. + ASSERT_NO_THROW(writer->write_metadata_to_file()); + ASSERT_THROW(writer->get_h5_file(), runtime_error); + + unique_ptr buffer(new char[1]); + vector shape = {1}; + EXPECT_NO_THROW(writer->write_data("does not matter", 0, buffer.get(), shape, 0, "nop", "nop")); + + EXPECT_NO_THROW(writer->cache_metadata("test", 10, nullptr)); + + // This is important to prevent get_h5_file from being called. + EXPECT_FALSE(writer->is_file_open()); + + EXPECT_NO_THROW(writer->close_file()); +} \ No newline at end of file diff --git a/lib/test/test_main.cpp b/lib/test/test_main.cpp index 7dfcfd9..1205b9d 100644 --- a/lib/test/test_main.cpp +++ b/lib/test/test_main.cpp @@ -2,6 +2,7 @@ #include "test_ZmqReceiver.cpp" #include "test_H5Writer.cpp" #include "test_MetadataBuffer.cpp" +#include "test_BufferedWriter.cpp" using namespace std;