OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <cstdlib> | 5 #include <cstdlib> |
6 #include <cstring> | 6 #include <cstring> |
7 | 7 |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
(...skipping 29 matching lines...) Expand all Loading... |
40 | 40 |
41 // Replace the real DeviceSettingsProvider with a stub. | 41 // Replace the real DeviceSettingsProvider with a stub. |
42 device_settings_provider_ = | 42 device_settings_provider_ = |
43 cros_settings_->GetProvider(chromeos::kReportDeviceVersionInfo); | 43 cros_settings_->GetProvider(chromeos::kReportDeviceVersionInfo); |
44 EXPECT_TRUE(device_settings_provider_); | 44 EXPECT_TRUE(device_settings_provider_); |
45 EXPECT_TRUE( | 45 EXPECT_TRUE( |
46 cros_settings_->RemoveSettingsProvider(device_settings_provider_)); | 46 cros_settings_->RemoveSettingsProvider(device_settings_provider_)); |
47 cros_settings_->AddSettingsProvider(&stub_settings_provider_); | 47 cros_settings_->AddSettingsProvider(&stub_settings_provider_); |
48 | 48 |
49 // Populate the stub DeviceSettingsProvider with valid values. | 49 // Populate the stub DeviceSettingsProvider with valid values. |
50 SetDeviceSettings(false, ""); | 50 SetDeviceSettings(false, "", false); |
51 | 51 |
52 // Register an in-memory local settings instance. | 52 // Register an in-memory local settings instance. |
53 local_state_.reset(new TestingPrefServiceSimple); | 53 local_state_.reset(new TestingPrefServiceSimple); |
54 reinterpret_cast<TestingBrowserProcess*>(g_browser_process) | 54 TestingBrowserProcess::GetGlobal()->SetLocalState(local_state_.get()); |
55 ->SetLocalState(local_state_.get()); | |
56 UserManager::RegisterPrefs(local_state_->registry()); | 55 UserManager::RegisterPrefs(local_state_->registry()); |
57 // Wallpaper manager and user image managers prefs will be accessed by the | 56 // Wallpaper manager and user image managers prefs will be accessed by the |
58 // unit-test as well. | 57 // unit-test as well. |
59 UserImageManager::RegisterPrefs(local_state_->registry()); | 58 UserImageManager::RegisterPrefs(local_state_->registry()); |
60 WallpaperManager::RegisterPrefs(local_state_->registry()); | 59 WallpaperManager::RegisterPrefs(local_state_->registry()); |
61 | 60 |
62 ResetUserManager(); | 61 ResetUserManager(); |
63 } | 62 } |
64 | 63 |
65 virtual void TearDown() OVERRIDE { | 64 virtual void TearDown() OVERRIDE { |
66 // Unregister the in-memory local settings instance. | 65 // Unregister the in-memory local settings instance. |
67 reinterpret_cast<TestingBrowserProcess*>(g_browser_process) | 66 TestingBrowserProcess::GetGlobal()->SetLocalState(0); |
68 ->SetLocalState(0); | |
69 | 67 |
70 // Restore the real DeviceSettingsProvider. | 68 // Restore the real DeviceSettingsProvider. |
71 EXPECT_TRUE( | 69 EXPECT_TRUE( |
72 cros_settings_->RemoveSettingsProvider(&stub_settings_provider_)); | 70 cros_settings_->RemoveSettingsProvider(&stub_settings_provider_)); |
73 cros_settings_->AddSettingsProvider(device_settings_provider_); | 71 cros_settings_->AddSettingsProvider(device_settings_provider_); |
74 | 72 |
75 // Shut down the DeviceSettingsService. | 73 // Shut down the DeviceSettingsService. |
76 DeviceSettingsService::Get()->UnsetSessionManager(); | 74 DeviceSettingsService::Get()->UnsetSessionManager(); |
77 | 75 |
78 base::RunLoop().RunUntilIdle(); | 76 base::RunLoop().RunUntilIdle(); |
79 } | 77 } |
80 | 78 |
| 79 UserManagerImpl* GetUserManagerImpl() const { |
| 80 return static_cast<UserManagerImpl*>(UserManager::Get()); |
| 81 } |
| 82 |
81 bool GetUserManagerEphemeralUsersEnabled() const { | 83 bool GetUserManagerEphemeralUsersEnabled() const { |
82 return reinterpret_cast<UserManagerImpl*>(UserManager::Get())-> | 84 return GetUserManagerImpl()->ephemeral_users_enabled_; |
83 ephemeral_users_enabled_; | 85 } |
| 86 |
| 87 bool GetUserManagerLocallyManagedUsersEnabledByPolicy() const { |
| 88 return GetUserManagerImpl()->locally_managed_users_enabled_by_policy_; |
84 } | 89 } |
85 | 90 |
86 void SetUserManagerEphemeralUsersEnabled(bool ephemeral_users_enabled) { | 91 void SetUserManagerEphemeralUsersEnabled(bool ephemeral_users_enabled) { |
87 reinterpret_cast<UserManagerImpl*>(UserManager::Get())-> | 92 GetUserManagerImpl()->ephemeral_users_enabled_ = ephemeral_users_enabled; |
88 ephemeral_users_enabled_ = ephemeral_users_enabled; | |
89 } | 93 } |
90 | 94 |
91 const std::string& GetUserManagerOwnerEmail() const { | 95 const std::string& GetUserManagerOwnerEmail() const { |
92 return reinterpret_cast<UserManagerImpl*>(UserManager::Get())-> | 96 return GetUserManagerImpl()-> owner_email_; |
93 owner_email_; | |
94 } | 97 } |
95 | 98 |
96 void SetUserManagerOwnerEmail(const std::string& owner_email) { | 99 void SetUserManagerOwnerEmail(const std::string& owner_email) { |
97 reinterpret_cast<UserManagerImpl*>(UserManager::Get())-> | 100 GetUserManagerImpl()->owner_email_ = owner_email; |
98 owner_email_ = owner_email; | |
99 } | 101 } |
100 | 102 |
101 void ResetUserManager() { | 103 void ResetUserManager() { |
102 // Reset the UserManager singleton. | 104 // Reset the UserManager singleton. |
103 user_manager_enabler_.reset(); | 105 user_manager_enabler_.reset(); |
104 // Initialize the UserManager singleton to a fresh UserManagerImpl instance. | 106 // Initialize the UserManager singleton to a fresh UserManagerImpl instance. |
105 user_manager_enabler_.reset( | 107 user_manager_enabler_.reset( |
106 new ScopedUserManagerEnabler(new UserManagerImpl)); | 108 new ScopedUserManagerEnabler(new UserManagerImpl)); |
107 } | 109 } |
108 | 110 |
109 void SetDeviceSettings(bool ephemeral_users_enabled, | 111 void SetDeviceSettings(bool ephemeral_users_enabled, |
110 const std::string &owner) { | 112 const std::string &owner, |
| 113 bool locally_managed_users_enabled) { |
111 base::FundamentalValue | 114 base::FundamentalValue |
112 ephemeral_users_enabled_value(ephemeral_users_enabled); | 115 ephemeral_users_enabled_value(ephemeral_users_enabled); |
113 stub_settings_provider_.Set(kAccountsPrefEphemeralUsersEnabled, | 116 stub_settings_provider_.Set(kAccountsPrefEphemeralUsersEnabled, |
114 ephemeral_users_enabled_value); | 117 ephemeral_users_enabled_value); |
115 base::StringValue owner_value(owner); | 118 base::StringValue owner_value(owner); |
116 stub_settings_provider_.Set(kDeviceOwner, owner_value); | 119 stub_settings_provider_.Set(kDeviceOwner, owner_value); |
| 120 stub_settings_provider_.Set(kAccountsPrefSupervisedUsersEnabled, |
| 121 base::FundamentalValue(locally_managed_users_enabled)); |
117 } | 122 } |
118 | 123 |
119 void RetrieveTrustedDevicePolicies() { | 124 void RetrieveTrustedDevicePolicies() { |
120 reinterpret_cast<UserManagerImpl*>(UserManager::Get())-> | 125 GetUserManagerImpl()->RetrieveTrustedDevicePolicies(); |
121 RetrieveTrustedDevicePolicies(); | |
122 } | 126 } |
123 | 127 |
124 protected: | 128 protected: |
125 base::MessageLoop message_loop_; | 129 base::MessageLoop message_loop_; |
126 content::TestBrowserThread ui_thread_; | 130 content::TestBrowserThread ui_thread_; |
127 content::TestBrowserThread file_thread_; | 131 content::TestBrowserThread file_thread_; |
128 | 132 |
129 CrosSettings* cros_settings_; | 133 CrosSettings* cros_settings_; |
130 CrosSettingsProvider* device_settings_provider_; | 134 CrosSettingsProvider* device_settings_provider_; |
131 StubCrosSettingsProvider stub_settings_provider_; | 135 StubCrosSettingsProvider stub_settings_provider_; |
132 scoped_ptr<TestingPrefServiceSimple> local_state_; | 136 scoped_ptr<TestingPrefServiceSimple> local_state_; |
133 | 137 |
134 ScopedTestDeviceSettingsService test_device_settings_service_; | 138 ScopedTestDeviceSettingsService test_device_settings_service_; |
135 ScopedStubCrosEnabler stub_cros_enabler_; | 139 ScopedStubCrosEnabler stub_cros_enabler_; |
136 ScopedTestCrosSettings test_cros_settings_; | 140 ScopedTestCrosSettings test_cros_settings_; |
137 | 141 |
138 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_; | 142 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_; |
139 }; | 143 }; |
140 | 144 |
141 TEST_F(UserManagerTest, RetrieveTrustedDevicePolicies) { | 145 TEST_F(UserManagerTest, RetrieveTrustedDevicePolicies) { |
142 SetUserManagerEphemeralUsersEnabled(true); | 146 SetUserManagerEphemeralUsersEnabled(true); |
143 SetUserManagerOwnerEmail(""); | 147 SetUserManagerOwnerEmail(""); |
144 | 148 |
145 SetDeviceSettings(false, "owner@invalid.domain"); | 149 SetDeviceSettings(false, "owner@invalid.domain", false); |
146 RetrieveTrustedDevicePolicies(); | 150 RetrieveTrustedDevicePolicies(); |
147 | 151 |
148 EXPECT_FALSE(GetUserManagerEphemeralUsersEnabled()); | 152 EXPECT_FALSE(GetUserManagerEphemeralUsersEnabled()); |
149 EXPECT_EQ(GetUserManagerOwnerEmail(), "owner@invalid.domain"); | 153 EXPECT_EQ(GetUserManagerOwnerEmail(), "owner@invalid.domain"); |
150 } | 154 } |
151 | 155 |
152 TEST_F(UserManagerTest, RemoveAllExceptOwnerFromList) { | 156 TEST_F(UserManagerTest, RemoveAllExceptOwnerFromList) { |
153 UserManager::Get()->UserLoggedIn( | 157 UserManager::Get()->UserLoggedIn( |
154 "owner@invalid.domain", "owner@invalid.domain", false); | 158 "owner@invalid.domain", "owner@invalid.domain", false); |
155 ResetUserManager(); | 159 ResetUserManager(); |
156 UserManager::Get()->UserLoggedIn( | 160 UserManager::Get()->UserLoggedIn( |
157 "user0@invalid.domain", "owner@invalid.domain", false); | 161 "user0@invalid.domain", "owner@invalid.domain", false); |
158 ResetUserManager(); | 162 ResetUserManager(); |
159 UserManager::Get()->UserLoggedIn( | 163 UserManager::Get()->UserLoggedIn( |
160 "user1@invalid.domain", "owner@invalid.domain", false); | 164 "user1@invalid.domain", "owner@invalid.domain", false); |
161 ResetUserManager(); | 165 ResetUserManager(); |
162 | 166 |
163 const UserList* users = &UserManager::Get()->GetUsers(); | 167 const UserList* users = &UserManager::Get()->GetUsers(); |
164 ASSERT_EQ(3U, users->size()); | 168 ASSERT_EQ(3U, users->size()); |
165 EXPECT_EQ((*users)[0]->email(), "user1@invalid.domain"); | 169 EXPECT_EQ((*users)[0]->email(), "user1@invalid.domain"); |
166 EXPECT_EQ((*users)[1]->email(), "user0@invalid.domain"); | 170 EXPECT_EQ((*users)[1]->email(), "user0@invalid.domain"); |
167 EXPECT_EQ((*users)[2]->email(), "owner@invalid.domain"); | 171 EXPECT_EQ((*users)[2]->email(), "owner@invalid.domain"); |
168 | 172 |
169 SetDeviceSettings(true, "owner@invalid.domain"); | 173 SetDeviceSettings(true, "owner@invalid.domain", false); |
170 RetrieveTrustedDevicePolicies(); | 174 RetrieveTrustedDevicePolicies(); |
171 | 175 |
172 users = &UserManager::Get()->GetUsers(); | 176 users = &UserManager::Get()->GetUsers(); |
173 EXPECT_EQ(1U, users->size()); | 177 EXPECT_EQ(1U, users->size()); |
174 EXPECT_EQ((*users)[0]->email(), "owner@invalid.domain"); | 178 EXPECT_EQ((*users)[0]->email(), "owner@invalid.domain"); |
175 } | 179 } |
176 | 180 |
177 TEST_F(UserManagerTest, RegularUserLoggedInAsEphemeral) { | 181 TEST_F(UserManagerTest, RegularUserLoggedInAsEphemeral) { |
178 SetDeviceSettings(true, "owner@invalid.domain"); | 182 SetDeviceSettings(true, "owner@invalid.domain", false); |
179 RetrieveTrustedDevicePolicies(); | 183 RetrieveTrustedDevicePolicies(); |
180 | 184 |
181 UserManager::Get()->UserLoggedIn( | 185 UserManager::Get()->UserLoggedIn( |
182 "owner@invalid.domain", "user0@invalid.domain", false); | 186 "owner@invalid.domain", "user0@invalid.domain", false); |
183 ResetUserManager(); | 187 ResetUserManager(); |
184 UserManager::Get()->UserLoggedIn( | 188 UserManager::Get()->UserLoggedIn( |
185 "user0@invalid.domain", "user0@invalid.domain", false); | 189 "user0@invalid.domain", "user0@invalid.domain", false); |
186 ResetUserManager(); | 190 ResetUserManager(); |
187 | 191 |
188 const UserList* users = &UserManager::Get()->GetUsers(); | 192 const UserList* users = &UserManager::Get()->GetUsers(); |
189 EXPECT_EQ(1U, users->size()); | 193 EXPECT_EQ(1U, users->size()); |
190 EXPECT_EQ((*users)[0]->email(), "owner@invalid.domain"); | 194 EXPECT_EQ((*users)[0]->email(), "owner@invalid.domain"); |
191 } | 195 } |
192 | 196 |
| 197 TEST_F(UserManagerTest, DisablingLMUByDeviceSettings) { |
| 198 SetDeviceSettings(false, "owner@invalid.domain", false); |
| 199 RetrieveTrustedDevicePolicies(); |
| 200 EXPECT_EQ(GetUserManagerLocallyManagedUsersEnabledByPolicy(), false); |
| 201 SetDeviceSettings(false, "owner@invalid.domain", true); |
| 202 RetrieveTrustedDevicePolicies(); |
| 203 EXPECT_EQ(GetUserManagerLocallyManagedUsersEnabledByPolicy(), true); |
| 204 } |
| 205 |
193 } // namespace chromeos | 206 } // namespace chromeos |
OLD | NEW |