blob: f8323b436b8bbd6c68c6f675a3fc604ab1f80926 [file] [log] [blame]
// 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/fscrypt_container.h"
#include <memory>
#include <base/files/file_path.h>
#include <brillo/secure_blob.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "cryptohome/mock_platform.h"
#include "cryptohome/storage/encrypted_container/filesystem_key.h"
using ::testing::_;
using ::testing::Return;
namespace cryptohome {
class FscryptContainerTest : public ::testing::Test {
public:
FscryptContainerTest()
: backing_dir_(base::FilePath("/a/b/c")),
key_reference_({.fek_sig = brillo::SecureBlob("random_keysig")}),
key_({.fek = brillo::SecureBlob("random key")}),
container_(
EncryptedContainer::Generate(EncryptedContainerType::kFscrypt,
backing_dir_,
key_reference_,
&platform_)) {}
~FscryptContainerTest() override = default;
protected:
base::FilePath backing_dir_;
FileSystemKeyReference key_reference_;
FileSystemKey key_;
MockPlatform platform_;
std::unique_ptr<EncryptedContainer> container_;
};
// Tests the create path for fscrypt containers.
TEST_F(FscryptContainerTest, SetupCreateCheck) {
EXPECT_CALL(platform_, AddDirCryptoKeyToKeyring(_, _)).WillOnce(Return(true));
EXPECT_CALL(platform_, SetDirCryptoKey(backing_dir_, _))
.WillOnce(Return(true));
EXPECT_TRUE(container_->Setup(key_, true));
EXPECT_TRUE(platform_.DirectoryExists(backing_dir_));
}
// Tests the setup path for an existing fscrypt container.
TEST_F(FscryptContainerTest, SetupNoCreateCheck) {
EXPECT_CALL(platform_, AddDirCryptoKeyToKeyring(_, _)).WillOnce(Return(true));
EXPECT_CALL(platform_, SetDirCryptoKey(backing_dir_, _))
.WillOnce(Return(true));
EXPECT_TRUE(container_->Setup(key_, false));
}
// Tests failure path when adding the encryption key to the kernel/filesystem
// keyring fails.
TEST_F(FscryptContainerTest, SetupFailedEncryptionKeyAdd) {
EXPECT_CALL(platform_, AddDirCryptoKeyToKeyring(_, _))
.WillOnce(Return(false));
EXPECT_FALSE(container_->Setup(key_, false));
}
// Tests failure path when setting the encryption policy for the backing
// directory fails.
TEST_F(FscryptContainerTest, SetupFailedEncryptionKeySet) {
EXPECT_CALL(platform_, AddDirCryptoKeyToKeyring(_, _)).WillOnce(Return(true));
EXPECT_CALL(platform_, SetDirCryptoKey(backing_dir_, _))
.WillOnce(Return(false));
EXPECT_FALSE(container_->Setup(key_, false));
}
// Tests failure path on failing to invalidate an added key from the
// kernel/filesystem keyring.
TEST_F(FscryptContainerTest, TeardownInvalidateKey) {
EXPECT_CALL(platform_, InvalidateDirCryptoKey(_, _)).WillOnce(Return(false));
EXPECT_FALSE(container_->Teardown());
}
} // namespace cryptohome