blob: 5e9ead0135d33c9a65b5f7e29cc788649fa27671 [file] [log] [blame]
// Copyright 2021 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 <memory>
#include <utility>
#include <base/files/file_util.h>
#include <base/files/scoped_temp_dir.h>
#include <brillo/namespaces/mock_platform.h>
#include <gtest/gtest.h>
#include "minios/logger.h"
#include "minios/mock_disk_util.h"
using ::testing::_;
using ::testing::DoAll;
using ::testing::Return;
using ::testing::SetArgPointee;
using ::testing::StrictMock;
namespace minios {
class LoggerTest : public ::testing::Test {
public:
void SetUp() override {
ASSERT_TRUE(root_path_.CreateUniqueTempDir());
auto mock_disk_util = std::make_unique<StrictMock<MockDiskUtil>>();
mock_disk_util_ptr_ = mock_disk_util.get();
auto mock_platform = std::make_unique<StrictMock<brillo::MockPlatform>>();
mock_platform_ptr_ = mock_platform.get();
logger_ = std::make_unique<Logger>(std::move(mock_disk_util),
std::move(mock_platform),
root_path_.GetPath());
}
protected:
base::ScopedTempDir root_path_;
MockDiskUtil* mock_disk_util_ptr_;
brillo::MockPlatform* mock_platform_ptr_;
std::unique_ptr<Logger> logger_;
};
TEST_F(LoggerTest, DumpLogsIntoStatefulNoDriveExists) {
EXPECT_CALL(*mock_disk_util_ptr_, GetFixedDrive())
.WillOnce(Return(base::FilePath()));
EXPECT_FALSE(logger_->DumpLogsIntoStateful());
}
TEST_F(LoggerTest, DumpLogsIntoStatefulNoStatefulExists) {
base::ScopedTempDir tmp_dir;
ASSERT_TRUE(tmp_dir.CreateUniqueTempDir());
const base::FilePath drive = tmp_dir.GetPath();
EXPECT_CALL(*mock_disk_util_ptr_, GetFixedDrive()).WillOnce(Return(drive));
EXPECT_CALL(*mock_disk_util_ptr_, GetStatefulPartition(_))
.WillOnce(Return(base::FilePath()));
EXPECT_FALSE(logger_->DumpLogsIntoStateful());
}
TEST_F(LoggerTest, DumpLogIntoStatefulMountFailure) {
base::ScopedTempDir tmp_dir;
ASSERT_TRUE(tmp_dir.CreateUniqueTempDir());
const base::FilePath drive = tmp_dir.GetPath();
EXPECT_CALL(*mock_disk_util_ptr_, GetFixedDrive()).WillOnce(Return(drive));
EXPECT_CALL(*mock_disk_util_ptr_, GetStatefulPartition(_))
.WillOnce(Return(drive));
EXPECT_CALL(*mock_platform_ptr_, Mount(_, _, _, _, _)).WillOnce(Return(-1));
EXPECT_FALSE(logger_->DumpLogsIntoStateful());
}
TEST_F(LoggerTest, DumpLogIntoStatefulUnmountFailureIsSuccess) {
base::ScopedTempDir tmp_dir;
ASSERT_TRUE(tmp_dir.CreateUniqueTempDir());
const base::FilePath drive = tmp_dir.GetPath();
EXPECT_CALL(*mock_disk_util_ptr_, GetFixedDrive()).WillOnce(Return(drive));
EXPECT_CALL(*mock_disk_util_ptr_, GetStatefulPartition(_))
.WillOnce(Return(drive));
EXPECT_CALL(*mock_platform_ptr_, Mount(_, _, _, _, _)).WillOnce(Return(0));
EXPECT_CALL(*mock_platform_ptr_, Unmount(_, _, _)).WillOnce(Return(false));
// Failing to unmount is still successful.
EXPECT_TRUE(logger_->DumpLogsIntoStateful());
}
TEST_F(LoggerTest, DumpLogIntoStatefulSuccess) {
base::ScopedTempDir tmp_dir;
ASSERT_TRUE(tmp_dir.CreateUniqueTempDir());
const base::FilePath drive = tmp_dir.GetPath();
// Create sample log files.
const base::FilePath kLogName("some-log-file");
ASSERT_TRUE(
base::WriteFile(root_path_.GetPath().Append(kLogName), "some-logging"));
EXPECT_CALL(*mock_disk_util_ptr_, GetFixedDrive()).WillOnce(Return(drive));
EXPECT_CALL(*mock_disk_util_ptr_, GetStatefulPartition(_))
.WillOnce(Return(drive));
EXPECT_CALL(*mock_platform_ptr_, Mount(_, _, _, _, _)).WillOnce(Return(0));
EXPECT_CALL(*mock_platform_ptr_, Unmount(_, _, _)).WillOnce(Return(true));
EXPECT_TRUE(logger_->DumpLogsIntoStateful());
// Check that logs are copied.
EXPECT_TRUE(
base::PathExists(logger_->GetMountPath().Append(kMiniOSLogsDirectory)));
EXPECT_TRUE(base::PathExists(logger_->GetMountPath()
.Append(kMiniOSLogsDirectory)
.Append(root_path_.GetPath().BaseName())
.Append(kLogName)));
}
} // namespace minios