// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "croslog/viewer_plaintext.h"

#include <gtest/gtest.h>

#include "croslog/cursor_util.h"

namespace croslog {

class ViewerPlaintextTest : public ::testing::Test {
 public:
  ViewerPlaintextTest() = default;

  static std::vector<BootRecords::BootEntry> GenerateBootLog(base::Time now) {
    std::vector<BootRecords::BootEntry> boot_entries;
    boot_entries.emplace_back(now + base::TimeDelta::FromSeconds(0),
                              "46640bbceeb149a696171d1ea34516ad");
    boot_entries.emplace_back(now + base::TimeDelta::FromSeconds(2),
                              "9fa644cb05dc4e3ebe3be322ac8d1e86");
    return boot_entries;
  }

  static LogEntry GenerateLogEntry(base::Time time) {
    return LogEntry{time, Severity::ERROR, "TAG",
                    1234, "MESSAGE",       "ENTIRE STRING"};
  }

 private:
  DISALLOW_COPY_AND_ASSIGN(ViewerPlaintextTest);
};

TEST_F(ViewerPlaintextTest, ShouldFilterOutEntry) {
  {
    Config c;
    LogEntry e{base::Time::Now(), Severity::ERROR, "TAG", 1234,
               "MESSAGE",         "ENTIRE STRING"};

    ViewerPlaintext v(c);
    EXPECT_FALSE(v.ShouldFilterOutEntry(e));
  }

  {
    Config c;
    c.identifier = "TAG1";
    LogEntry e1{base::Time::Now(), Severity::ERROR, "TAG1", 1234,
                "MESSAGE",         "ENTIRE STRING"};
    LogEntry e2{base::Time::Now(), Severity::ERROR, "TAG2", 1234,
                "MESSAGE",         "ENTIRE STRING"};

    ViewerPlaintext v(c);
    EXPECT_FALSE(v.ShouldFilterOutEntry(e1));
    EXPECT_TRUE(v.ShouldFilterOutEntry(e2));
  }

  {
    Config c;
    c.severity = Severity::ERROR;
    LogEntry e1{base::Time::Now(), Severity::WARNING, "TAG", 1234,
                "MESSAGE",         "ENTIRE STRING"};
    LogEntry e2{base::Time::Now(), Severity::ERROR, "TAG", 1234,
                "MESSAGE",         "ENTIRE STRING"};
    LogEntry e3{base::Time::Now(), Severity::CRIT, "TAG", 1234,
                "MESSAGE",         "ENTIRE STRING"};

    ViewerPlaintext v(c);
    EXPECT_TRUE(v.ShouldFilterOutEntry(e1));
    EXPECT_FALSE(v.ShouldFilterOutEntry(e2));
    EXPECT_FALSE(v.ShouldFilterOutEntry(e3));
  }

  {
    Config c;
    c.grep = "M.....E";
    LogEntry e1{base::Time::Now(), Severity::ERROR, "TAG", 1234,
                "MESSAGE",         "ENTIRE STRING"};
    LogEntry e2{base::Time::Now(), Severity::ERROR, "TAG", 1234,
                "xxMESSAGE",       "ENTIRE STRING"};
    LogEntry e3{base::Time::Now(), Severity::ERROR, "TAG", 1234,
                "MESSAGExx",       "ENTIRE STRING"};
    LogEntry e4{base::Time::Now(), Severity::ERROR, "TAG", 1234,
                "xxMESSAGExx",     "ENTIRE STRING"};
    LogEntry e5{base::Time::Now(), Severity::ERROR, "TAG", 1234,
                "message",         "ENTIRE STRING"};

    ViewerPlaintext v(c);
    EXPECT_FALSE(v.ShouldFilterOutEntry(e1));
    EXPECT_FALSE(v.ShouldFilterOutEntry(e2));
    EXPECT_FALSE(v.ShouldFilterOutEntry(e3));
    EXPECT_FALSE(v.ShouldFilterOutEntry(e4));
    EXPECT_TRUE(v.ShouldFilterOutEntry(e5));
  }
}

TEST_F(ViewerPlaintextTest, ShouldFilterOutEntryWithBootId) {
  base::Time now = base::Time::Now();

  // First boot.
  {
    Config c;
    c.boot = "46640bbceeb149a696171d1ea34516ad";

    LogEntry e1 = GenerateLogEntry(now - base::TimeDelta::FromSeconds(2));
    LogEntry e2 = GenerateLogEntry(now + base::TimeDelta::FromSeconds(0));
    LogEntry e3 = GenerateLogEntry(now + base::TimeDelta::FromSeconds(2));

    ViewerPlaintext v(c, BootRecords(GenerateBootLog(now)));
    EXPECT_TRUE(v.ShouldFilterOutEntry(e1));
    EXPECT_FALSE(v.ShouldFilterOutEntry(e2));
    EXPECT_TRUE(v.ShouldFilterOutEntry(e3));
  }

  // Second (last) boot.
  {
    Config c;
    c.boot = "9fa644cb05dc4e3ebe3be322ac8d1e86";

    LogEntry e1 = GenerateLogEntry(now + base::TimeDelta::FromSeconds(0));
    LogEntry e2 = GenerateLogEntry(now + base::TimeDelta::FromSeconds(2));
    LogEntry e3 = GenerateLogEntry(now + base::TimeDelta::FromSeconds(4));

    ViewerPlaintext v(c, BootRecords(GenerateBootLog(now)));
    EXPECT_TRUE(v.ShouldFilterOutEntry(e1));
    EXPECT_FALSE(v.ShouldFilterOutEntry(e2));
    EXPECT_FALSE(v.ShouldFilterOutEntry(e3));
  }

  // Last (second) boot.
  {
    Config c;
    c.boot = "";

    LogEntry e1 = GenerateLogEntry(now + base::TimeDelta::FromSeconds(0));
    LogEntry e2 = GenerateLogEntry(now + base::TimeDelta::FromSeconds(2));
    LogEntry e3 = GenerateLogEntry(now + base::TimeDelta::FromSeconds(4));

    ViewerPlaintext v(c, BootRecords(GenerateBootLog(now)));
    EXPECT_TRUE(v.ShouldFilterOutEntry(e1));
    EXPECT_FALSE(v.ShouldFilterOutEntry(e2));
    EXPECT_FALSE(v.ShouldFilterOutEntry(e3));
  }

  // Last (second) boot.
  {
    Config c;
    c.boot = "0";

    LogEntry e1 = GenerateLogEntry(now + base::TimeDelta::FromSeconds(0));
    LogEntry e2 = GenerateLogEntry(now + base::TimeDelta::FromSeconds(2));
    LogEntry e3 = GenerateLogEntry(now + base::TimeDelta::FromSeconds(4));

    ViewerPlaintext v(c, BootRecords(GenerateBootLog(now)));
    EXPECT_TRUE(v.ShouldFilterOutEntry(e1));
    EXPECT_FALSE(v.ShouldFilterOutEntry(e2));
    EXPECT_FALSE(v.ShouldFilterOutEntry(e3));
  }

  // Invalid boot.
  {
    Config c;
    c.boot = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

    LogEntry e1 = GenerateLogEntry(now + base::TimeDelta::FromSeconds(0));
    LogEntry e2 = GenerateLogEntry(now + base::TimeDelta::FromSeconds(2));

    ViewerPlaintext v(c, BootRecords(GenerateBootLog(now)));
    EXPECT_TRUE(v.ShouldFilterOutEntry(e1));
    EXPECT_TRUE(v.ShouldFilterOutEntry(e2));
  }
}

TEST_F(ViewerPlaintextTest, ShouldFilterOutEntryWithCursor) {
  base::Time now = base::Time::Now();

  {
    Config c;
    c.cursor = GenerateCursor(now);

    LogEntry e1 = GenerateLogEntry(now - base::TimeDelta::FromSeconds(2));
    LogEntry e2 = GenerateLogEntry(now + base::TimeDelta::FromSeconds(0));
    LogEntry e3 = GenerateLogEntry(now + base::TimeDelta::FromSeconds(2));

    ViewerPlaintext v(c);
    EXPECT_TRUE(v.ShouldFilterOutEntry(e1));
    EXPECT_FALSE(v.ShouldFilterOutEntry(e2));
    EXPECT_FALSE(v.ShouldFilterOutEntry(e3));
  }

  {
    Config c;
    c.after_cursor = GenerateCursor(now);

    LogEntry e1 = GenerateLogEntry(now - base::TimeDelta::FromSeconds(2));
    LogEntry e2 = GenerateLogEntry(now + base::TimeDelta::FromSeconds(0));
    LogEntry e3 = GenerateLogEntry(now + base::TimeDelta::FromSeconds(2));

    ViewerPlaintext v(c);
    EXPECT_TRUE(v.ShouldFilterOutEntry(e1));
    EXPECT_TRUE(v.ShouldFilterOutEntry(e2));
    EXPECT_FALSE(v.ShouldFilterOutEntry(e3));
  }
}

TEST_F(ViewerPlaintextTest, GetBootIdAt) {
  base::Time now = base::Time::Now();

  {
    Config c;
    ViewerPlaintext v(c, BootRecords(GenerateBootLog(now)));

    // Found no corresponding boot (before the 1st boot).
    EXPECT_TRUE(v.GetBootIdAt(now - base::TimeDelta::FromSeconds(100)).empty());

    // Found the 1st boot.
    EXPECT_EQ("46640bbceeb149a696171d1ea34516ad", v.GetBootIdAt(now));
    EXPECT_EQ("46640bbceeb149a696171d1ea34516ad",
              v.GetBootIdAt(now + base::TimeDelta::FromSeconds(1)));

    // Found the 2nd (current) boot.
    EXPECT_EQ("9fa644cb05dc4e3ebe3be322ac8d1e86",
              v.GetBootIdAt(now + base::TimeDelta::FromSeconds(2)));
    EXPECT_EQ("9fa644cb05dc4e3ebe3be322ac8d1e86",
              v.GetBootIdAt(now + base::TimeDelta::FromSeconds(3)));
    EXPECT_EQ("9fa644cb05dc4e3ebe3be322ac8d1e86",
              v.GetBootIdAt(now + base::TimeDelta::FromSeconds(100)));
  }

  {
    Config c;
    ViewerPlaintext v(c, BootRecords(GenerateBootLog(now)));

    // Found the 2nd (current) boot.
    EXPECT_EQ("9fa644cb05dc4e3ebe3be322ac8d1e86",
              v.GetBootIdAt(now + base::TimeDelta::FromSeconds(100)));
    EXPECT_EQ("9fa644cb05dc4e3ebe3be322ac8d1e86",
              v.GetBootIdAt(now + base::TimeDelta::FromSeconds(2)));

    // Found the 1st boot.
    EXPECT_EQ("46640bbceeb149a696171d1ea34516ad",
              v.GetBootIdAt(now + base::TimeDelta::FromSeconds(1)));
    EXPECT_EQ("46640bbceeb149a696171d1ea34516ad", v.GetBootIdAt(now));

    // Found no corresponding boot (before the 1st boot).
    EXPECT_TRUE(v.GetBootIdAt(now - base::TimeDelta::FromSeconds(100)).empty());
  }
}

}  // namespace croslog
