// 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 "cryptohome/storage/encrypted_container/loopback_device.h"

#include <memory>

#include <base/files/file_path.h>
#include <base/values.h>
#include <brillo/blkdev_utils/loop_device_fake.h>
#include <gtest/gtest.h>

#include "cryptohome/mock_platform.h"
#include "cryptohome/storage/encrypted_container/backing_device.h"

namespace cryptohome {

class LoopbackDeviceTest : public ::testing::Test {
 public:
  LoopbackDeviceTest()
      : config_(
            {.type = BackingDeviceType::kLoopbackDevice,
             .name = "foo",
             .size = 1024 * 1024 * 1024,
             .loopback = {.backing_file_path = base::FilePath("/a.block")}}),
        backing_device_(std::make_unique<LoopbackDevice>(
            config_,
            &platform_,
            std::make_unique<brillo::fake::FakeLoopDeviceManager>())) {}
  ~LoopbackDeviceTest() override = default;

 protected:
  BackingDeviceConfig config_;
  MockPlatform platform_;
  std::unique_ptr<LoopbackDevice> backing_device_;
};

// Tests the successful creation of the loop device's backing sparse file.
TEST_F(LoopbackDeviceTest, LoopbackDeviceCreate) {
  EXPECT_TRUE(backing_device_->Create());

  // Check that the sparse file was created with the correct mode.
  EXPECT_TRUE(platform_.FileExists(config_.loopback.backing_file_path));
  mode_t mode;
  ASSERT_TRUE(
      platform_.GetPermissions(config_.loopback.backing_file_path, &mode));
  EXPECT_EQ(mode, S_IRUSR | S_IWUSR);
}

// Tests purge of the backing sparse file.
TEST_F(LoopbackDeviceTest, LoopbackPurge) {
  EXPECT_TRUE(platform_.WriteFile(config_.loopback.backing_file_path,
                                  brillo::Blob(32, 0)));
  EXPECT_TRUE(backing_device_->Purge());
  EXPECT_FALSE(platform_.FileExists(config_.loopback.backing_file_path));
}

// Tests setup for a loopback device succeeded.
TEST_F(LoopbackDeviceTest, LoopbackSetup) {
  EXPECT_TRUE(backing_device_->Setup());

  EXPECT_NE(backing_device_->GetPath(), base::nullopt);
  EXPECT_TRUE(backing_device_->Teardown());
}

// Tests teardown of a loopback device doesn't leave the loop device attached.
TEST_F(LoopbackDeviceTest, ValidLoopbackDeviceTeardown) {
  EXPECT_TRUE(backing_device_->Setup());
  EXPECT_TRUE(backing_device_->Teardown());

  EXPECT_EQ(backing_device_->GetPath(), base::nullopt);
}

}  // namespace cryptohome
