| // Copyright 2020 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "croslog/multiplexer.h" |
| |
| #include <base/files/file_path.h> |
| #include <gtest/gtest.h> |
| |
| #include "croslog/log_entry_reader.h" |
| #include "croslog/log_parser_syslog.h" |
| |
| namespace croslog { |
| |
| class LogEntryReaderTest : public ::testing::Test { |
| public: |
| LogEntryReaderTest() = default; |
| LogEntryReaderTest(const LogEntryReaderTest&) = delete; |
| LogEntryReaderTest& operator=(const LogEntryReaderTest&) = delete; |
| }; |
| |
| TEST_F(LogEntryReaderTest, GetNextEntry) { |
| LogEntryReader reader(base::FilePath("./testdata/TEST_MULTILINE_LOG"), |
| std::make_unique<LogParserSyslog>(), false); |
| |
| { |
| MaybeLogEntry e = reader.GetNextEntry(); |
| EXPECT_TRUE(e.has_value()); |
| EXPECT_EQ(1, e->pid()); |
| EXPECT_EQ("aaa\nbbb\nccc", e->message()); |
| } |
| |
| { |
| MaybeLogEntry e = reader.GetNextEntry(); |
| EXPECT_TRUE(e.has_value()); |
| EXPECT_EQ(2, e->pid()); |
| EXPECT_EQ("aaa\n\nccc\n", e->message()); |
| } |
| |
| { |
| MaybeLogEntry e = reader.GetNextEntry(); |
| EXPECT_TRUE(e.has_value()); |
| EXPECT_EQ(3, e->pid()); |
| EXPECT_EQ("\nbbb\nccc", e->message()); |
| } |
| |
| EXPECT_FALSE(reader.GetNextEntry().has_value()); |
| } |
| |
| TEST_F(LogEntryReaderTest, GetPreviousEntry) { |
| LogEntryReader reader(base::FilePath("./testdata/TEST_MULTILINE_LOG"), |
| std::make_unique<LogParserSyslog>(), false); |
| reader.SetPositionLast(); |
| |
| { |
| MaybeLogEntry e = reader.GetPreviousEntry(); |
| EXPECT_TRUE(e.has_value()); |
| EXPECT_EQ(3, e->pid()); |
| EXPECT_EQ("\nbbb\nccc", e->message()); |
| } |
| |
| { |
| MaybeLogEntry e = reader.GetPreviousEntry(); |
| EXPECT_TRUE(e.has_value()); |
| EXPECT_EQ(2, e->pid()); |
| EXPECT_EQ("aaa\n\nccc\n", e->message()); |
| } |
| |
| { |
| MaybeLogEntry e = reader.GetPreviousEntry(); |
| EXPECT_TRUE(e.has_value()); |
| EXPECT_EQ(1, e->pid()); |
| EXPECT_EQ("aaa\nbbb\nccc", e->message()); |
| } |
| |
| EXPECT_FALSE(reader.GetPreviousEntry().has_value()); |
| } |
| |
| TEST_F(LogEntryReaderTest, InterleaveGetNextEntryAndGetPreviousEntry) { |
| LogEntryReader reader(base::FilePath("./testdata/TEST_MULTILINE_LOG"), |
| std::make_unique<LogParserSyslog>(), false); |
| reader.SetPositionLast(); |
| |
| { |
| MaybeLogEntry e = reader.GetPreviousEntry(); |
| EXPECT_TRUE(e.has_value()); |
| EXPECT_EQ(3, e->pid()); |
| } |
| |
| { |
| MaybeLogEntry e = reader.GetNextEntry(); |
| EXPECT_TRUE(e.has_value()); |
| EXPECT_EQ(3, e->pid()); |
| } |
| |
| EXPECT_FALSE(reader.GetNextEntry().has_value()); |
| |
| { |
| MaybeLogEntry e = reader.GetPreviousEntry(); |
| EXPECT_TRUE(e.has_value()); |
| EXPECT_EQ(3, e->pid()); |
| } |
| |
| { |
| MaybeLogEntry e = reader.GetNextEntry(); |
| EXPECT_TRUE(e.has_value()); |
| EXPECT_EQ(3, e->pid()); |
| } |
| |
| EXPECT_FALSE(reader.GetNextEntry().has_value()); |
| } |
| |
| } // namespace croslog |