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

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: As discussed, removed initial image selection. 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/login/user_manager_impl.h"
18 #include "chrome/browser/chromeos/stub_cros_settings_provider.h"
19 #include "chrome/browser/prefs/pref_service.h"
20 #include "chrome/test/base/testing_browser_process.h"
21 #include "chrome/test/base/testing_pref_service.h"
22 #include "content/test/test_browser_thread.h"
23 #include "testing/gtest/include/gtest/gtest.h"
24
25 namespace chromeos {
26
27 class UserManagerTest : public testing::Test {
28 public:
29 UserManagerTest()
30 : message_loop_(MessageLoop::TYPE_UI),
31 ui_thread_(content::BrowserThread::UI, &message_loop_),
32 file_thread_(content::BrowserThread::FILE, &message_loop_) {
33 }
34
35 virtual void SetUp() {
36 cros_settings_ = CrosSettings::Get();
37
38 // Replace the real DeviceSettingsProvider with a stub.
39 device_settings_provider_ =
40 cros_settings_->GetProvider(chromeos::kReportDeviceVersionInfo);
41 EXPECT_TRUE(device_settings_provider_ != NULL);
42 EXPECT_TRUE(
43 cros_settings_->RemoveSettingsProvider(device_settings_provider_));
44 cros_settings_->AddSettingsProvider(&stub_settings_provider_);
45
46 // Populate the stub DeviceSettingsProvider with valid values.
47 SetDeviceSettings(false, "");
48
49 // Register an in-memory local settings instance.
50 local_state_.reset(new TestingPrefService);
51 reinterpret_cast<TestingBrowserProcess*>(g_browser_process)
52 ->SetLocalState(local_state_.get());
53 UserManager::RegisterPrefs(local_state_.get());
54
55 // A stub user is automatically logged in by UserManager. Reset this.
56 ResetUserManager();
57 }
58
59 virtual void TearDown() {
60 // Unregister the in-memory local settings instance.
61 reinterpret_cast<TestingBrowserProcess*>(g_browser_process)
62 ->SetLocalState(0);
63
64 // Restore the real DeviceSettingsProvider.
65 EXPECT_TRUE(
66 cros_settings_->RemoveSettingsProvider(&stub_settings_provider_));
67 cros_settings_->AddSettingsProvider(device_settings_provider_);
68 }
69
70 bool GetUserManagerEphemeralUsersEnabled() const {
71 return reinterpret_cast<UserManagerImpl*>(UserManager::Get())->
72 ephemeral_users_enabled_;
73 }
74
75 void SetUserManagerEphemeralUsersEnabled(bool ephemeral_users_enabled) {
76 reinterpret_cast<UserManagerImpl*>(UserManager::Get())->
77 ephemeral_users_enabled_ = ephemeral_users_enabled;
78 }
79
80 const std::string& GetUserManagerOwnerEmail() const {
81 return reinterpret_cast<UserManagerImpl*>(UserManager::Get())->
82 owner_email_;
83 }
84
85 void SetUserManagerOwnerEmail(const std::string& owner_email) {
86 reinterpret_cast<UserManagerImpl*>(UserManager::Get())->
87 owner_email_ = owner_email;
88 }
89
90 void ResetUserManager() {
91 UserManagerImpl* user_manager_impl(new UserManagerImpl());
92 user_manager_impl->logged_in_user_ = NULL;
93 UserManager::Set(user_manager_impl);
94 }
95
96 void SetDeviceSettings(bool ephemeral_users_enabled,
97 const std::string &owner) {
98 stub_settings_provider_.Set(kAccountsPrefEphemeralUsersEnabled,
99 base::FundamentalValue(ephemeral_users_enabled));
100 base::StringValue owner_value(owner);
101 stub_settings_provider_.Set(kDeviceOwner, owner_value);
102 }
103
104 void RetrieveTrustedDevicePolicies() {
105 reinterpret_cast<UserManagerImpl*>(UserManager::Get())->
106 RetrieveTrustedDevicePolicies();
107 }
108
109 protected:
110 MessageLoop message_loop_;
111 content::TestBrowserThread ui_thread_;
112 content::TestBrowserThread file_thread_;
113
114 CrosSettings* cros_settings_;
115 CrosSettingsProvider* device_settings_provider_;
116 StubCrosSettingsProvider stub_settings_provider_;
117 scoped_ptr<TestingPrefService> local_state_;
118 };
119
120 TEST_F(UserManagerTest, RetrieveTrustedDevicePolicies) {
121 SetUserManagerEphemeralUsersEnabled(true);
122 SetUserManagerOwnerEmail("");
123
124 SetDeviceSettings(false, "owner@invalid.domain");
125 RetrieveTrustedDevicePolicies();
126
127 EXPECT_FALSE(GetUserManagerEphemeralUsersEnabled());
128 EXPECT_EQ(GetUserManagerOwnerEmail(), "owner@invalid.domain");
129 }
130
131 TEST_F(UserManagerTest, RemoveAllExceptOwnerFromList) {
132 UserManager::Get()->UserLoggedIn("owner@invalid.domain");
133 ResetUserManager();
134 UserManager::Get()->UserLoggedIn("user0@invalid.domain");
135 ResetUserManager();
136 UserManager::Get()->UserLoggedIn("user1@invalid.domain");
137 ResetUserManager();
138
139 const UserList* users = &UserManager::Get()->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 = &UserManager::Get()->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 UserManager::Get()->UserLoggedIn("owner@invalid.domain");
158 ResetUserManager();
159 UserManager::Get()->UserLoggedIn("user0@invalid.domain");
160 ResetUserManager();
161
162 const UserList* users = &UserManager::Get()->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