diff --git a/.gitignore b/.gitignore index 098f81eba37b3421a0af9d3fae77724418fd5433..9a7e609c29e483635f722b3206c6322d3f042efc 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,8 @@ pipeline.gdsl *.j2~ *.h~ *.cxx~ -/integration-tests/output-files/*.nxs +/integration-tests/output-files/*.* +/domain-tests/output_files/*.* venv *.log *.DS_Store diff --git a/domain-tests/data_files/buffered_data.json b/domain-tests/data_files/buffered_data.json new file mode 100644 index 0000000000000000000000000000000000000000..919dbb570eda918e4e96f716223d6532d74a031b --- /dev/null +++ b/domain-tests/data_files/buffered_data.json @@ -0,0 +1,18 @@ +[ + { + "schema": "f144", + "topic": "local_choppers", + "kafka_timestamp": 5000, + "source_name": "local:choppers:delay", + "timestamp": 5000, + "value": 2 + }, + { + "schema": "f144", + "topic": "local_choppers", + "kafka_timestamp": 9000, + "source_name": "local:choppers:delay", + "timestamp": 9000, + "value": 3 + } +] diff --git a/domain-tests/data_files/messages_before_and_after_data.json b/domain-tests/data_files/messages_before_and_after_data.json index da4e87128b3062f59047a784705659e7a0ed3a78..7140c5078c879a9c4e1d19b4cc27efdb07202893 100644 --- a/domain-tests/data_files/messages_before_and_after_data.json +++ b/domain-tests/data_files/messages_before_and_after_data.json @@ -102,31 +102,41 @@ { "schema": "ev44", "topic": "local_detector", - "kafka_timestamp": 11000, + "kafka_timestamp": 10000, "source_name": "detector_events", "message_id": 667, - "reference_time": 11000, + "reference_time": 10000, "time_of_flight": [50, 60, 70, 80], "pixel_ids": [1, 2, 3, 4] }, { "schema": "ev44", "topic": "local_detector", - "kafka_timestamp": 16000, + "kafka_timestamp": 12000, "source_name": "detector_events", "message_id": 668, - "reference_time": 16000, + "reference_time": 12000, "time_of_flight": [90, 100, 110, 120], "pixel_ids": [1, 2, 3, 4] }, { "schema": "ev44", "topic": "local_detector", - "kafka_timestamp": 17000, + "kafka_timestamp": 15000, "source_name": "detector_events", "message_id": 669, - "reference_time": 17000, + "reference_time": 15000, "time_of_flight": [130, 140, 150, 160], "pixel_ids": [1, 2, 3, 4] + }, + { + "schema": "ev44", + "topic": "local_detector", + "kafka_timestamp": 16000, + "source_name": "detector_events", + "message_id": 670, + "reference_time": 16000, + "time_of_flight": [170, 180, 190, 200], + "pixel_ids": [1, 2, 3, 4] } ] diff --git a/domain-tests/nexus_templates/buffered_template.json b/domain-tests/nexus_templates/buffered_template.json new file mode 100644 index 0000000000000000000000000000000000000000..b6ec0427f91acde6d7d0cd46079b70f4de9f7ab4 --- /dev/null +++ b/domain-tests/nexus_templates/buffered_template.json @@ -0,0 +1,89 @@ +{ + "children": [ + { + "name": "entry", + "type": "group", + "attributes": [ + { + "name": "NX_class", + "dtype": "string", + "values": "NXentry" + } + ], + "children": [ + { + "module": "dataset", + "config": { + "name": "title", + "values": "This is a title", + "dtype": "string" + } + }, + { + "module": "mdat", + "config": { + "items": [ + "start_time", + "end_time" + ] + } + }, + { + "name": "instrument", + "type": "group", + "attributes": [ + { + "name": "NX_class", + "dtype": "string", + "values": "NXinstrument" + } + ], + "children": [ + { + "name": "chopper", + "type": "group", + "attributes": [ + { + "name": "NX_class", + "dtype": "string", + "values": "NXdisk_chopper" + } + ], + "children": [ + { + "name": "delay", + "type": "group", + "attributes": [ + { + "name": "NX_class", + "dtype": "string", + "values": "NXlog" + } + ], + "children": [ + { + "module": "f144", + "config": { + "source": "local:choppers:delay", + "topic": "local_choppers", + "dtype": "double" + } + } + ] + }, + { + "module": "dataset", + "config": { + "name": "depends_on", + "values": ".", + "dtype": "string" + } + } + ] + } + ] + } + ] + } + ] +} diff --git a/domain-tests/test_buffered.py b/domain-tests/test_buffered.py new file mode 100644 index 0000000000000000000000000000000000000000..1c5301893dcee8000302ad157d1977ef62814be2 --- /dev/null +++ b/domain-tests/test_buffered.py @@ -0,0 +1,22 @@ +import h5py +import pytest +from conftest import write_file + + +# This fixture is used to create the file +@pytest.fixture(scope="module") +def local_file(request): + return write_file( + request, + "output_files/buffered.hdf", + "nexus_templates/buffered_template.json", + "data_files/buffered_data.json", + ) + + +def test_f144_data_before_start_is_written_when_no_data_between_start_and_stop( + local_file, +): + with h5py.File(local_file, "r") as f: + assert f["/entry/instrument/chopper/delay/value"][0] == 3 + assert f["/entry/instrument/chopper/delay/time"][0] == 9_000_000_000 diff --git a/domain-tests/test_messages_before_and_after.py b/domain-tests/test_messages_before_and_after.py index 4a858cb667e5f07279b82f161670371f0cb43921..cf3c0dd022c10c5da643339e7a24c521e8151197 100644 --- a/domain-tests/test_messages_before_and_after.py +++ b/domain-tests/test_messages_before_and_after.py @@ -1,5 +1,4 @@ import h5py -import numpy as np import pytest from conftest import write_file @@ -21,23 +20,23 @@ def test_last_f144_data_before_start_is_written_but_earlier_values_ignored(local assert f["/entry/instrument/chopper/delay/time"][0] == 9_999_000_000 -def test_first_f144_data_after_stop_written_but_later_values_ignored(local_file): +def test_f144_data_after_stop_not_written(local_file): with h5py.File(local_file, "r") as f: - assert f["/entry/instrument/chopper/delay/value"][~0] == 17 - assert f["/entry/instrument/chopper/delay/time"][~0] == 16_000_000_000 + assert f["/entry/instrument/chopper/delay/value"][~0] == 16 + assert f["/entry/instrument/chopper/delay/time"][~0] == 15_000_000_000 -def test_last_ev44_data_before_start_is_written_but_earlier_values_ignored(local_file): +def test_ev44_data_before_start_is_not_written(local_file): with h5py.File(local_file, "r") as f: assert ( f["/entry/instrument/event_detector/events/event_time_zero"][0] - == 9_000_000_000 + == 10_000_000_000 ) -def test_first_ev44_data_after_stop_written_but_later_values_ignored(local_file): +def test_ev44_data_after_stop_not_written(local_file): with h5py.File(local_file, "r") as f: assert ( f["/entry/instrument/event_detector/events/event_time_zero"][~0] - == 16_000_000_000 + == 15_000_000_000 ) diff --git a/integration-tests/test_filewriter.py b/integration-tests/test_filewriter.py index 5633fc25a652f6b8fd34e8dead0df053b605c58e..211d041d64da5ebb4544d0d4c589d9feb6dcb72e 100644 --- a/integration-tests/test_filewriter.py +++ b/integration-tests/test_filewriter.py @@ -341,9 +341,10 @@ class TestFileWriter: def test_data_before_and_after(self, file_writer): """ Test that when writing in the past: - - the last value before the start time is written - - the first value after the stop time is written - - all values inbetween are written + - the last value before the start time is written for f144 + - the first value after the stop time is written for f144 + - all f144 values inbetween are written + - ev44 only writes the values inbetween the start and stop times """ producer = Producer({"bootstrap.servers": ",".join(get_brokers())}) @@ -379,12 +380,12 @@ class TestFileWriter: with h5py.File(os.path.join(OUTPUT_DIR, file_name), "r") as f: # Check data is as expected - assert len(f["/entry/detector/event_time_zero"]) == 8 - assert f["/entry/detector/event_id"][0] == 15 - assert f["/entry/detector/event_id"][~0] == 54 - assert len(f["/entry/motion/time"]) == 8 + assert len(f["/entry/detector/event_time_zero"]) == 6 + assert f["/entry/detector/event_id"][0] == 20 + assert f["/entry/detector/event_id"][~0] == 49 + assert len(f["/entry/motion/time"]) == 7 assert f["/entry/motion/value"][0] == 3 - assert f["/entry/motion/value"][~0] == 10 + assert f["/entry/motion/value"][~0] == 9 def test_start_and_stop_in_the_future(self, file_writer): """ diff --git a/src/Stream/MessageWriter.cpp b/src/Stream/MessageWriter.cpp index 2625bf879b75eb71a7aeb075db41438cedbb6b31..f02e36a435285064d2a26dd6268360f0650b03fc 100644 --- a/src/Stream/MessageWriter.cpp +++ b/src/Stream/MessageWriter.cpp @@ -51,16 +51,18 @@ MessageWriter::~MessageWriter() { } } -void MessageWriter::addMessage(Message const &Msg) { - WriteJobs.enqueue([=]() { writeMsgImpl(Msg.DestPtr, Msg.FbMsg); }); +void MessageWriter::addMessage(Message const &Msg, bool is_buffered_message) { + WriteJobs.enqueue( + [=]() { writeMsgImpl(Msg.DestPtr, Msg.FbMsg, is_buffered_message); }); } void MessageWriter::stop() { RunThread.store(false); } void MessageWriter::writeMsgImpl(WriterModule::Base *ModulePtr, - FileWriter::FlatbufferMessage const &Msg) { + FileWriter::FlatbufferMessage const &Msg, + bool is_buffered_message) { try { - ModulePtr->write(Msg); + ModulePtr->write(Msg, is_buffered_message); WritesDone++; } catch (WriterModule::WriterException &E) { WriteErrors++; diff --git a/src/Stream/MessageWriter.h b/src/Stream/MessageWriter.h index 9ef768597f0f20e36a49f8a642d1092482d11d2b..e7e75687c7ab04bec64be496806ae2d8d2dd78a4 100644 --- a/src/Stream/MessageWriter.h +++ b/src/Stream/MessageWriter.h @@ -38,7 +38,7 @@ public: virtual ~MessageWriter(); - virtual void addMessage(Message const &Msg); + virtual void addMessage(Message const &Msg, bool is_buffered_message); /// \brief Tell the writer thread to stop. /// @@ -60,7 +60,8 @@ public: protected: virtual void writeMsgImpl(WriterModule::Base *ModulePtr, - FileWriter::FlatbufferMessage const &Msg); + FileWriter::FlatbufferMessage const &Msg, + bool is_buffered_message); virtual void threadFunction(); virtual void flushData() { FlushDataFunction(); }; diff --git a/src/Stream/SourceFilter.cpp b/src/Stream/SourceFilter.cpp index 77a5cd282a4f40992a5309bedfd3f9c0da6822bd..586e54426fb475299b5d99ff98ab59f936148c01 100644 --- a/src/Stream/SourceFilter.cpp +++ b/src/Stream/SourceFilter.cpp @@ -36,7 +36,7 @@ bool SourceFilter::has_finished() const { return _is_finished; } void SourceFilter::forward_buffered_message() { if (_buffered_message.isValid()) { - forward_message(_buffered_message); + forward_message(_buffered_message, true); _buffered_message = FileWriter::FlatbufferMessage(); } } @@ -86,17 +86,19 @@ bool SourceFilter::filter_message( } if (message_time > _stop_time) { _is_finished = true; + forward_buffered_message(); + return false; } forward_buffered_message(); forward_message(message); return true; } -void SourceFilter::forward_message( - FileWriter::FlatbufferMessage const &message) { +void SourceFilter::forward_message(FileWriter::FlatbufferMessage const &message, + bool is_buffered_message) { ++MessagesTransmitted; for (auto const &writer_module : _destination_writer_modules) { - _writer->addMessage({writer_module, message}); + _writer->addMessage({writer_module, message}, is_buffered_message); } } diff --git a/src/Stream/SourceFilter.h b/src/Stream/SourceFilter.h index 60b63f61a26b494b6dce41e8893a74837042a35c..443ce20dac28b387e19122af93fc4920d42bd936 100644 --- a/src/Stream/SourceFilter.h +++ b/src/Stream/SourceFilter.h @@ -58,7 +58,8 @@ public: } private: - void forward_message(FileWriter::FlatbufferMessage const &message); + void forward_message(FileWriter::FlatbufferMessage const &message, + bool is_buffered_message = false); void forward_buffered_message(); time_point _start_time; time_point _stop_time; diff --git a/src/WriterModule/ad00/ad00_Writer.cpp b/src/WriterModule/ad00/ad00_Writer.cpp index 10524503b601f55616a1b3cdf9b53edd5fd46e73..b50951a643975df8854ceb7c10da70becb9fe47e 100644 --- a/src/WriterModule/ad00/ad00_Writer.cpp +++ b/src/WriterModule/ad00/ad00_Writer.cpp @@ -139,7 +139,8 @@ void msgTypeIsConfigType(ad00_Writer::Type ConfigType, DType MsgType) { } } -void ad00_Writer::writeImpl(const FileWriter::FlatbufferMessage &Message) { +bool ad00_Writer::writeImpl(const FileWriter::FlatbufferMessage &Message, + [[maybe_unused]] bool is_buffered_message) { auto ad00 = Getad00_ADArray(Message.data()); auto DataShape = hdf5::Dimensions(ad00->dimensions()->begin(), ad00->dimensions()->end()); @@ -199,6 +200,7 @@ void ad00_Writer::writeImpl(const FileWriter::FlatbufferMessage &Message) { CueTimestamp.appendElement(CurrentTimestamp); CueCounter = 0; } + return true; } template <typename Type> diff --git a/src/WriterModule/ad00/ad00_Writer.h b/src/WriterModule/ad00/ad00_Writer.h index 1975a35b13043f6384974ef180314d8372f41210..5922457d3cbd68cca1591ab33797c4197597e783 100644 --- a/src/WriterModule/ad00/ad00_Writer.h +++ b/src/WriterModule/ad00/ad00_Writer.h @@ -33,7 +33,8 @@ public: InitResult reopen(hdf5::node::Group &HDFGroup) override; - void writeImpl(FileWriter::FlatbufferMessage const &Message) override; + bool writeImpl(FileWriter::FlatbufferMessage const &Message, + bool is_buffered_message) override; enum class Type { int8, diff --git a/src/WriterModule/al00/al00_Writer.cpp b/src/WriterModule/al00/al00_Writer.cpp index ac56b12ac720f3dea9c73478b3e2d7776e789a3c..9beeff2baa374265bcba4601256a7c638dbea470 100644 --- a/src/WriterModule/al00/al00_Writer.cpp +++ b/src/WriterModule/al00/al00_Writer.cpp @@ -54,7 +54,8 @@ InitResult al00_Writer::reopen(hdf5::node::Group &HDFGroup) { return InitResult::OK; } -void al00_Writer::writeImpl(FlatbufferMessage const &Message) { +bool al00_Writer::writeImpl(FlatbufferMessage const &Message, + [[maybe_unused]] bool is_buffered_message) { auto AlarmMessage = GetAlarm(Message.data()); AlarmTime.appendElement(AlarmMessage->timestamp()); @@ -65,6 +66,7 @@ void al00_Writer::writeImpl(FlatbufferMessage const &Message) { AlarmMessageString = "NO ALARM MESSAGE"; } AlarmMsg.appendStringElement(AlarmMessageString); + return true; } /// Register the writer module. diff --git a/src/WriterModule/al00/al00_Writer.h b/src/WriterModule/al00/al00_Writer.h index 87ce75656ccd639d1173ec0c85aa3bc86be8aeef..fa68a2b36f74de16e57de9016e801515dd20832a 100644 --- a/src/WriterModule/al00/al00_Writer.h +++ b/src/WriterModule/al00/al00_Writer.h @@ -33,7 +33,8 @@ public: WriterModule::InitResult reopen(hdf5::node::Group &HDFGroup) override; /// Write an incoming message which should contain a flatbuffer. - void writeImpl(FlatbufferMessage const &Message) override; + bool writeImpl(FlatbufferMessage const &Message, + bool is_buffered_message) override; al00_Writer() : WriterModule::Base("al00", false, "NXlog") {} ~al00_Writer() override = default; diff --git a/src/WriterModule/da00/da00_Writer.cpp b/src/WriterModule/da00/da00_Writer.cpp index eb94cb8a5d48795c705977e5b7574f789ed4b40a..c36674bfe3b2d8182dab8d6d9c353f36a50d7fb0 100644 --- a/src/WriterModule/da00/da00_Writer.cpp +++ b/src/WriterModule/da00/da00_Writer.cpp @@ -330,7 +330,8 @@ InitResult da00_Writer::reopen(hdf5::node::Group &HDFGroup) { return InitResult::OK; } -void da00_Writer::writeImpl(const FileWriter::FlatbufferMessage &Message) { +bool da00_Writer::writeImpl(const FileWriter::FlatbufferMessage &Message, + [[maybe_unused]] bool is_buffered_message) { const auto da00_obj = Getda00_DataArray(Message.data()); if (isFirstMessage) { handle_first_message(da00_obj); @@ -382,6 +383,7 @@ void da00_Writer::writeImpl(const FileWriter::FlatbufferMessage &Message) { CueTimestampZero.appendElement(da00_obj->timestamp()); CueCounter = 0; } + return true; } } // namespace WriterModule::da00 diff --git a/src/WriterModule/da00/da00_Writer.h b/src/WriterModule/da00/da00_Writer.h index c07d987bb7657b56dc74f5f5820f8e04baeb50f8..eb5301e557aa9787f55735bebe7b147fcb3df035 100644 --- a/src/WriterModule/da00/da00_Writer.h +++ b/src/WriterModule/da00/da00_Writer.h @@ -36,7 +36,8 @@ public: InitResult reopen(hdf5::node::Group &HDFGroup) override; - void writeImpl(FileWriter::FlatbufferMessage const &Message) override; + bool writeImpl(FileWriter::FlatbufferMessage const &Message, + bool is_buffered_message) override; NeXusDataset::Time Timestamp; NeXusDataset::CueIndex CueIndex; diff --git a/src/WriterModule/ep01/ep01_Writer.cpp b/src/WriterModule/ep01/ep01_Writer.cpp index 6b13d578603497a91966ff9ae6b36cc9075a80af..3e6dc1f313c1bb0c236ca86500875e00f0e2c312 100644 --- a/src/WriterModule/ep01/ep01_Writer.cpp +++ b/src/WriterModule/ep01/ep01_Writer.cpp @@ -35,12 +35,14 @@ InitResult ep01_Writer::init_hdf(hdf5::node::Group &HDFGroup) { return InitResult::OK; } -void ep01_Writer::writeImpl(FileWriter::FlatbufferMessage const &Message) { +bool ep01_Writer::writeImpl(FileWriter::FlatbufferMessage const &Message, + [[maybe_unused]] bool is_buffered_message) { auto FlatBuffer = GetEpicsPVConnectionInfo(Message.data()); std::int16_t Status = static_cast<std::int16_t>(FlatBuffer->status()); StatusDataset.appendElement(Status); auto FBTimestamp = FlatBuffer->timestamp(); TimestampDataset.appendElement(FBTimestamp); + return true; } static WriterModule::Registry::Registrar<ep01_Writer> diff --git a/src/WriterModule/ep01/ep01_Writer.h b/src/WriterModule/ep01/ep01_Writer.h index de0537c92ba23d45fd96af06830b23acd904a2c9..b13be6d9d5c6d76153a93c442103100026e5a939 100644 --- a/src/WriterModule/ep01/ep01_Writer.h +++ b/src/WriterModule/ep01/ep01_Writer.h @@ -9,7 +9,8 @@ class ep01_Writer final : public WriterModule::Base { public: InitResult init_hdf(hdf5::node::Group &HDFGroup) override; InitResult reopen(hdf5::node::Group &HDFGroup) override; - void writeImpl(FileWriter::FlatbufferMessage const &Message) override; + bool writeImpl(FileWriter::FlatbufferMessage const &Message, + bool is_buffered_message) override; ep01_Writer() : WriterModule::Base("ep01", false, "NXlog") {} ~ep01_Writer() override = default; diff --git a/src/WriterModule/ev44/ev44_Writer.cpp b/src/WriterModule/ev44/ev44_Writer.cpp index b7a30884693b1bcb1047e2c11b37f23f91abb4cc..b47611f2e59a485c17d31c615e30fa46df261664 100644 --- a/src/WriterModule/ev44/ev44_Writer.cpp +++ b/src/WriterModule/ev44/ev44_Writer.cpp @@ -89,7 +89,12 @@ WriterModule::InitResult ev44_Writer::reopen(hdf5::node::Group &HDFGroup) { return WriterModule::InitResult::OK; } -void ev44_Writer::writeImpl(FlatbufferMessage const &Message) { +bool ev44_Writer::writeImpl(FlatbufferMessage const &Message, + bool is_buffered_message) { + if (is_buffered_message) { + // Ignore buffered data for event data + return false; + } auto EventMsgFlatbuffer = GetEvent44Message(Message.data()); auto CurrentNumberOfEvents = EventMsgFlatbuffer->time_of_flight()->size(); if (EventMsgFlatbuffer->pixel_id()->size() > 0 && @@ -129,6 +134,7 @@ void ev44_Writer::writeImpl(FlatbufferMessage const &Message) { } EventsWrittenMetadataField.setValue(EventsWritten); } + return true; } void ev44_Writer::register_meta_data(const hdf5::node::Group &HDFGroup, diff --git a/src/WriterModule/ev44/ev44_Writer.h b/src/WriterModule/ev44/ev44_Writer.h index 0850818dc86b466f98a0a17e168c85a5acd77498..7e3d4649375e07f724330b1520cfac5fa56403be 100644 --- a/src/WriterModule/ev44/ev44_Writer.h +++ b/src/WriterModule/ev44/ev44_Writer.h @@ -27,7 +27,8 @@ public: /// \brief Write flatbuffer message. /// /// \param FlatBufferMessage - void writeImpl(FlatbufferMessage const &Message) override; + bool writeImpl(FlatbufferMessage const &Message, + bool is_buffered_message) override; NeXusDataset::EventTimeOffset EventTimeOffset; NeXusDataset::EventId EventId; diff --git a/src/WriterModule/f144/f144_Writer.cpp b/src/WriterModule/f144/f144_Writer.cpp index 7c21d83f0c5309fd9a032a877df6adadc7fc35cf..8707ac4d708fca3fb899b545ed7ea63af0f29755 100644 --- a/src/WriterModule/f144/f144_Writer.cpp +++ b/src/WriterModule/f144/f144_Writer.cpp @@ -194,7 +194,8 @@ void msgTypeIsConfigType(f144_Writer::Type ConfigType, Value MsgType) { } } -void f144_Writer::writeImpl(FlatbufferMessage const &Message) { +bool f144_Writer::writeImpl(FlatbufferMessage const &Message, + [[maybe_unused]] bool is_buffered_message) { auto LogDataMessage = Getf144_LogData(Message.data()); Timestamp.appendElement(LogDataMessage->timestamp()); auto Type = LogDataMessage->value_type(); @@ -273,6 +274,7 @@ void f144_Writer::writeImpl(FlatbufferMessage const &Message) { MetaDataMax.setValue(Max); MetaDataMean.setValue(Sum / TotalNrOfElementsWritten); } + return true; } void f144_Writer::register_meta_data(hdf5::node::Group const &HDFGroup, diff --git a/src/WriterModule/f144/f144_Writer.h b/src/WriterModule/f144/f144_Writer.h index 1841d7941f0c57214f819aaf324efcf87b4a8ca2..b051a739ac0415344cf716d82fd54ffef2371138 100644 --- a/src/WriterModule/f144/f144_Writer.h +++ b/src/WriterModule/f144/f144_Writer.h @@ -39,7 +39,8 @@ public: WriterModule::InitResult reopen(hdf5::node::Group &HDFGroup) override; /// Write an incoming message which should contain a flatbuffer. - void writeImpl(FlatbufferMessage const &Message) override; + bool writeImpl(FlatbufferMessage const &Message, + bool is_buffered_message) override; f144_Writer() : WriterModule::Base("f144", false, "NXlog", diff --git a/src/WriterModule/se00/se00_Writer.cpp b/src/WriterModule/se00/se00_Writer.cpp index 0880a4892458d7fa6609aa228aebb28ec0a9bddf..0b0bd75d044e4929a7320be0155b69671dc844a4 100644 --- a/src/WriterModule/se00/se00_Writer.cpp +++ b/src/WriterModule/se00/se00_Writer.cpp @@ -132,7 +132,8 @@ void msgTypeIsConfigType(se00_Writer::Type ConfigType, ValueUnion MsgType) { } } -void se00_Writer::writeImpl(const FileWriter::FlatbufferMessage &Message) { +bool se00_Writer::writeImpl(const FileWriter::FlatbufferMessage &Message, + [[maybe_unused]] bool is_buffered_message) { auto FbPointer = Getse00_SampleEnvironmentData(Message.data()); auto CueIndexValue = Value->current_size(); auto ValuesType = FbPointer->values_type(); @@ -199,7 +200,7 @@ void se00_Writer::writeImpl(const FileWriter::FlatbufferMessage &Message) { Logger::Info("Unknown data type in flatbuffer."); } if (NrOfElements == 0) { - return; + return false; } CueTimestampIndex.appendElement(static_cast<std::uint32_t>(CueIndexValue)); CueTimestamp.appendElement(FbPointer->packet_timestamp()); @@ -216,6 +217,7 @@ void se00_Writer::writeImpl(const FileWriter::FlatbufferMessage &Message) { FbPointer->packet_timestamp(), FbPointer->time_delta(), NrOfElements)); Timestamp.appendArray(TempTimeStamps); } + return true; } template <typename Type> diff --git a/src/WriterModule/se00/se00_Writer.h b/src/WriterModule/se00/se00_Writer.h index 43a770d139439139a12c180000991f2821049751..290c177190b1a9f23c989bf5c0c60e42eede4349 100644 --- a/src/WriterModule/se00/se00_Writer.h +++ b/src/WriterModule/se00/se00_Writer.h @@ -44,7 +44,8 @@ public: InitResult reopen(hdf5::node::Group &HDFGroup) override; - void writeImpl(FlatbufferMessage const &Message) override; + bool writeImpl(FlatbufferMessage const &Message, + bool is_buffered_message) override; enum class Type { int8, diff --git a/src/WriterModule/tdct/tdct_Writer.cpp b/src/WriterModule/tdct/tdct_Writer.cpp index fa0551a64c57edc07a0672f7dd19ea852b020083..2f69c1c7a8f77060e4de34066fb7b0619fa9451c 100644 --- a/src/WriterModule/tdct/tdct_Writer.cpp +++ b/src/WriterModule/tdct/tdct_Writer.cpp @@ -64,20 +64,22 @@ WriterModule::InitResult tdct_Writer::reopen(hdf5::node::Group &HDFGroup) { return WriterModule::InitResult::OK; } -void tdct_Writer::writeImpl(const FileWriter::FlatbufferMessage &Message) { +bool tdct_Writer::writeImpl(const FileWriter::FlatbufferMessage &Message, + [[maybe_unused]] bool is_buffered_message) { auto FbPointer = Gettimestamp(Message.data()); auto TempTimePtr = FbPointer->timestamps()->data(); auto TempTimeSize = FbPointer->timestamps()->size(); if (TempTimeSize == 0) { Logger::Info( "Received a flatbuffer with zero (0) timestamps elements in it."); - return; + return false; } hdf5::ArrayAdapter<const std::uint64_t> CArray(TempTimePtr, TempTimeSize); auto CueIndexValue = Timestamp.current_size(); CueTimestampIndex.appendElement(static_cast<std::uint32_t>(CueIndexValue)); CueTimestamp.appendElement(FbPointer->timestamps()->operator[](0)); Timestamp.appendArray(CArray); + return true; } } // namespace WriterModule::tdct diff --git a/src/WriterModule/tdct/tdct_Writer.h b/src/WriterModule/tdct/tdct_Writer.h index d82d770b342e4fad1fb49687264c010632961926..ee6c2c87d1586d1acf7a97bb166fd48dea7f9433 100644 --- a/src/WriterModule/tdct/tdct_Writer.h +++ b/src/WriterModule/tdct/tdct_Writer.h @@ -34,7 +34,8 @@ public: InitResult reopen(hdf5::node::Group &HDFGroup) override; - void writeImpl(FlatbufferMessage const &Message) override; + bool writeImpl(FlatbufferMessage const &Message, + bool is_buffered_message) override; protected: NeXusDataset::Time Timestamp; diff --git a/src/WriterModule/template/TemplateWriter.h b/src/WriterModule/template/TemplateWriter.h index 867e15f3d48ec73688e4fe223c46eb60c166bc07..ea5cae5b3bb4b149a41c735cd9353381a52d1e69 100644 --- a/src/WriterModule/template/TemplateWriter.h +++ b/src/WriterModule/template/TemplateWriter.h @@ -186,8 +186,9 @@ public: /// \param Message The structure containing a pointer to a buffer /// containing data received from the Kafka broker and the size of the buffer. // cppcheck-suppress functionStatic - void writeImpl(FileWriter::FlatbufferMessage const &/*Message*/) override { + bool writeImpl([[maybe_unused]] FileWriter::FlatbufferMessage const &message, [[maybe_unused]]bool is_buffered_message) override { std::cout << "WriterClass::writeImpl()\n"; + return true; } }; } // namespace TemplateWriter diff --git a/src/WriterModuleBase.h b/src/WriterModuleBase.h index b0f98ddc3096a23ba56dcf26c4df6d324aabc50d..65d8ac703a9060f181548d25fb9cebff967d779b 100644 --- a/src/WriterModuleBase.h +++ b/src/WriterModuleBase.h @@ -111,15 +111,18 @@ public: /// \brief Increment write counter and call the subclass-specific write logic. /// /// \param msg The message to process - void write(FileWriter::FlatbufferMessage const &Message) { - writeImpl(Message); - WriteCount++; + void write(FileWriter::FlatbufferMessage const &Message, + bool is_buffered_message) { + if (writeImpl(Message, is_buffered_message)) { + WriteCount++; + } } /// \brief Process the message in some way, for example write to the HDF file. /// /// \param msg The message to process - virtual void writeImpl(FileWriter::FlatbufferMessage const &Message) = 0; + virtual bool writeImpl(FileWriter::FlatbufferMessage const &Message, + bool is_buffered_message) = 0; void registerField(JsonConfig::FieldBase *Ptr) { ConfigHandler.registerField(Ptr); diff --git a/tests/SourceTests.cpp b/tests/SourceTests.cpp index f2d8c5d30183a87fa6ee7770c3e8f0f667f770c2..49c3a816884869fd159fcf4e80e757d403b45a0e 100644 --- a/tests/SourceTests.cpp +++ b/tests/SourceTests.cpp @@ -34,7 +34,7 @@ public: class WriterModuleMock : public StubWriterModule { public: - MAKE_MOCK1(writeImpl, void(FlatbufferMessage const &), override); + MAKE_MOCK2(writeImpl, bool(FlatbufferMessage const &, bool), override); }; TEST_F(SourceTests, ConstructorSetsMembers) { diff --git a/tests/Stream/MessageWriterTests.cpp b/tests/Stream/MessageWriterTests.cpp index bff7af812a3fe002bba713a13ef89819f76d1b43..0cec2c971d9a26cda618e2ff9865b948193cb16a 100644 --- a/tests/Stream/MessageWriterTests.cpp +++ b/tests/Stream/MessageWriterTests.cpp @@ -25,7 +25,8 @@ public: ~WriterModuleStandIn() = default; MAKE_MOCK1(init_hdf, WriterModule::InitResult(hdf5::node::Group &), override); MAKE_MOCK1(reopen, WriterModule::InitResult(hdf5::node::Group &), override); - MAKE_MOCK1(writeImpl, void(FileWriter::FlatbufferMessage const &), override); + MAKE_MOCK2(writeImpl, bool(FileWriter::FlatbufferMessage const &, bool), + override); }; class DataMessageWriterTest : public ::testing::Test { @@ -79,7 +80,7 @@ TEST_F(DataMessageWriterTest, EnableExtraModule) { } TEST_F(DataMessageWriterTest, WriteMessageSuccess) { - REQUIRE_CALL(WriterModule, writeImpl(_)).TIMES(1); + REQUIRE_CALL(WriterModule, writeImpl(_, _)).TIMES(1).RETURN(true); auto InitialWriteCount = WriterModule.getWriteCount(); FileWriter::FlatbufferMessage Msg; Stream::Message SomeMessage( @@ -87,7 +88,7 @@ TEST_F(DataMessageWriterTest, WriteMessageSuccess) { { Stream::MessageWriter Writer{ []() {}, 1s, std::make_unique<Metrics::Registrar>("some_prefix")}; - Writer.addMessage(SomeMessage); + Writer.addMessage(SomeMessage, false); Writer.runJob([&Writer]() { EXPECT_TRUE(Writer.nrOfWritesDone() == 1); EXPECT_TRUE(Writer.nrOfWriteErrors() == 0); @@ -97,7 +98,7 @@ TEST_F(DataMessageWriterTest, WriteMessageSuccess) { } TEST_F(DataMessageWriterTest, WriteMessageExceptionUnknownFb) { - REQUIRE_CALL(WriterModule, writeImpl(_)) + REQUIRE_CALL(WriterModule, writeImpl(_, _)) .TIMES(1) .THROW(WriterModule::WriterException("Some error.")); auto InitialWriteCount = WriterModule.getWriteCount(); @@ -110,7 +111,7 @@ TEST_F(DataMessageWriterTest, WriteMessageExceptionUnknownFb) { Writer.runJob([&Writer]() { EXPECT_TRUE(Writer.nrOfWriterModulesWithErrors() == 1); }); - Writer.addMessage(SomeMessage); + Writer.addMessage(SomeMessage, false); Writer.runJob([&Writer]() { EXPECT_TRUE(Writer.nrOfWritesDone() == 0); EXPECT_TRUE(Writer.nrOfWriteErrors() == 1); diff --git a/tests/Stream/SourceFilterTest.cpp b/tests/Stream/SourceFilterTest.cpp index 1f4d0c562dfc740a3617c1d4730612687be3c247..72b3f0a5ca99d90fb9c063765f7de7973f382612 100644 --- a/tests/Stream/SourceFilterTest.cpp +++ b/tests/Stream/SourceFilterTest.cpp @@ -17,8 +17,9 @@ class StubMessageWriter : public Stream::MessageWriter { public: StubMessageWriter() : MessageWriter([]() {}, 1s, std::make_unique<Metrics::Registrar>("")) {} - void addMessage(Stream::Message const &Msg) override { - messages_received.emplace_back(Msg); + void addMessage(Stream::Message const &message, + [[maybe_unused]] bool is_buffered_message) override { + messages_received.emplace_back(message); } std::vector<Stream::Message> messages_received; }; @@ -115,15 +116,13 @@ TEST(SourceFilter, message_on_start_is_allowed_through) { EXPECT_EQ(1u, harness.writer->messages_received.size()); } -TEST(SourceFilter, first_message_after_stop_is_allowed_through) { +TEST(SourceFilter, messages_after_stop_are_not_allowed_through) { auto harness = create_filter_for_tests(time_point{0ms}, time_point{1000ms}); harness.filter->filter_message(create_f144_message("::source::", 1, 1001)); harness.filter->filter_message(create_f144_message("::source::", 2, 1002)); - EXPECT_EQ(1u, harness.writer->messages_received.size()); - auto first = harness.writer->messages_received.at(0).FbMsg; - EXPECT_EQ(1001000000, first.getTimestamp()); // timestamp is in ns + EXPECT_EQ(0u, harness.writer->messages_received.size()); } TEST(SourceFilter, message_after_stop_sets_filter_to_finished) { @@ -163,11 +162,13 @@ TEST(SourceFilter, can_change_stop_time_after_construction) { harness.filter->set_stop_time(time_point{1000ms}); - // First message after stop is allowed + // Messages after stop are not allowed + harness.filter->filter_message(create_f144_message("::source::", 1, 999)); + harness.filter->filter_message(create_f144_message("::source::", 1, 1000)); harness.filter->filter_message(create_f144_message("::source::", 1, 1001)); harness.filter->filter_message(create_f144_message("::source::", 2, 1002)); - EXPECT_EQ(1u, harness.writer->messages_received.size()); + EXPECT_EQ(2u, harness.writer->messages_received.size()); } TEST(SourceFilter, diff --git a/tests/WriterModule/TemplateWriterTests.cpp b/tests/WriterModule/TemplateWriterTests.cpp index 09f9e20374bf1cb39802506570c680d926ab2859..f23a9e7b6912b8139787c50fecaa628ca21de9c9 100644 --- a/tests/WriterModule/TemplateWriterTests.cpp +++ b/tests/WriterModule/TemplateWriterTests.cpp @@ -15,5 +15,5 @@ TEST(TemplateTests, WriterReturnValues) { hdf5::node::Group SomeGroup; EXPECT_TRUE(SomeWriter.init_hdf(SomeGroup) == WriterModule::InitResult::OK); EXPECT_TRUE(SomeWriter.reopen(SomeGroup) == WriterModule::InitResult::OK); - EXPECT_NO_THROW(SomeWriter.write(FileWriter::FlatbufferMessage())); + EXPECT_NO_THROW(SomeWriter.write(FileWriter::FlatbufferMessage(), false)); } diff --git a/tests/WriterModule/al00_WriterTests.cpp b/tests/WriterModule/al00_WriterTests.cpp index d0c103b994228e3681522893f771853561a70891..5e9f6d9c81c689cf1e964e1c24c7fe04b8ee59cd 100644 --- a/tests/WriterModule/al00_WriterTests.cpp +++ b/tests/WriterModule/al00_WriterTests.cpp @@ -89,7 +89,7 @@ TEST_F(EPICS_AlarmWriter, WriteDataOnce) { EXPECT_TRUE(Writer.init_hdf(UsedGroup) == InitResult::OK); EXPECT_TRUE(Writer.reopen(UsedGroup) == InitResult::OK); FileWriter::FlatbufferMessage TestMsg(Buffer.get(), BufferSize); - EXPECT_NO_THROW(Writer.write(TestMsg)); + EXPECT_NO_THROW(Writer.write(TestMsg, false)); auto AlarmMsgDataset = UsedGroup.get_dataset("alarm_message"); auto AlarmSeverityDataset = UsedGroup.get_dataset("alarm_severity"); auto AlarmTimeDataset = UsedGroup.get_dataset("alarm_time"); diff --git a/tests/WriterModule/da00_WriterTests.cpp b/tests/WriterModule/da00_WriterTests.cpp index c37d0bc7cbb1e3f9f335e2e378adb94e6f1d7786..3d46bfe675b08b82d879ac21ba9394e48f38a942 100644 --- a/tests/WriterModule/da00_WriterTests.cpp +++ b/tests/WriterModule/da00_WriterTests.cpp @@ -747,7 +747,7 @@ TEST_F(da00_WriterTestFixture, da00_WriterWriteExtendsShape) { writer.init_hdf(_group); writer.reopen(_group); for (int i = 0; i < write_count; ++i) - EXPECT_NO_THROW(writer.write(message)); + EXPECT_NO_THROW(writer.write(message, false)); EXPECT_EQ(write_count, writer.Timestamp.current_size()); } for (const auto &name : @@ -774,7 +774,7 @@ TEST_F(da00_WriterTestFixture, da00_WriterWriteCopiesData) { writer.reopen(_group); constexpr int write_count{10}; for (int i = 0; i < write_count; ++i) - EXPECT_NO_THROW(writer.write(message)); + EXPECT_NO_THROW(writer.write(message, false)); EXPECT_EQ(write_count, writer.Timestamp.current_size()); } const auto shape = Simple(_group.get_dataset("signal").dataspace()); @@ -797,7 +797,7 @@ TEST_F(da00_WriterTestFixture, da00_WriterFillsInAttributes) { writer.reopen(_group); constexpr int write_count{10}; for (int i = 0; i < write_count; ++i) - EXPECT_NO_THROW(writer.write(message)); + EXPECT_NO_THROW(writer.write(message, false)); EXPECT_EQ(write_count, writer.Timestamp.current_size()); } for (const auto &name : {"signal", "signal_error", "gain", "x", "y", "time", diff --git a/tests/WriterModule/ep01_WriterTests.cpp b/tests/WriterModule/ep01_WriterTests.cpp index 088bf7c2cb7428babb18c8fdbd9e0446e73bd763..40664fc91c9953d9b386643d7cf7b8b8e41ae813 100644 --- a/tests/WriterModule/ep01_WriterTests.cpp +++ b/tests/WriterModule/ep01_WriterTests.cpp @@ -87,7 +87,7 @@ TEST_F(EPICS_ConStatusWriter, WriteDataOnce) { EXPECT_TRUE(Writer.init_hdf(UsedGroup) == InitResult::OK); EXPECT_TRUE(Writer.reopen(UsedGroup) == InitResult::OK); FileWriter::FlatbufferMessage TestMsg(Buffer.get(), BufferSize); - EXPECT_NO_THROW(Writer.write(TestMsg)); + EXPECT_NO_THROW(Writer.write(TestMsg, false)); auto ConStatusTimeDataset = UsedGroup.get_dataset("connection_status_time"); auto ConStatusDataset = UsedGroup.get_dataset("connection_status"); auto FbPointer = GetEpicsPVConnectionInfo(TestMsg.data()); diff --git a/tests/WriterModule/ev44_WriterTests.cpp b/tests/WriterModule/ev44_WriterTests.cpp index 748f7de19523af2ae4ee894be7cfebbf6141bf2c..a3b904fc3499e268678c71c76b9f3b720d468ce6 100644 --- a/tests/WriterModule/ev44_WriterTests.cpp +++ b/tests/WriterModule/ev44_WriterTests.cpp @@ -163,7 +163,7 @@ TEST_F(Event44WriterTests, WriterModule::ev44::ev44_Writer Writer; EXPECT_TRUE(Writer.init_hdf(TestGroup) == InitResult::OK); EXPECT_TRUE(Writer.reopen(TestGroup) == InitResult::OK); - EXPECT_NO_THROW(Writer.write(TestMessage)); + EXPECT_NO_THROW(Writer.write(TestMessage, false)); } // These braces are required due to "h5.cpp" // Read data from the file @@ -217,7 +217,7 @@ TEST_F(Event44WriterTests, WriterSuccessfullyRecordsEventDataWithoutPixelIds) { WriterModule::ev44::ev44_Writer Writer; EXPECT_TRUE(Writer.init_hdf(TestGroup) == InitResult::OK); EXPECT_TRUE(Writer.reopen(TestGroup) == InitResult::OK); - EXPECT_NO_THROW(Writer.write(TestMessage)); + EXPECT_NO_THROW(Writer.write(TestMessage, false)); } // These braces are required due to "h5.cpp" // Read data from the file @@ -280,8 +280,8 @@ TEST_F(Event44WriterTests, WriterSuccessfullyRecordsEventDataFromTwoMessages) { WriterModule::ev44::ev44_Writer Writer; EXPECT_TRUE(Writer.init_hdf(TestGroup) == InitResult::OK); EXPECT_TRUE(Writer.reopen(TestGroup) == InitResult::OK); - EXPECT_NO_THROW(Writer.write(TestMessage1)); - EXPECT_NO_THROW(Writer.write(TestMessage2)); + EXPECT_NO_THROW(Writer.write(TestMessage1, false)); + EXPECT_NO_THROW(Writer.write(TestMessage2, false)); } // These braces are required due to "h5.cpp" // Read data from the file @@ -369,9 +369,9 @@ TEST_F(Event44WriterTests, WriterSuccessfullyHandlesMessageWithNoEvents) { WriterModule::ev44::ev44_Writer Writer; EXPECT_TRUE(Writer.init_hdf(TestGroup) == InitResult::OK); EXPECT_TRUE(Writer.reopen(TestGroup) == InitResult::OK); - EXPECT_NO_THROW(Writer.write(TestMessage1)); - EXPECT_NO_THROW(Writer.write(TestMessage2)); - EXPECT_NO_THROW(Writer.write(TestMessage3)); + EXPECT_NO_THROW(Writer.write(TestMessage1, false)); + EXPECT_NO_THROW(Writer.write(TestMessage2, false)); + EXPECT_NO_THROW(Writer.write(TestMessage3, false)); } // These braces are required due to "h5.cpp" // Read data from the file @@ -445,7 +445,7 @@ TEST_F(Event44WriterTests, PulseTimeIsRepeatedWithinSameMessage) { WriterModule::ev44::ev44_Writer Writer; EXPECT_TRUE(Writer.init_hdf(TestGroup) == InitResult::OK); EXPECT_TRUE(Writer.reopen(TestGroup) == InitResult::OK); - EXPECT_NO_THROW(Writer.write(TestMessage)); + EXPECT_NO_THROW(Writer.write(TestMessage, false)); } // These braces are required due to "h5.cpp" // Read data from the file @@ -510,8 +510,8 @@ TEST_F(Event44WriterTests, LastPulseTimeIsRepeatedInSubsequentMessage) { WriterModule::ev44::ev44_Writer Writer; EXPECT_TRUE(Writer.init_hdf(TestGroup) == InitResult::OK); EXPECT_TRUE(Writer.reopen(TestGroup) == InitResult::OK); - EXPECT_NO_THROW(Writer.write(TestMessage1)); - EXPECT_NO_THROW(Writer.write(TestMessage2)); + EXPECT_NO_THROW(Writer.write(TestMessage1, false)); + EXPECT_NO_THROW(Writer.write(TestMessage2, false)); } // These braces are required due to "h5.cpp" // Read data from the file @@ -581,8 +581,8 @@ TEST_F(Event44WriterTests, CuesFromTwoMessagesAreRecorded) { Writer.setCueInterval(1); EXPECT_TRUE(Writer.init_hdf(TestGroup) == InitResult::OK); EXPECT_TRUE(Writer.reopen(TestGroup) == InitResult::OK); - EXPECT_NO_THROW(Writer.write(TestMessage1)); - EXPECT_NO_THROW(Writer.write(TestMessage2)); + EXPECT_NO_THROW(Writer.write(TestMessage1, false)); + EXPECT_NO_THROW(Writer.write(TestMessage2, false)); } // These braces are required due to "h5.cpp" // Read data from the file @@ -603,3 +603,30 @@ TEST_F(Event44WriterTests, CuesFromTwoMessagesAreRecorded) { << "Expected cue_index dataset to contain the indices of the last event " "of every message"; } + +TEST_F(Event44WriterTests, buffered_data_not_written) { + std::vector<int32_t> TimeOfFlight1 = {101, 102, 201}; + std::vector<int32_t> DetectorID1 = {101, 102, 201}; + std::vector<int64_t> ReferenceTime1 = {1000, 2000}; + std::vector<int32_t> ReferenceTimeIndex1 = {0, 2}; + auto MessageBuffer1 = + generateFlatbufferData("TestSource", 1, TimeOfFlight1, DetectorID1, + ReferenceTime1, ReferenceTimeIndex1); + FileWriter::FlatbufferMessage TestMessage1(MessageBuffer1.data(), + MessageBuffer1.size()); + + // Create writer and give it the message to write + { + WriterModule::ev44::ev44_Writer Writer; + EXPECT_TRUE(Writer.init_hdf(TestGroup) == InitResult::OK); + EXPECT_TRUE(Writer.reopen(TestGroup) == InitResult::OK); + EXPECT_NO_THROW(Writer.write(TestMessage1, true)); + } // These braces are required due to "h5.cpp" + + // Read data from the file + auto EventTimeOffsetDataset = TestGroup.get_dataset("event_time_offset"); + auto EventTimeZeroDataset = TestGroup.get_dataset("event_time_zero"); + + EXPECT_EQ(0, EventTimeOffsetDataset.dataspace().size()); + EXPECT_EQ(0, EventTimeZeroDataset.dataspace().size()); +} diff --git a/tests/WriterModule/f144_WriterTests.cpp b/tests/WriterModule/f144_WriterTests.cpp index 05b73f29887fd0f0dd3e2c4f5143c9dd87548e67..0948b4c32d33e3e66a4e632eefff8320ccaa1364 100644 --- a/tests/WriterModule/f144_WriterTests.cpp +++ b/tests/WriterModule/f144_WriterTests.cpp @@ -313,7 +313,7 @@ TEST_F(f144Init, write_one_element) { EXPECT_EQ(FlatbufferMsg.getFlatbufferID(), "f144"); EXPECT_EQ(TestWriter.Values.size(), 0u); EXPECT_EQ(TestWriter.Timestamp.current_size(), 0); - TestWriter.write(FlatbufferMsg); + TestWriter.write(FlatbufferMsg, false); EXPECT_EQ(TestWriter.Values.size(), 1u); ASSERT_EQ(TestWriter.Timestamp.current_size(), 1); std::vector<double> WrittenValues(1); @@ -338,7 +338,8 @@ TEST_F(f144Init, write_one_default_value_element) { EXPECT_EQ(TestWriter.Values.size(), 0u); EXPECT_EQ(TestWriter.Timestamp.current_size(), 0); TestWriter.write(FileWriter::FlatbufferMessage(FlatbufferData.first.get(), - FlatbufferData.second)); + FlatbufferData.second), + false); EXPECT_EQ(TestWriter.Values.size(), 1u); ASSERT_EQ(TestWriter.Timestamp.current_size(), 1); std::vector<double> WrittenValues(1); @@ -360,7 +361,7 @@ TEST_F(f144Init, write_multiple_elements) { auto [buffer, size] = f144_schema::generateFlatbufferMessage(values[i], timestamps[i]); FileWriter::FlatbufferMessage FlatbufferMsg(buffer.get(), size); - TestWriter.write(FlatbufferMsg); + TestWriter.write(FlatbufferMsg, false); } std::vector<double> WrittenValues(values.size()); diff --git a/tests/WriterModule/se00_WriterTests.cpp b/tests/WriterModule/se00_WriterTests.cpp index b7a663454b4de3af2356660b11989d4a12e9ea0d..74bb73a92946078b3feac104cfa98ed1521e210d 100644 --- a/tests/WriterModule/se00_WriterTests.cpp +++ b/tests/WriterModule/se00_WriterTests.cpp @@ -109,7 +109,7 @@ TEST_F(se00Writer, WriteDataOnce) { EXPECT_TRUE(Writer.init_hdf(UsedGroup) == InitResult::OK); EXPECT_TRUE(Writer.reopen(UsedGroup) == InitResult::OK); FileWriter::FlatbufferMessage TestMsg(Buffer.get(), BufferSize); - EXPECT_NO_THROW(Writer.write(TestMsg)); + EXPECT_NO_THROW(Writer.write(TestMsg, false)); auto RawValuesDataset = UsedGroup.get_dataset("value"); auto TimestampDataset = UsedGroup.get_dataset("time"); auto CueIndexDataset = UsedGroup.get_dataset("cue_index"); @@ -151,8 +151,8 @@ TEST_F(se00Writer, WriteDataTwice) { EXPECT_TRUE(Writer.init_hdf(UsedGroup) == InitResult::OK); EXPECT_TRUE(Writer.reopen(UsedGroup) == InitResult::OK); FileWriter::FlatbufferMessage TestMsg(Buffer.get(), BufferSize); - EXPECT_NO_THROW(Writer.write(TestMsg)); - EXPECT_NO_THROW(Writer.write(TestMsg)); + EXPECT_NO_THROW(Writer.write(TestMsg, false)); + EXPECT_NO_THROW(Writer.write(TestMsg, false)); auto RawValuesDataset = UsedGroup.get_dataset("value"); auto TimestampDataset = UsedGroup.get_dataset("time"); auto CueIndexDataset = UsedGroup.get_dataset("cue_index"); @@ -190,7 +190,7 @@ TEST_F(se00Writer, WriteNoElements) { EXPECT_TRUE(Writer.init_hdf(UsedGroup) == InitResult::OK); EXPECT_TRUE(Writer.reopen(UsedGroup) == InitResult::OK); FileWriter::FlatbufferMessage TestMsg(Buffer.get(), BufferSize); - EXPECT_NO_THROW(Writer.write(TestMsg)); + EXPECT_NO_THROW(Writer.write(TestMsg, false)); auto RawValuesDataset = UsedGroup.get_dataset("value"); auto TimestampDataset = UsedGroup.get_dataset("time"); auto CueIndexDataset = UsedGroup.get_dataset("cue_index"); @@ -209,7 +209,7 @@ TEST_F(se00Writer, WriteDataWithNoTimestampsInFB) { EXPECT_TRUE(Writer.init_hdf(UsedGroup) == InitResult::OK); EXPECT_TRUE(Writer.reopen(UsedGroup) == InitResult::OK); FileWriter::FlatbufferMessage TestMsg(Buffer.get(), BufferSize); - EXPECT_NO_THROW(Writer.write(TestMsg)); + EXPECT_NO_THROW(Writer.write(TestMsg, false)); auto RawValuesDataset = UsedGroup.get_dataset("value"); auto TimestampDataset = UsedGroup.get_dataset("time"); auto CueIndexDataset = UsedGroup.get_dataset("cue_index"); diff --git a/tests/WriterModule/tdct_WriterTests.cpp b/tests/WriterModule/tdct_WriterTests.cpp index a80559b55780b0b25e264905ccbcef103e7e1f67..e8d0e8d4146967190b85ea8bf9ba33faae72ddaf 100644 --- a/tests/WriterModule/tdct_WriterTests.cpp +++ b/tests/WriterModule/tdct_WriterTests.cpp @@ -89,7 +89,7 @@ TEST_F(ChopperTimeStampWriter, WriteDataOnce) { EXPECT_TRUE(Writer.init_hdf(UsedGroup) == InitResult::OK); EXPECT_TRUE(Writer.reopen(UsedGroup) == InitResult::OK); FileWriter::FlatbufferMessage TestMsg(Buffer.get(), BufferSize); - EXPECT_NO_THROW(Writer.write(TestMsg)); + EXPECT_NO_THROW(Writer.write(TestMsg, false)); auto TimestampDataset = UsedGroup.get_dataset("time"); auto CueIndexDataset = UsedGroup.get_dataset("cue_index"); auto CueTimestampZeroDataset = UsedGroup.get_dataset("cue_timestamp_zero"); @@ -119,8 +119,8 @@ TEST_F(ChopperTimeStampWriter, WriteDataTwice) { EXPECT_TRUE(Writer.init_hdf(UsedGroup) == InitResult::OK); EXPECT_TRUE(Writer.reopen(UsedGroup) == InitResult::OK); FileWriter::FlatbufferMessage TestMsg(Buffer.get(), BufferSize); - EXPECT_NO_THROW(Writer.write(TestMsg)); - EXPECT_NO_THROW(Writer.write(TestMsg)); + EXPECT_NO_THROW(Writer.write(TestMsg, false)); + EXPECT_NO_THROW(Writer.write(TestMsg, false)); auto TimestampDataset = UsedGroup.get_dataset("time"); auto CueIndexDataset = UsedGroup.get_dataset("cue_index"); auto CueTimestampZeroDataset = UsedGroup.get_dataset("cue_timestamp_zero"); diff --git a/tests/helpers/StubWriterModule.h b/tests/helpers/StubWriterModule.h index 0fc753363d69358b52eb66efa520f939fd892ab9..d75dd844d2dfc5733868b0c68b9cfce26c316d06 100644 --- a/tests/helpers/StubWriterModule.h +++ b/tests/helpers/StubWriterModule.h @@ -22,5 +22,8 @@ public: InitResult reopen(hdf5::node::Group & /*HDFGroup*/) override { return InitResult::OK; } - void writeImpl(FileWriter::FlatbufferMessage const & /*Message*/) override {} + bool writeImpl([[maybe_unused]] FileWriter::FlatbufferMessage const &message, + [[maybe_unused]] bool is_buffered_message) override { + return true; + } };