| 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 |