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

Side by Side 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/strings/stringprintf.h"
6 #include "base/strings/utf_string_conversions.h"
7 #include "chrome/browser/profiles/profile_info_cache.h"
8 #include "chrome/browser/profiles/profile_manager.h"
9 #include "chrome/browser/supervised_user/supervised_user_constants.h"
10 #include "chrome/test/base/testing_browser_process.h"
11 #include "chrome/test/base/testing_profile_manager.h"
12 #include "content/public/test/test_browser_thread_bundle.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace {
16 // The ProfileMetadataEntry accessors aren't just plain old accessors to local
17 // members so they'll be tested. The following helpers will make the testing
18 // code less verbose.
19 #define TEST_ACCESSORS(entry_type, entry, member, first_value, second_value) \
20 TestAccessors(&entry, \
21 &entry_type::Get ## member, \
22 &entry_type::Set ## member, \
23 first_value, \
24 second_value);
25
26 #define TEST_STRING16_ACCESSORS(entry_type, entry, member) \
27 TEST_ACCESSORS(entry_type, entry, member, \
28 base::ASCIIToUTF16("first_" #member "_value"), \
29 base::ASCIIToUTF16("second_" #member "_value"));
30
31 #define TEST_STRING_ACCESSORS(entry_type, entry, member) \
32 TEST_ACCESSORS(entry_type, entry, member, \
33 std::string("first_" #member "_value"), \
34 std::string("second_" #member "_value"));
35
36 #define TEST_BOOL_ACCESSORS(entry_type, entry, member) \
37 TestAccessors(&entry, \
38 &entry_type::member, \
39 &entry_type::Set ## member, \
40 false, \
41 true);
42
43 template<typename TValue, typename TGetter, typename TSetter>
44 void TestAccessors(ProfileAttributesEntry** entry,
45 TGetter getter_func,
46 TSetter setter_func,
47 TValue first_value,
48 TValue second_value) {
49 (*entry->*setter_func)(first_value);
50 EXPECT_EQ(first_value, (*entry->*getter_func)());
51 (*entry->*setter_func)(second_value);
52 EXPECT_EQ(second_value, (*entry->*getter_func)());
53 }
54 } // namespace
55
56 class ProfileAttributesStorageTest : public testing::Test {
57 public:
58 ProfileAttributesStorageTest()
59 : testing_profile_manager_(TestingBrowserProcess::GetGlobal()) {}
60 ~ProfileAttributesStorageTest() override {}
61
62 protected:
63 void SetUp() override {
64 ASSERT_TRUE(testing_profile_manager_.SetUp());
65 }
66
67 void TearDown() override {
68 }
69
70 base::FilePath GetProfilePath(const std::string& base_name) {
71 return testing_profile_manager_.profile_manager()->user_data_dir().
72 AppendASCII(base_name);
73 }
74
75 ProfileAttributesStorage* storage() {
76 return profile_info_cache();
77 }
78
79 ProfileInfoCache* profile_info_cache() {
80 return testing_profile_manager_.profile_info_cache();
81 }
82
83 void AddTestingProfile() {
84 unsigned long number_of_profiles =
85 static_cast<unsigned long>(storage()->GetNumberOfProfiles());
86
87 storage()->AddProfile(
88 GetProfilePath(
89 base::StringPrintf("testing_profile_path%lu", number_of_profiles)),
90 base::ASCIIToUTF16(
91 base::StringPrintf("testing_profile_name%lu", number_of_profiles)),
92 std::string(
93 base::StringPrintf("testing_profile_gaia%lu", number_of_profiles)),
94 base::ASCIIToUTF16(
95 base::StringPrintf("testing_profile_user%lu", number_of_profiles)),
96 number_of_profiles,
97 std::string(""));
98
99 EXPECT_EQ(number_of_profiles + 1, storage()->GetNumberOfProfiles());
100 }
101
102 private:
103 TestingProfileManager testing_profile_manager_;
104 content::TestBrowserThreadBundle thread_bundle_;
105 };
106
107 TEST_F(ProfileAttributesStorageTest, ProfileNotFound) {
108 EXPECT_EQ(0U, storage()->GetNumberOfProfiles());
109
110 ProfileAttributesEntry* entry;
111 ASSERT_FALSE(storage()->GetProfileAttributesWithPath(
112 GetProfilePath("testing_profile_path0"), &entry));
113
114 AddTestingProfile();
115 EXPECT_EQ(1U, storage()->GetNumberOfProfiles());
116
117 ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
118 GetProfilePath("testing_profile_path0"), &entry));
119 ASSERT_FALSE(storage()->GetProfileAttributesWithPath(
120 GetProfilePath("testing_profile_path1"), &entry));
121 }
122
123 TEST_F(ProfileAttributesStorageTest, AddProfile) {
124 EXPECT_EQ(0U, storage()->GetNumberOfProfiles());
125
126 storage()->AddProfile(GetProfilePath("new_profile_path_1"),
127 base::ASCIIToUTF16("new_profile_name_1"),
128 std::string("new_profile_gaia_1"),
129 base::ASCIIToUTF16("new_profile_username_1"),
130 1,
131 std::string(""));
132
133 EXPECT_EQ(1U, storage()->GetNumberOfProfiles());
134
135 ProfileAttributesEntry* entry;
136 ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
137 GetProfilePath("new_profile_path_1"), &entry));
138 EXPECT_EQ(base::ASCIIToUTF16("new_profile_name_1"), entry->GetName());
139 }
140
141 TEST_F(ProfileAttributesStorageTest, RemoveProfile) {
142 EXPECT_EQ(0U, storage()->GetNumberOfProfiles());
143
144 ProfileAttributesEntry* entry;
145 ASSERT_FALSE(storage()->GetProfileAttributesWithPath(
146 GetProfilePath("testing_profile_path0"), &entry));
147
148 AddTestingProfile();
149 EXPECT_EQ(1U, storage()->GetNumberOfProfiles());
150
151 // Deleting an existing profile should make it un-retrievable.
152 storage()->RemoveProfile(GetProfilePath("testing_profile_path0"));
153 EXPECT_EQ(0U, storage()->GetNumberOfProfiles());
154
155 ASSERT_FALSE(storage()->GetProfileAttributesWithPath(
156 GetProfilePath("testing_profile_path1"), &entry));
157 ASSERT_FALSE(storage()->GetProfileAttributesWithPath(
158 GetProfilePath("testing_profile_path1"), &entry));
159 }
160
161 TEST_F(ProfileAttributesStorageTest, MultipleProfiles) {
162 EXPECT_EQ(0U, storage()->GetNumberOfProfiles());
163
164 for (size_t i = 0; i < 5; ++i) {
165 AddTestingProfile();
166 EXPECT_EQ(i + 1, storage()->GetNumberOfProfiles());
167 std::vector<ProfileAttributesEntry*> entries =
168 storage()->GetAllProfilesAttributes();
169 EXPECT_EQ(i + 1, entries.size());
170 }
171
172 EXPECT_EQ(5U, storage()->GetNumberOfProfiles());
173
174 ProfileAttributesEntry* entry;
175 ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
176 GetProfilePath("testing_profile_path0"), &entry));
177 EXPECT_EQ(base::ASCIIToUTF16("testing_profile_name0"), entry->GetName());
178
179 storage()->RemoveProfile(GetProfilePath("testing_profile_path0"));
180 ASSERT_FALSE(storage()->GetProfileAttributesWithPath(
181 GetProfilePath("testing_profile_path0"), &entry));
182 EXPECT_EQ(4U, storage()->GetNumberOfProfiles());
183
184 std::vector<ProfileAttributesEntry*> entries =
185 storage()->GetAllProfilesAttributes();
186 for (auto& entry: entries) {
187 EXPECT_NE(GetProfilePath("testing_profile_path0"), entry->GetPath());
188 }
189 }
190
191 TEST_F(ProfileAttributesStorageTest, InitialValues) {
192 AddTestingProfile();
193
194 ProfileAttributesEntry* entry;
195 ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
196 GetProfilePath("testing_profile_path0"), &entry));
197 EXPECT_EQ(GetProfilePath("testing_profile_path0"), entry->GetPath());
198 EXPECT_EQ(base::ASCIIToUTF16("testing_profile_name0"), entry->GetName());
199 EXPECT_EQ(std::string("testing_profile_gaia0"), entry->GetGAIAId());
200 EXPECT_EQ(base::ASCIIToUTF16("testing_profile_user0"), entry->GetUserName());
201 EXPECT_EQ(0U, entry->GetAvatarIconIndex());
202 EXPECT_EQ(std::string(""), entry->GetSupervisedUserId());
203 }
204
205 TEST_F(ProfileAttributesStorageTest, EntryAccessors) {
206 AddTestingProfile();
207
208 ProfileAttributesEntry* entry;
209 ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
210 GetProfilePath("testing_profile_path0"), &entry));
211
212 EXPECT_EQ(GetProfilePath("testing_profile_path0"), entry->GetPath());
213
214 TEST_STRING16_ACCESSORS(ProfileAttributesEntry, entry, Name);
215 TEST_STRING16_ACCESSORS(ProfileAttributesEntry, entry, ShortcutName);
216 TEST_STRING_ACCESSORS(ProfileAttributesEntry, entry, LocalAuthCredentials);
217 TEST_STRING_ACCESSORS(
218 ProfileAttributesEntry, entry, PasswordChangeDetectionToken);
219 TEST_ACCESSORS(ProfileAttributesEntry, entry, BackgroundStatus, false, true);
220 TEST_STRING16_ACCESSORS(ProfileAttributesEntry, entry, GAIAName);
221 TEST_STRING16_ACCESSORS(ProfileAttributesEntry, entry, GAIAGivenName);
222 TEST_BOOL_ACCESSORS(ProfileAttributesEntry, entry, IsUsingGAIAPicture);
223 TEST_BOOL_ACCESSORS(ProfileAttributesEntry, entry, IsOmitted);
224 TEST_BOOL_ACCESSORS(ProfileAttributesEntry, entry, IsSigninRequired);
225 TEST_STRING_ACCESSORS(ProfileAttributesEntry, entry, SupervisedUserId);
226 TEST_BOOL_ACCESSORS(ProfileAttributesEntry, entry, IsEphemeral);
227 TEST_BOOL_ACCESSORS(ProfileAttributesEntry, entry, IsUsingDefaultName);
228 TEST_BOOL_ACCESSORS(ProfileAttributesEntry, entry, IsUsingDefaultAvatar);
229 TEST_BOOL_ACCESSORS(ProfileAttributesEntry, entry, IsAuthError);
230 }
231
232 TEST_F(ProfileAttributesStorageTest, AuthInfo) {
233 AddTestingProfile();
234
235 ProfileAttributesEntry* entry;
236 ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
237 GetProfilePath("testing_profile_path0"), &entry));
238
239 entry->SetAuthInfo("", base::string16());
240 ASSERT_FALSE(entry->IsAuthenticated());
241 EXPECT_EQ(base::string16(), entry->GetUserName());
242 EXPECT_EQ("", entry->GetGAIAId());
243
244 entry->SetAuthInfo("foo", base::ASCIIToUTF16("bar"));
245 ASSERT_TRUE(entry->IsAuthenticated());
246 EXPECT_EQ(base::ASCIIToUTF16("bar"), entry->GetUserName());
247 EXPECT_EQ("foo", entry->GetGAIAId());
248 }
249
250 TEST_F(ProfileAttributesStorageTest, SupervisedUsersAccessors) {
251 AddTestingProfile();
252
253 ProfileAttributesEntry* entry;
254 ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
255 GetProfilePath("testing_profile_path0"), &entry));
256
257 entry->SetSupervisedUserId("");
258 ASSERT_FALSE(entry->IsSupervised());
259 ASSERT_FALSE(entry->IsChild());
260 ASSERT_FALSE(entry->IsLegacySupervised());
261
262 entry->SetSupervisedUserId("some_supervised_user_id");
263 ASSERT_TRUE(entry->IsSupervised());
264 ASSERT_FALSE(entry->IsChild());
265 ASSERT_TRUE(entry->IsLegacySupervised());
266
267 entry->SetSupervisedUserId(supervised_users::kChildAccountSUID);
268 ASSERT_TRUE(entry->IsSupervised());
269 ASSERT_TRUE(entry->IsChild());
270 ASSERT_FALSE(entry->IsLegacySupervised());
271 }
272
273 TEST_F(ProfileAttributesStorageTest, ReSortTriggered) {
274 storage()->AddProfile(GetProfilePath("alpha_path"),
275 base::ASCIIToUTF16("alpha"),
276 std::string("alpha_gaia"),
277 base::ASCIIToUTF16("alpha_username"),
278 1,
279 std::string(""));
280
281 storage()->AddProfile(GetProfilePath("lima_path"),
282 base::ASCIIToUTF16("lima"),
283 std::string("lima_gaia"),
284 base::ASCIIToUTF16("lima_username"),
285 1,
286 std::string(""));
287
288 ProfileAttributesEntry* entry;
289 ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
290 GetProfilePath("alpha_path"), &entry));
291
292 // Trigger a ProfileInfoCache re-sort.
293 entry->SetName(base::ASCIIToUTF16("zulu_name"));
294 EXPECT_EQ(GetProfilePath("alpha_path"), entry->GetPath());
295 }
296
297 TEST_F(ProfileAttributesStorageTest, RemoveOtherProfile) {
298 AddTestingProfile();
299 AddTestingProfile();
300 AddTestingProfile();
301
302 EXPECT_EQ(3U, storage()->GetNumberOfProfiles());
303
304 ProfileAttributesEntry* first_entry;
305 ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
306 GetProfilePath("testing_profile_path0"), &first_entry));
307
308 ProfileAttributesEntry* second_entry;
309 ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
310 GetProfilePath("testing_profile_path1"), &second_entry));
311
312 EXPECT_EQ(
313 base::ASCIIToUTF16("testing_profile_name0"),first_entry->GetName());
314
315 storage()->RemoveProfile(GetProfilePath("testing_profile_path1"));
316 ASSERT_FALSE(storage()->GetProfileAttributesWithPath(
317 GetProfilePath("testing_profile_path1"), &second_entry));
318
319 EXPECT_EQ(GetProfilePath("testing_profile_path0"), first_entry->GetPath());
320 EXPECT_EQ(
321 base::ASCIIToUTF16("testing_profile_name0"), first_entry->GetName());
322
323 // Deleting through the ProfileInfoCache should be reflected in the
324 // ProfileAttributesStorage as well.
325 profile_info_cache()->RemoveProfile(
326 GetProfilePath("testing_profile_path2"));
327 ASSERT_FALSE(storage()->GetProfileAttributesWithPath(
328 GetProfilePath("testing_profile_path2"), &second_entry));
329 }
330
331 TEST_F(ProfileAttributesStorageTest, AccessFromElsewhere) {
332 AddTestingProfile();
333
334 ProfileAttributesEntry* first_entry;
335 ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
336 GetProfilePath("testing_profile_path0"), &first_entry));
337
338 ProfileAttributesEntry* second_entry;
339 ASSERT_TRUE(storage()->GetProfileAttributesWithPath(
340 GetProfilePath("testing_profile_path0"), &second_entry));
341
342 first_entry->SetName(base::ASCIIToUTF16("NewName"));
343 EXPECT_EQ(base::ASCIIToUTF16("NewName"), second_entry->GetName());
344 EXPECT_EQ(first_entry, second_entry);
345
346 // The ProfileInfoCache should also reflect the changes and its changes
347 // should be reflected by the ProfileAttributesStorage.
348 size_t index = profile_info_cache()->GetIndexOfProfileWithPath(
349 GetProfilePath("testing_profile_path0"));
350 EXPECT_EQ(base::ASCIIToUTF16("NewName"),
351 profile_info_cache()->GetNameOfProfileAtIndex(index));
352
353 profile_info_cache()->SetNameOfProfileAtIndex(
354 index, base::ASCIIToUTF16("OtherNewName"));
355 EXPECT_EQ(base::ASCIIToUTF16("OtherNewName"), first_entry->GetName());
356 }
OLDNEW
« 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