// 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 <base/files/file_path.h>
#include <base/files/file_util.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>

#include "installer/slow_boot_notify.h"

class SlowBootNotifyTest : public ::testing::Test {};

TEST(SlowBootNotifyTest, BothFspmNotPresentTest) {
  base::FilePath fspm_main;
  base::FilePath fspm_next;

  ASSERT_FALSE(SlowBootNotifyRequired(fspm_main, fspm_next));
}

TEST(SlowBootNotifyTest, PreFwFspmNotPresentTest) {
  base::FilePath fspm_main;
  base::FilePath fspm_next;

  EXPECT_TRUE(CreateTemporaryFile(&fspm_next));
  EXPECT_EQ(WriteFile(fspm_next, "next", 4), 4);
  ASSERT_FALSE(SlowBootNotifyRequired(fspm_main, fspm_next));
}

TEST(SlowBootNotifyTest, PostFwFspmNotPresentTest) {
  base::FilePath fspm_main;
  base::FilePath fspm_next;

  EXPECT_TRUE(CreateTemporaryFile(&fspm_main));
  EXPECT_EQ(WriteFile(fspm_main, "main", 4), 4);
  ASSERT_FALSE(SlowBootNotifyRequired(fspm_main, fspm_next));
}

TEST(SlowBootNotifyTest, FspmDiffTest) {
  base::FilePath fspm_main;
  base::FilePath fspm_next;

  EXPECT_TRUE(CreateTemporaryFile(&fspm_main));
  EXPECT_EQ(WriteFile(fspm_main, "main", 4), 4);
  EXPECT_TRUE(CreateTemporaryFile(&fspm_next));
  EXPECT_EQ(WriteFile(fspm_next, "next", 4), 4);
  ASSERT_TRUE(SlowBootNotifyRequired(fspm_main, fspm_next));
}

TEST(SlowBootNotifyTest, FspmIdenticalTest) {
  base::FilePath fspm_main;
  base::FilePath fspm_next;

  EXPECT_TRUE(CreateTemporaryFile(&fspm_main));
  EXPECT_EQ(WriteFile(fspm_main, "fspm", 4), 4);
  EXPECT_TRUE(CreateTemporaryFile(&fspm_next));
  EXPECT_EQ(WriteFile(fspm_next, "fspm", 4), 4);
  ASSERT_FALSE(SlowBootNotifyRequired(fspm_main, fspm_next));
}

TEST(SlowBootNotifyTest, FspmEmptyTest) {
  base::FilePath fspm_main;
  base::FilePath fspm_next;

  EXPECT_TRUE(CreateTemporaryFile(&fspm_main));
  EXPECT_TRUE(CreateTemporaryFile(&fspm_next));
  ASSERT_FALSE(SlowBootNotifyRequired(fspm_main, fspm_next));
}
