Chromium Code Reviews| 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..441652b720a92a3bb0e925e747115c88f06fd6c9 |
| --- /dev/null |
| +++ b/chrome/browser/profiles/profile_attributes_storage_unittest.cc |
| @@ -0,0 +1,263 @@ |
| +// 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 "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, member, first_value, second_value) \ |
| + TestAccessors(&entry, \ |
| + &decltype(entry)::Get ## member, \ |
| + &decltype(entry)::Set ## member, \ |
| + first_value, \ |
| + second_value); |
| + |
| +#define TEST_STRING16_ACCESSORS(entry, member) \ |
| + TEST_ACCESSORS(entry, member, \ |
| + base::ASCIIToUTF16("first_" #member "_value"), \ |
| + base::ASCIIToUTF16("second_" #member "_value")); |
| + |
| +#define TEST_STRING_ACCESSORS(entry, member) \ |
| + TEST_ACCESSORS(entry, member, \ |
| + std::string("first_" #member "_value"), \ |
| + std::string("second_" #member "_value")); |
| + |
| +#define TEST_BOOL_ACCESSORS(entry, member) \ |
| +TestAccessors(&entry, \ |
| + &decltype(entry)::member, \ |
| + &decltype(entry)::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 testing_profile_manager_.profile_info_cache(); |
| + } |
| + |
| + void AddTestingProfile() { |
| + size_t number_of_profiles = 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_; |
| +}; |
| + |
| +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, DeleteProfile) { |
| + 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()->DeleteProfile(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()->DeleteProfile(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(entry, Name); |
| + TEST_STRING16_ACCESSORS(entry, ShortcutName); |
| + TEST_STRING_ACCESSORS(entry, LocalAuthCredentials); |
| + TEST_STRING_ACCESSORS(entry, PasswordChangeDetectionToken); |
| + TEST_ACCESSORS(entry, BackgroundStatus, false, true); |
| + TEST_STRING16_ACCESSORS(entry, GAIAName); |
| + TEST_STRING16_ACCESSORS(entry, GAIAGivenName); |
| + TEST_BOOL_ACCESSORS(entry, IsUsingGAIAPicture); |
| + TEST_BOOL_ACCESSORS(entry, IsOmitted); |
| + TEST_BOOL_ACCESSORS(entry, IsSigninRequired); |
| + TEST_STRING_ACCESSORS(entry, SupervisedUserId); |
| + TEST_BOOL_ACCESSORS(entry, IsEphemeral); |
| + TEST_BOOL_ACCESSORS(entry, IsUsingDefaultName); |
| + TEST_BOOL_ACCESSORS(entry, IsUsingDefaultAvatar); |
| + TEST_BOOL_ACCESSORS(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()); |
| +} |
|
Mike Lerman
2015/07/02 18:01:30
Can you add some tests around:
- I get a ProfileAt
anthonyvd
2015/07/07 21:05:32
Done. Also testing deleting from the ProfileInfoCa
Mike Lerman
2015/07/08 18:26:34
Undefined contract - understood. Makes sense.
I a
anthonyvd
2015/07/09 17:02:13
Good point, I added a DCHECK in ProfileInfoAttribu
|