OLD | NEW |
---|---|
(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 { | |
Ivan Korotkov
2012/03/01 13:37:50
Looks like this ought to be an InProcessBrowserTes
use bartfab instead
2012/03/01 18:33:43
It does not need the complete browser. I can chang
Ivan Korotkov
2012/03/01 20:16:30
Ok, let's leave it a unittest.
| |
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 // | |
Ivan Korotkov
2012/03/01 13:37:50
Text missing?
use bartfab instead
2012/03/01 18:33:43
Done.
| |
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 | |
Ivan Korotkov
2012/03/01 13:37:50
This looks very fragile. In case of InProcessBrows
use bartfab instead
2012/03/01 18:33:43
It would also be sufficient to reset user_is_logge
Ivan Korotkov
2012/03/01 20:16:30
Hmmmm ok. What about adding a method UserManager::
use bartfab instead
2012/03/05 18:07:32
Done.
| |
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; | |
Ivan Korotkov
2012/03/01 20:16:30
Safer to set it to stub_user_ as done initially.
use bartfab instead
2012/03/05 18:07:32
I set it to NULL intentionally. This is the value
| |
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 scoped_ptr<base::Value> ephemeral_users_enabled_value( | |
97 base::Value::CreateBooleanValue(ephemeral_users_enabled)); | |
98 scoped_ptr<base::Value> owner_value( | |
Ivan Korotkov
2012/03/01 13:37:50
You don't need heep-allocated values here.
use bartfab instead
2012/03/01 18:33:43
Done.
| |
99 base::Value::CreateStringValue(owner)); | |
100 stub_settings_provider_.Set(kAccountsPrefEphemeralUsersEnabled, | |
101 *ephemeral_users_enabled_value.get()); | |
102 stub_settings_provider_.Set(kDeviceOwner, *owner_value.get()); | |
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 user_manager_->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 user_manager_->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 user_manager_->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 | |
OLD | NEW |