Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3095)

Unified Diff: chrome/browser/profiles/profile_attributes_storage_unittest.cc

Issue 1214483002: Improve the ProfileInfoCache API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/profiles/profile_attributes_storage.h ('k') | chrome/browser/profiles/profile_info_cache.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/profiles/profile_attributes_storage_unittest.cc
diff --git a/chrome/browser/profiles/profile_attributes_storage_unittest.cc b/chrome/browser/profiles/profile_attributes_storage_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..b3668121d249b0c1db37cf2f84bbbca2681054f2
--- /dev/null
+++ b/chrome/browser/profiles/profile_attributes_storage_unittest.cc
@@ -0,0 +1,356 @@
+// Copyright 2015 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 "base/strings/stringprintf.h"
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/profiles/profile_info_cache.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/supervised_user/supervised_user_constants.h"
+#include "chrome/test/base/testing_browser_process.h"
+#include "chrome/test/base/testing_profile_manager.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+// The ProfileMetadataEntry accessors aren't just plain old accessors to local
+// members so they'll be tested. The following helpers will make the testing
+// code less verbose.
+#define TEST_ACCESSORS(entry_type, entry, member, first_value, second_value) \
+ TestAccessors(&entry, \
+ &entry_type::Get ## member, \
+ &entry_type::Set ## member, \
+ first_value, \
+ second_value);
+
+#define TEST_STRING16_ACCESSORS(entry_type, entry, member) \
+ TEST_ACCESSORS(entry_type, entry, member, \
+ base::ASCIIToUTF16("first_" #member "_value"), \
+ base::ASCIIToUTF16("second_" #member "_value"));
+
+#define TEST_STRING_ACCESSORS(entry_type, entry, member) \
+ TEST_ACCESSORS(entry_type, entry, member, \
+ std::string("first_" #member "_value"), \
+ std::string("second_" #member "_value"));
+
+#define TEST_BOOL_ACCESSORS(entry_type, entry, member) \
+TestAccessors(&entry, \
+ &entry_type::member, \
+ &entry_type::Set ## member, \
+ false, \
+ true);
+
+template<typename TValue, typename TGetter, typename TSetter>
+void TestAccessors(ProfileAttributesEntry** entry,
+ TGetter getter_func,
+ TSetter setter_func,
+ TValue first_value,
+ TValue second_value) {
+ (*entry->*setter_func)(first_value);
+ EXPECT_EQ(first_value, (*entry->*getter_func)());
+ (*entry->*setter_func)(second_value);
+ EXPECT_EQ(second_value, (*entry->*getter_func)());
+}
+} // namespace
+
+class ProfileAttributesStorageTest : public testing::Test {
+ public:
+ ProfileAttributesStorageTest()
+ : testing_profile_manager_(TestingBrowserProcess::GetGlobal()) {}
+ ~ProfileAttributesStorageTest() override {}
+
+ protected:
+ void SetUp() override {
+ ASSERT_TRUE(testing_profile_manager_.SetUp());
+ }
+
+ void TearDown() override {
+ }
+
+ base::FilePath GetProfilePath(const std::string& base_name) {
+ return testing_profile_manager_.profile_manager()->user_data_dir().
+ AppendASCII(base_name);
+ }
+
+ ProfileAttributesStorage* storage() {
+ return profile_info_cache();
+ }
+
+ ProfileInfoCache* profile_info_cache() {
+ return testing_profile_manager_.profile_info_cache();
+ }
+
+ void AddTestingProfile() {
+ unsigned long number_of_profiles =
+ static_cast<unsigned long>(storage()->GetNumberOfProfiles());
+
+ storage()->AddProfile(
+ GetProfilePath(
+ base::StringPrintf("testing_profile_path%lu", number_of_profiles)),
+ base::ASCIIToUTF16(
+ base::StringPrintf("testing_profile_name%lu", number_of_profiles)),
+ std::string(
+ base::StringPrintf("testing_profile_gaia%lu", number_of_profiles)),
+ base::ASCIIToUTF16(
+ base::StringPrintf("testing_profile_user%lu", number_of_profiles)),
+ number_of_profiles,
+ std::string(""));
+
+ EXPECT_EQ(number_of_profiles + 1, storage()->GetNumberOfProfiles());
+ }
+
+ private:
+ TestingProfileManager testing_profile_manager_;
+ content::TestBrowserThreadBundle thread_bundle_;
+};
+
+TEST_F(ProfileAttributesStorageTest, ProfileNotFound) {
+ EXPECT_EQ(0U, storage()->GetNumberOfProfiles());
+
+ ProfileAttributesEntry* entry;
+ ASSERT_FALSE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("testing_profile_path0"), &entry));
+
+ AddTestingProfile();
+ EXPECT_EQ(1U, storage()->GetNumberOfProfiles());
+
+ ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("testing_profile_path0"), &entry));
+ ASSERT_FALSE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("testing_profile_path1"), &entry));
+}
+
+TEST_F(ProfileAttributesStorageTest, AddProfile) {
+ EXPECT_EQ(0U, storage()->GetNumberOfProfiles());
+
+ storage()->AddProfile(GetProfilePath("new_profile_path_1"),
+ base::ASCIIToUTF16("new_profile_name_1"),
+ std::string("new_profile_gaia_1"),
+ base::ASCIIToUTF16("new_profile_username_1"),
+ 1,
+ std::string(""));
+
+ EXPECT_EQ(1U, storage()->GetNumberOfProfiles());
+
+ ProfileAttributesEntry* entry;
+ ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("new_profile_path_1"), &entry));
+ EXPECT_EQ(base::ASCIIToUTF16("new_profile_name_1"), entry->GetName());
+}
+
+TEST_F(ProfileAttributesStorageTest, RemoveProfile) {
+ EXPECT_EQ(0U, storage()->GetNumberOfProfiles());
+
+ ProfileAttributesEntry* entry;
+ ASSERT_FALSE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("testing_profile_path0"), &entry));
+
+ AddTestingProfile();
+ EXPECT_EQ(1U, storage()->GetNumberOfProfiles());
+
+ // Deleting an existing profile should make it un-retrievable.
+ storage()->RemoveProfile(GetProfilePath("testing_profile_path0"));
+ EXPECT_EQ(0U, storage()->GetNumberOfProfiles());
+
+ ASSERT_FALSE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("testing_profile_path1"), &entry));
+ ASSERT_FALSE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("testing_profile_path1"), &entry));
+}
+
+TEST_F(ProfileAttributesStorageTest, MultipleProfiles) {
+ EXPECT_EQ(0U, storage()->GetNumberOfProfiles());
+
+ for (size_t i = 0; i < 5; ++i) {
+ AddTestingProfile();
+ EXPECT_EQ(i + 1, storage()->GetNumberOfProfiles());
+ std::vector<ProfileAttributesEntry*> entries =
+ storage()->GetAllProfilesAttributes();
+ EXPECT_EQ(i + 1, entries.size());
+ }
+
+ EXPECT_EQ(5U, storage()->GetNumberOfProfiles());
+
+ ProfileAttributesEntry* entry;
+ ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("testing_profile_path0"), &entry));
+ EXPECT_EQ(base::ASCIIToUTF16("testing_profile_name0"), entry->GetName());
+
+ storage()->RemoveProfile(GetProfilePath("testing_profile_path0"));
+ ASSERT_FALSE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("testing_profile_path0"), &entry));
+ EXPECT_EQ(4U, storage()->GetNumberOfProfiles());
+
+ std::vector<ProfileAttributesEntry*> entries =
+ storage()->GetAllProfilesAttributes();
+ for (auto& entry: entries) {
+ EXPECT_NE(GetProfilePath("testing_profile_path0"), entry->GetPath());
+ }
+}
+
+TEST_F(ProfileAttributesStorageTest, InitialValues) {
+ AddTestingProfile();
+
+ ProfileAttributesEntry* entry;
+ ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("testing_profile_path0"), &entry));
+ EXPECT_EQ(GetProfilePath("testing_profile_path0"), entry->GetPath());
+ EXPECT_EQ(base::ASCIIToUTF16("testing_profile_name0"), entry->GetName());
+ EXPECT_EQ(std::string("testing_profile_gaia0"), entry->GetGAIAId());
+ EXPECT_EQ(base::ASCIIToUTF16("testing_profile_user0"), entry->GetUserName());
+ EXPECT_EQ(0U, entry->GetAvatarIconIndex());
+ EXPECT_EQ(std::string(""), entry->GetSupervisedUserId());
+}
+
+TEST_F(ProfileAttributesStorageTest, EntryAccessors) {
+ AddTestingProfile();
+
+ ProfileAttributesEntry* entry;
+ ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("testing_profile_path0"), &entry));
+
+ EXPECT_EQ(GetProfilePath("testing_profile_path0"), entry->GetPath());
+
+ TEST_STRING16_ACCESSORS(ProfileAttributesEntry, entry, Name);
+ TEST_STRING16_ACCESSORS(ProfileAttributesEntry, entry, ShortcutName);
+ TEST_STRING_ACCESSORS(ProfileAttributesEntry, entry, LocalAuthCredentials);
+ TEST_STRING_ACCESSORS(
+ ProfileAttributesEntry, entry, PasswordChangeDetectionToken);
+ TEST_ACCESSORS(ProfileAttributesEntry, entry, BackgroundStatus, false, true);
+ TEST_STRING16_ACCESSORS(ProfileAttributesEntry, entry, GAIAName);
+ TEST_STRING16_ACCESSORS(ProfileAttributesEntry, entry, GAIAGivenName);
+ TEST_BOOL_ACCESSORS(ProfileAttributesEntry, entry, IsUsingGAIAPicture);
+ TEST_BOOL_ACCESSORS(ProfileAttributesEntry, entry, IsOmitted);
+ TEST_BOOL_ACCESSORS(ProfileAttributesEntry, entry, IsSigninRequired);
+ TEST_STRING_ACCESSORS(ProfileAttributesEntry, entry, SupervisedUserId);
+ TEST_BOOL_ACCESSORS(ProfileAttributesEntry, entry, IsEphemeral);
+ TEST_BOOL_ACCESSORS(ProfileAttributesEntry, entry, IsUsingDefaultName);
+ TEST_BOOL_ACCESSORS(ProfileAttributesEntry, entry, IsUsingDefaultAvatar);
+ TEST_BOOL_ACCESSORS(ProfileAttributesEntry, entry, IsAuthError);
+}
+
+TEST_F(ProfileAttributesStorageTest, AuthInfo) {
+ AddTestingProfile();
+
+ ProfileAttributesEntry* entry;
+ ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("testing_profile_path0"), &entry));
+
+ entry->SetAuthInfo("", base::string16());
+ ASSERT_FALSE(entry->IsAuthenticated());
+ EXPECT_EQ(base::string16(), entry->GetUserName());
+ EXPECT_EQ("", entry->GetGAIAId());
+
+ entry->SetAuthInfo("foo", base::ASCIIToUTF16("bar"));
+ ASSERT_TRUE(entry->IsAuthenticated());
+ EXPECT_EQ(base::ASCIIToUTF16("bar"), entry->GetUserName());
+ EXPECT_EQ("foo", entry->GetGAIAId());
+}
+
+TEST_F(ProfileAttributesStorageTest, SupervisedUsersAccessors) {
+ AddTestingProfile();
+
+ ProfileAttributesEntry* entry;
+ ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("testing_profile_path0"), &entry));
+
+ entry->SetSupervisedUserId("");
+ ASSERT_FALSE(entry->IsSupervised());
+ ASSERT_FALSE(entry->IsChild());
+ ASSERT_FALSE(entry->IsLegacySupervised());
+
+ entry->SetSupervisedUserId("some_supervised_user_id");
+ ASSERT_TRUE(entry->IsSupervised());
+ ASSERT_FALSE(entry->IsChild());
+ ASSERT_TRUE(entry->IsLegacySupervised());
+
+ entry->SetSupervisedUserId(supervised_users::kChildAccountSUID);
+ ASSERT_TRUE(entry->IsSupervised());
+ ASSERT_TRUE(entry->IsChild());
+ ASSERT_FALSE(entry->IsLegacySupervised());
+}
+
+TEST_F(ProfileAttributesStorageTest, ReSortTriggered) {
+ storage()->AddProfile(GetProfilePath("alpha_path"),
+ base::ASCIIToUTF16("alpha"),
+ std::string("alpha_gaia"),
+ base::ASCIIToUTF16("alpha_username"),
+ 1,
+ std::string(""));
+
+ storage()->AddProfile(GetProfilePath("lima_path"),
+ base::ASCIIToUTF16("lima"),
+ std::string("lima_gaia"),
+ base::ASCIIToUTF16("lima_username"),
+ 1,
+ std::string(""));
+
+ ProfileAttributesEntry* entry;
+ ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("alpha_path"), &entry));
+
+ // Trigger a ProfileInfoCache re-sort.
+ entry->SetName(base::ASCIIToUTF16("zulu_name"));
+ EXPECT_EQ(GetProfilePath("alpha_path"), entry->GetPath());
+}
+
+TEST_F(ProfileAttributesStorageTest, RemoveOtherProfile) {
+ AddTestingProfile();
+ AddTestingProfile();
+ AddTestingProfile();
+
+ EXPECT_EQ(3U, storage()->GetNumberOfProfiles());
+
+ ProfileAttributesEntry* first_entry;
+ ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("testing_profile_path0"), &first_entry));
+
+ ProfileAttributesEntry* second_entry;
+ ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("testing_profile_path1"), &second_entry));
+
+ EXPECT_EQ(
+ base::ASCIIToUTF16("testing_profile_name0"),first_entry->GetName());
+
+ storage()->RemoveProfile(GetProfilePath("testing_profile_path1"));
+ ASSERT_FALSE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("testing_profile_path1"), &second_entry));
+
+ EXPECT_EQ(GetProfilePath("testing_profile_path0"), first_entry->GetPath());
+ EXPECT_EQ(
+ base::ASCIIToUTF16("testing_profile_name0"), first_entry->GetName());
+
+ // Deleting through the ProfileInfoCache should be reflected in the
+ // ProfileAttributesStorage as well.
+ profile_info_cache()->RemoveProfile(
+ GetProfilePath("testing_profile_path2"));
+ ASSERT_FALSE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("testing_profile_path2"), &second_entry));
+}
+
+TEST_F(ProfileAttributesStorageTest, AccessFromElsewhere) {
+ AddTestingProfile();
+
+ ProfileAttributesEntry* first_entry;
+ ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("testing_profile_path0"), &first_entry));
+
+ ProfileAttributesEntry* second_entry;
+ ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
+ GetProfilePath("testing_profile_path0"), &second_entry));
+
+ first_entry->SetName(base::ASCIIToUTF16("NewName"));
+ EXPECT_EQ(base::ASCIIToUTF16("NewName"), second_entry->GetName());
+ EXPECT_EQ(first_entry, second_entry);
+
+ // The ProfileInfoCache should also reflect the changes and its changes
+ // should be reflected by the ProfileAttributesStorage.
+ size_t index = profile_info_cache()->GetIndexOfProfileWithPath(
+ GetProfilePath("testing_profile_path0"));
+ EXPECT_EQ(base::ASCIIToUTF16("NewName"),
+ profile_info_cache()->GetNameOfProfileAtIndex(index));
+
+ profile_info_cache()->SetNameOfProfileAtIndex(
+ index, base::ASCIIToUTF16("OtherNewName"));
+ EXPECT_EQ(base::ASCIIToUTF16("OtherNewName"), first_entry->GetName());
+}
« no previous file with comments | « chrome/browser/profiles/profile_attributes_storage.h ('k') | chrome/browser/profiles/profile_info_cache.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698