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

Side by Side Diff: chrome/browser/chromeos/login/user_manager_unittest.cc

Issue 9405035: Implement ephemeral users (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Comments addressed. Created 8 years, 9 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 (c) 2012 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 <cstdlib>
6 #include <cstring>
7
8 #include "base/memory/scoped_ptr.h"
9 #include "base/message_loop.h"
10 #include "base/values.h"
11 #include "chrome/browser/browser_process.h"
12 #include "chrome/browser/chromeos/cros_settings.h"
13 #include "chrome/browser/chromeos/cros_settings_names.h"
14 #include "chrome/browser/chromeos/cros_settings_provider.h"
15 #include "chrome/browser/chromeos/login/user.h"
16 #include "chrome/browser/chromeos/login/user_manager.h"
17 #include "chrome/browser/chromeos/stub_cros_settings_provider.h"
18 #include "chrome/browser/prefs/pref_service.h"
19 #include "chrome/test/base/testing_browser_process.h"
20 #include "chrome/test/base/testing_pref_service.h"
21 #include "content/test/test_browser_thread.h"
22 #include "testing/gtest/include/gtest/gtest.h"
23
24 namespace chromeos {
25
26 class UserManagerTest : public testing::Test {
27 public:
28 UserManagerTest()
29 : message_loop_(MessageLoop::TYPE_UI),
30 ui_thread_(content::BrowserThread::UI, &message_loop_),
31 file_thread_(content::BrowserThread::FILE, &message_loop_) {
32 }
33
34 virtual void SetUp() {
35 cros_settings_ = CrosSettings::Get();
36
37 // Replace the real DeviceSettingsProvider with a stub.
38 device_settings_provider_ =
39 cros_settings_->GetProvider(chromeos::kReportDeviceVersionInfo);
40 EXPECT_TRUE(device_settings_provider_ != NULL);
41 EXPECT_TRUE(
42 cros_settings_->RemoveSettingsProvider(device_settings_provider_));
43 cros_settings_->AddSettingsProvider(&stub_settings_provider_);
44
45 // Populate the stub DeviceSettingsProvider with valid values.
46 SetDeviceSettings(false, "");
47
48 // Register an in-memory local settings instance.
49 local_state_.reset(new TestingPrefService);
50 reinterpret_cast<TestingBrowserProcess*>(g_browser_process)
51 ->SetLocalState(local_state_.get());
52 UserManager::RegisterPrefs(local_state_.get());
53
54 user_manager_ = UserManager::Get();
55
56 // A stub user is automatically logged in by UserManager. Reset this.
57 ResetUserManagerLoggedInUser();
58 }
59
60 virtual void TearDown() {
61 // Unregister the in-memory local settings instance.
62 reinterpret_cast<TestingBrowserProcess*>(g_browser_process)
63 ->SetLocalState(0);
64
65 // Restore the real DeviceSettingsProvider.
66 EXPECT_TRUE(
67 cros_settings_->RemoveSettingsProvider(&stub_settings_provider_));
68 cros_settings_->AddSettingsProvider(device_settings_provider_);
69 }
70
71 scoped_ptr<bool>& GetUserManagerEphemeralUsersEnabled() {
72 return user_manager_->ephemeral_users_enabled_;
73 }
74
75 scoped_ptr<std::string>& GetUserManagerOwner() {
76 return user_manager_->owner_;
77 }
78
79 void ResetUserManagerLoggedInUser() {
80 // One does not simply log out of UserManager. The UserManager is normally
81 // torn down on logout along with the entire Chrome process. Since this is
82 // not possible in the test environment, UserManager's internal state is
83 // reset instead.
84 if (user_manager_->logged_in_user_ &&
85 user_manager_->current_user_is_ephemeral_)
86 delete user_manager_->logged_in_user_;
87 user_manager_->logged_in_user_ = NULL;
88 user_manager_->current_user_is_owner_ = false;
89 user_manager_->current_user_is_new_ = false;
90 user_manager_->current_user_is_ephemeral_ = false;
91 user_manager_->user_is_logged_in_ = false;
92 }
93
94 void SetDeviceSettings(bool ephemeral_users_enabled,
95 const std::string &owner) {
96 stub_settings_provider_.Set(kAccountsPrefEphemeralUsersEnabled,
97 base::FundamentalValue(ephemeral_users_enabled));
98 stub_settings_provider_.Set(kDeviceOwner, base::StringValue(owner));
Ivan Korotkov 2012/03/01 20:16:30 I'm not sure if clang is gonna like this. Previous
use bartfab instead 2012/03/05 18:07:32 Done.
99 }
100
101 void RetrieveTrustedDevicePolicies() {
102 user_manager_->RetrieveTrustedDevicePolicies();
103 }
104
105 protected:
106 UserManager* user_manager_;
107
108 MessageLoop message_loop_;
109 content::TestBrowserThread ui_thread_;
110 content::TestBrowserThread file_thread_;
111
112 CrosSettings* cros_settings_;
113 CrosSettingsProvider* device_settings_provider_;
114 StubCrosSettingsProvider stub_settings_provider_;
115 scoped_ptr<TestingPrefService> local_state_;
116 };
117
118 TEST_F(UserManagerTest, RetrieveTrustedDevicePolicies) {
119 GetUserManagerEphemeralUsersEnabled().reset(new bool(true));
120 GetUserManagerOwner().reset(NULL);
121
122 SetDeviceSettings(false, "owner@invalid.domain");
123 RetrieveTrustedDevicePolicies();
124
125 EXPECT_TRUE(GetUserManagerEphemeralUsersEnabled().get() != NULL);
126 EXPECT_FALSE(*GetUserManagerEphemeralUsersEnabled().get());
127 EXPECT_TRUE(GetUserManagerOwner().get() != NULL);
128 EXPECT_EQ(*GetUserManagerOwner().get(), "owner@invalid.domain");
129 }
130
131 TEST_F(UserManagerTest, RemoveAllExceptOwnerFromList) {
132 user_manager_->UserLoggedIn("owner@invalid.domain");
133 ResetUserManagerLoggedInUser();
134 user_manager_->UserLoggedIn("user0@invalid.domain");
135 ResetUserManagerLoggedInUser();
136 user_manager_->UserLoggedIn("user1@invalid.domain");
137 ResetUserManagerLoggedInUser();
138
139 const UserList* users = &user_manager_->GetUsers();
140 EXPECT_TRUE(users->size() == 3);
141 EXPECT_EQ((*users)[0]->email(), "user1@invalid.domain");
142 EXPECT_EQ((*users)[1]->email(), "user0@invalid.domain");
143 EXPECT_EQ((*users)[2]->email(), "owner@invalid.domain");
144
145 SetDeviceSettings(true, "owner@invalid.domain");
146 RetrieveTrustedDevicePolicies();
147
148 users = &user_manager_->GetUsers();
149 EXPECT_TRUE(users->size() == 1);
150 EXPECT_EQ((*users)[0]->email(), "owner@invalid.domain");
151 }
152
153 TEST_F(UserManagerTest, EphemeralUserLoggedIn) {
154 SetDeviceSettings(true, "owner@invalid.domain");
155 RetrieveTrustedDevicePolicies();
156
157 user_manager_->UserLoggedIn("owner@invalid.domain");
158 ResetUserManagerLoggedInUser();
159 user_manager_->UserLoggedIn("user0@invalid.domain");
160 ResetUserManagerLoggedInUser();
161
162 const UserList* users = &user_manager_->GetUsers();
163 EXPECT_TRUE(users->size() == 1);
164 EXPECT_EQ((*users)[0]->email(), "owner@invalid.domain");
165 }
166
167 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698