| Index: components/os_crypt/os_crypt_util_linux_unittest.cc
|
| diff --git a/components/os_crypt/os_crypt_util_linux_unittest.cc b/components/os_crypt/os_crypt_util_linux_unittest.cc
|
| deleted file mode 100644
|
| index ba9e3aae23a7fd2addd2954a56261f90f9811d44..0000000000000000000000000000000000000000
|
| --- a/components/os_crypt/os_crypt_util_linux_unittest.cc
|
| +++ /dev/null
|
| @@ -1,243 +0,0 @@
|
| -// Copyright 2016 The Chromium 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 <string>
|
| -
|
| -#include "base/macros.h"
|
| -#include "components/os_crypt/key_storage_libsecret.h"
|
| -#include "components/os_crypt/libsecret_util_linux.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace {
|
| -
|
| -// Mock functions use MockSecretValue, where SecretValue would appear, and are
|
| -// cast to the correct signature. We can reduce SecretValue to an std::string,
|
| -// because we don't use anything else from it.
|
| -using MockSecretValue = std::string;
|
| -
|
| -const SecretSchema kKeystoreSchemaV1 = {
|
| - "chrome_libsecret_os_crypt_password",
|
| - SECRET_SCHEMA_NONE,
|
| - {
|
| - {nullptr, SECRET_SCHEMA_ATTRIBUTE_STRING},
|
| - }};
|
| -
|
| -const SecretSchema kKeystoreSchemaV2 = {
|
| - "chrome_libsecret_os_crypt_password_v2",
|
| - SECRET_SCHEMA_DONT_MATCH_NAME,
|
| - {
|
| - {"application", SECRET_SCHEMA_ATTRIBUTE_STRING},
|
| - {nullptr, SECRET_SCHEMA_ATTRIBUTE_STRING},
|
| - }};
|
| -
|
| -// Replaces some of LibsecretLoader's methods with mocked ones.
|
| -class MockLibsecretLoader : public LibsecretLoader {
|
| - public:
|
| - // Sets up the minimum mock implementation necessary for OSCrypt to work
|
| - // with Libsecret. Also resets the state to mock a clean database.
|
| - static bool ResetForOSCrypt();
|
| -
|
| - // Sets OSCrypt's password in the libsecret mock to a specific value
|
| - static void SetOSCryptPassword(const char*);
|
| -
|
| - // Releases memory and restores LibsecretLoader to an uninitialized state.
|
| - static void TearDown();
|
| -
|
| - // Set whether there is an old password that needs to be migrated from the
|
| - // deprecated schema. Null means no such password. See crbug.com/639298
|
| - static void SetDeprecatedOSCryptPassword(const char* value);
|
| -
|
| - private:
|
| - // These methods are used to redirect calls through LibsecretLoader
|
| - static const gchar* mock_secret_value_get_text(MockSecretValue* value);
|
| -
|
| - static gboolean mock_secret_password_store_sync(const SecretSchema* schema,
|
| - const gchar* collection,
|
| - const gchar* label,
|
| - const gchar* password,
|
| - GCancellable* cancellable,
|
| - GError** error,
|
| - ...);
|
| -
|
| - static MockSecretValue* mock_secret_service_lookup_sync(
|
| - SecretService* service,
|
| - const SecretSchema* schema,
|
| - GHashTable* attributes,
|
| - GCancellable* cancellable,
|
| - GError** error);
|
| -
|
| - static void mock_secret_value_unref(gpointer value);
|
| -
|
| - static GList* mock_secret_service_search_sync(SecretService* service,
|
| - const SecretSchema* schema,
|
| - GHashTable* attributes,
|
| - SecretSearchFlags flags,
|
| - GCancellable* cancellable,
|
| - GError** error);
|
| -
|
| - static gboolean mock_secret_password_clear_sync(const SecretSchema* schema,
|
| - GCancellable* cancellable,
|
| - GError** error,
|
| - ...);
|
| -
|
| - // MockLibsecretLoader owns these objects.
|
| - static MockSecretValue* stored_password_mock_ptr_;
|
| - static MockSecretValue* deprecated_password_mock_ptr_;
|
| -};
|
| -
|
| -MockSecretValue* MockLibsecretLoader::stored_password_mock_ptr_ = nullptr;
|
| -MockSecretValue* MockLibsecretLoader::deprecated_password_mock_ptr_ = nullptr;
|
| -
|
| -const gchar* MockLibsecretLoader::mock_secret_value_get_text(
|
| - MockSecretValue* value) {
|
| - return value->c_str();
|
| -}
|
| -
|
| -// static
|
| -gboolean MockLibsecretLoader::mock_secret_password_store_sync(
|
| - const SecretSchema* schema,
|
| - const gchar* collection,
|
| - const gchar* label,
|
| - const gchar* password,
|
| - GCancellable* cancellable,
|
| - GError** error,
|
| - ...) {
|
| - EXPECT_STREQ(kKeystoreSchemaV2.name, schema->name);
|
| - delete stored_password_mock_ptr_;
|
| - stored_password_mock_ptr_ = new MockSecretValue(password);
|
| - return true;
|
| -}
|
| -
|
| -// static
|
| -MockSecretValue* MockLibsecretLoader::mock_secret_service_lookup_sync(
|
| - SecretService* service,
|
| - const SecretSchema* schema,
|
| - GHashTable* attributes,
|
| - GCancellable* cancellable,
|
| - GError** error) {
|
| - bool is_known_schema = strcmp(schema->name, kKeystoreSchemaV2.name) == 0 ||
|
| - strcmp(schema->name, kKeystoreSchemaV1.name) == 0;
|
| - EXPECT_TRUE(is_known_schema);
|
| -
|
| - if (strcmp(schema->name, kKeystoreSchemaV2.name) == 0)
|
| - return stored_password_mock_ptr_;
|
| - else if (strcmp(schema->name, kKeystoreSchemaV1.name) == 0)
|
| - return deprecated_password_mock_ptr_;
|
| -
|
| - NOTREACHED();
|
| - return nullptr;
|
| -}
|
| -
|
| -// static
|
| -void MockLibsecretLoader::mock_secret_value_unref(gpointer value) {}
|
| -
|
| -// static
|
| -GList* MockLibsecretLoader::mock_secret_service_search_sync(
|
| - SecretService* service,
|
| - const SecretSchema* schema,
|
| - GHashTable* attributes,
|
| - SecretSearchFlags flags,
|
| - GCancellable* cancellable,
|
| - GError** error) {
|
| - *error = nullptr;
|
| - return nullptr;
|
| -}
|
| -
|
| -// static
|
| -gboolean MockLibsecretLoader::mock_secret_password_clear_sync(
|
| - const SecretSchema* schema,
|
| - GCancellable* cancellable,
|
| - GError** error,
|
| - ...) {
|
| - EXPECT_STREQ(kKeystoreSchemaV1.name, schema->name);
|
| - delete deprecated_password_mock_ptr_;
|
| - deprecated_password_mock_ptr_ = nullptr;
|
| - return true;
|
| -}
|
| -
|
| -// static
|
| -bool MockLibsecretLoader::ResetForOSCrypt() {
|
| - // 4 methods used by KeyStorageLibsecret
|
| - secret_password_store_sync =
|
| - &MockLibsecretLoader::mock_secret_password_store_sync;
|
| - secret_value_get_text = (decltype(&::secret_value_get_text)) &
|
| - MockLibsecretLoader::mock_secret_value_get_text;
|
| - secret_value_unref = &MockLibsecretLoader::mock_secret_value_unref;
|
| - secret_service_lookup_sync =
|
| - (decltype(&::secret_service_lookup_sync)) &
|
| - MockLibsecretLoader::mock_secret_service_lookup_sync;
|
| - // Used by Migrate()
|
| - secret_password_clear_sync =
|
| - &MockLibsecretLoader::mock_secret_password_clear_sync;
|
| - // 1 method used by LibsecretLoader::EnsureLibsecretLoaded()
|
| - secret_service_search_sync =
|
| - &MockLibsecretLoader::mock_secret_service_search_sync;
|
| -
|
| - delete stored_password_mock_ptr_;
|
| - stored_password_mock_ptr_ = nullptr;
|
| - libsecret_loaded_ = true;
|
| -
|
| - return true;
|
| -}
|
| -
|
| -// static
|
| -void MockLibsecretLoader::SetOSCryptPassword(const char* value) {
|
| - delete stored_password_mock_ptr_;
|
| - stored_password_mock_ptr_ = new MockSecretValue(value);
|
| -}
|
| -
|
| -// static
|
| -void MockLibsecretLoader::SetDeprecatedOSCryptPassword(const char* value) {
|
| - delete deprecated_password_mock_ptr_;
|
| - deprecated_password_mock_ptr_ = new MockSecretValue(value);
|
| -}
|
| -
|
| -// static
|
| -void MockLibsecretLoader::TearDown() {
|
| - delete stored_password_mock_ptr_;
|
| - stored_password_mock_ptr_ = nullptr;
|
| - libsecret_loaded_ =
|
| - false; // Function pointers will be restored when loading.
|
| -}
|
| -
|
| -class LibsecretTest : public testing::Test {
|
| - public:
|
| - LibsecretTest() = default;
|
| - ~LibsecretTest() override = default;
|
| -
|
| - void SetUp() override { MockLibsecretLoader::ResetForOSCrypt(); }
|
| -
|
| - void TearDown() override { MockLibsecretLoader::TearDown(); }
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(LibsecretTest);
|
| -};
|
| -
|
| -TEST_F(LibsecretTest, LibsecretRepeats) {
|
| - KeyStorageLibsecret libsecret;
|
| - MockLibsecretLoader::ResetForOSCrypt();
|
| - std::string password = libsecret.GetKey();
|
| - EXPECT_FALSE(password.empty());
|
| - std::string password_repeat = libsecret.GetKey();
|
| - EXPECT_EQ(password, password_repeat);
|
| -}
|
| -
|
| -TEST_F(LibsecretTest, LibsecretCreatesRandomised) {
|
| - KeyStorageLibsecret libsecret;
|
| - MockLibsecretLoader::ResetForOSCrypt();
|
| - std::string password = libsecret.GetKey();
|
| - MockLibsecretLoader::ResetForOSCrypt();
|
| - std::string password_new = libsecret.GetKey();
|
| - EXPECT_NE(password, password_new);
|
| -}
|
| -
|
| -TEST_F(LibsecretTest, LibsecretMigratesFromSchemaV1ToV2) {
|
| - KeyStorageLibsecret libsecret;
|
| - MockLibsecretLoader::ResetForOSCrypt();
|
| - MockLibsecretLoader::SetDeprecatedOSCryptPassword("swallow");
|
| - std::string password = libsecret.GetKey();
|
| - EXPECT_EQ("swallow", password);
|
| -}
|
| -
|
| -} // namespace
|
|
|