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

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 LogOutUser();
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 bool GetUserManagerEphemeralUsersEnabled() const {
72 return user_manager_->ephemeral_users_enabled_;
73 }
74
75 void SetUserManagerEphemeralUsersEnabled(bool ephemeral_users_enabled) {
76 user_manager_->ephemeral_users_enabled_ = ephemeral_users_enabled;
77 }
78
79 const std::string& GetUserManagerOwnerEmail() const {
80 return user_manager_->owner_email_;
81 }
82
83 void SetUserManagerOwnerEmail(const std::string& owner_email) {
84 user_manager_->owner_email_ = owner_email;
85 }
86
87 void LogOutUser() {
88 user_manager_->LogoutForTest();
89 }
90
91 void SetDeviceSettings(bool ephemeral_users_enabled,
92 const std::string &owner) {
93 stub_settings_provider_.Set(kAccountsPrefEphemeralUsersEnabled,
94 base::FundamentalValue(ephemeral_users_enabled));
95 base::StringValue owner_value(owner);
96 stub_settings_provider_.Set(kDeviceOwner, owner_value);
97 }
98
99 void RetrieveTrustedDevicePolicies() {
100 user_manager_->RetrieveTrustedDevicePolicies();
101 }
102
103 protected:
104 UserManager* user_manager_;
105
106 MessageLoop message_loop_;
107 content::TestBrowserThread ui_thread_;
108 content::TestBrowserThread file_thread_;
109
110 CrosSettings* cros_settings_;
111 CrosSettingsProvider* device_settings_provider_;
112 StubCrosSettingsProvider stub_settings_provider_;
113 scoped_ptr<TestingPrefService> local_state_;
114 };
115
116 TEST_F(UserManagerTest, RetrieveTrustedDevicePolicies) {
117 SetUserManagerEphemeralUsersEnabled(true);
118 SetUserManagerOwnerEmail("");
119
120 SetDeviceSettings(false, "owner@invalid.domain");
121 RetrieveTrustedDevicePolicies();
122
123 EXPECT_FALSE(GetUserManagerEphemeralUsersEnabled());
124 EXPECT_EQ(GetUserManagerOwnerEmail(), "owner@invalid.domain");
125 }
126
127 TEST_F(UserManagerTest, RemoveAllExceptOwnerFromList) {
128 user_manager_->UserLoggedIn("owner@invalid.domain");
129 LogOutUser();
130 user_manager_->UserLoggedIn("user0@invalid.domain");
131 LogOutUser();
132 user_manager_->UserLoggedIn("user1@invalid.domain");
133 LogOutUser();
134
135 const UserList* users = &user_manager_->GetUsers();
136 EXPECT_TRUE(users->size() == 3);
137 EXPECT_EQ((*users)[0]->email(), "user1@invalid.domain");
138 EXPECT_EQ((*users)[1]->email(), "user0@invalid.domain");
139 EXPECT_EQ((*users)[2]->email(), "owner@invalid.domain");
140
141 SetDeviceSettings(true, "owner@invalid.domain");
142 RetrieveTrustedDevicePolicies();
143
144 users = &user_manager_->GetUsers();
145 EXPECT_TRUE(users->size() == 1);
146 EXPECT_EQ((*users)[0]->email(), "owner@invalid.domain");
147 }
148
149 TEST_F(UserManagerTest, EphemeralUserLoggedIn) {
150 SetDeviceSettings(true, "owner@invalid.domain");
151 RetrieveTrustedDevicePolicies();
152
153 user_manager_->UserLoggedIn("owner@invalid.domain");
154 LogOutUser();
155 user_manager_->UserLoggedIn("user0@invalid.domain");
156 LogOutUser();
157
158 const UserList* users = &user_manager_->GetUsers();
159 EXPECT_TRUE(users->size() == 1);
160 EXPECT_EQ((*users)[0]->email(), "owner@invalid.domain");
161 }
162
163 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698