Chromium Code Reviews| 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 { | |
| 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 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 | |
| 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; | |
| 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 stub_settings_provider_.Set(kAccountsPrefEphemeralUsersEnabled, | |
| 97 base::FundamentalValue(ephemeral_users_enabled)); | |
| 98 stub_settings_provider_.Set(kDeviceOwner, base::StringValue(owner)); | |
|
Ivan Korotkov
2012/03/01 20:16:30
I'm not sure if clang is gonna like this. Previous
use bartfab instead
2012/03/05 18:07:32
Done.
| |
| 99 } | |
| 100 | |
| 101 void RetrieveTrustedDevicePolicies() { | |
| 102 user_manager_->RetrieveTrustedDevicePolicies(); | |
| 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 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 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 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 |