Test MessageReader too

Another basic test to make sure MessageReader works as expected.  None
of the data is all that official, but it is good enough to make sure the
pipes work.

Change-Id: Icbab9a62389acdf079aea916c2b8c83733e8d079
diff --git a/aos/events/logging/logfile_utils_test.cc b/aos/events/logging/logfile_utils_test.cc
index fec3186..f6412c3 100644
--- a/aos/events/logging/logfile_utils_test.cc
+++ b/aos/events/logging/logfile_utils_test.cc
@@ -1,15 +1,20 @@
 #include "aos/events/logging/logfile_utils.h"
 
-#include "gtest/gtest.h"
+#include <chrono>
+#include <string>
 
 #include "aos/events/logging/test_message_generated.h"
+#include "aos/flatbuffers.h"
 #include "aos/json_to_flatbuffer.h"
 #include "aos/testing/tmpdir.h"
+#include "gtest/gtest.h"
 
 namespace aos {
 namespace logger {
 namespace testing {
+namespace chrono = std::chrono;
 
+// Creates a size prefixed flatbuffer from json.
 template <typename T>
 SizePrefixedFlatbufferDetachedBuffer<T> JsonToSizedFlatbuffer(
     const std::string_view data) {
@@ -19,6 +24,7 @@
   return fbb.Release();
 }
 
+// Tests that we can write and read 2 flatbuffers to file.
 TEST(SpanReaderTest, ReadWrite) {
   const std::string logfile = aos::testing::TestTmpDir() + "/log.bfbs";
   unlink(logfile.c_str());
@@ -44,6 +50,46 @@
   EXPECT_EQ(reader.ReadMessage(), absl::Span<const uint8_t>());
 }
 
+// Tests that we can actually parse the resulting messages at a basic level
+// through MessageReader.
+TEST(MessageReaderTest, ReadWrite) {
+  const std::string logfile = aos::testing::TestTmpDir() + "/log.bfbs";
+  unlink(logfile.c_str());
+
+  const aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader> config =
+      JsonToSizedFlatbuffer<LogFileHeader>(
+          R"({ "max_out_of_order_duration": 100000000 })");
+  const aos::SizePrefixedFlatbufferDetachedBuffer<MessageHeader> m1 =
+      JsonToSizedFlatbuffer<MessageHeader>(
+          R"({ "channel_index": 0, "monotonic_sent_time": 1 })");
+  const aos::SizePrefixedFlatbufferDetachedBuffer<MessageHeader> m2 =
+      JsonToSizedFlatbuffer<MessageHeader>(
+          R"({ "channel_index": 0, "monotonic_sent_time": 2 })");
+
+  {
+    DetachedBufferWriter writer(logfile, std::make_unique<DummyEncoder>());
+    writer.QueueSpan(config.full_span());
+    writer.QueueSpan(m1.full_span());
+    writer.QueueSpan(m2.full_span());
+  }
+
+  MessageReader reader(logfile);
+
+  EXPECT_EQ(reader.filename(), logfile);
+
+  EXPECT_EQ(
+      reader.max_out_of_order_duration(),
+      std::chrono::nanoseconds(config.message().max_out_of_order_duration()));
+  EXPECT_EQ(reader.newest_timestamp(), monotonic_clock::min_time);
+  EXPECT_TRUE(reader.ReadMessage());
+  EXPECT_EQ(reader.newest_timestamp(),
+            monotonic_clock::time_point(chrono::nanoseconds(1)));
+  EXPECT_TRUE(reader.ReadMessage());
+  EXPECT_EQ(reader.newest_timestamp(),
+            monotonic_clock::time_point(chrono::nanoseconds(2)));
+  EXPECT_FALSE(reader.ReadMessage());
+}
+
 }  // namespace testing
 }  // namespace logger
 }  // namespace aos