| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <queue> | 5 #include <queue> |
| 6 #include <utility> | 6 #include <utility> |
| 7 | 7 |
| 8 #include "base/macros.h" | 8 #include "base/macros.h" |
| 9 #include "base/memory/linked_ptr.h" | 9 #include "base/memory/linked_ptr.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| 11 #include "base/run_loop.h" | 11 #include "base/run_loop.h" |
| 12 #include "base/test/scoped_path_override.h" | 12 #include "base/test/scoped_path_override.h" |
| 13 #include "base/values.h" | 13 #include "base/values.h" |
| 14 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h" | 14 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h" |
| 15 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_fact
ory.h" | 15 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_fact
ory.h" |
| 16 #include "chrome/browser/chromeos/settings/device_settings_provider.h" | 16 #include "chrome/browser/chromeos/settings/device_settings_provider.h" |
| 17 #include "chrome/browser/chromeos/settings/device_settings_test_helper.h" | 17 #include "chrome/browser/chromeos/settings/device_settings_test_helper.h" |
| 18 #include "chrome/common/chrome_paths.h" | 18 #include "chrome/common/chrome_paths.h" |
| 19 #include "chrome/test/base/scoped_testing_local_state.h" | 19 #include "chrome/test/base/scoped_testing_local_state.h" |
| 20 #include "chrome/test/base/testing_browser_process.h" | 20 #include "chrome/test/base/testing_browser_process.h" |
| 21 #include "chrome/test/base/testing_profile.h" | 21 #include "chrome/test/base/testing_profile.h" |
| 22 #include "chromeos/settings/cros_settings_names.h" | 22 #include "chromeos/settings/cros_settings_names.h" |
| 23 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
| 24 | 24 |
| 25 namespace em = enterprise_management; |
| 26 |
| 25 namespace chromeos { | 27 namespace chromeos { |
| 26 | 28 |
| 27 namespace { | 29 namespace { |
| 28 | 30 |
| 29 void OnPrefChanged(const std::string& /* setting */) { | 31 void OnPrefChanged(const std::string& /* setting */) { |
| 30 } | 32 } |
| 31 | 33 |
| 32 class PrefsChecker : public ownership::OwnerSettingsService::Observer { | 34 class PrefsChecker : public ownership::OwnerSettingsService::Observer { |
| 33 public: | 35 public: |
| 34 PrefsChecker(OwnerSettingsServiceChromeOS* service, | 36 PrefsChecker(OwnerSettingsServiceChromeOS* service, |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 DISALLOW_COPY_AND_ASSIGN(PrefsChecker); | 78 DISALLOW_COPY_AND_ASSIGN(PrefsChecker); |
| 77 }; | 79 }; |
| 78 | 80 |
| 79 } // namespace | 81 } // namespace |
| 80 | 82 |
| 81 class OwnerSettingsServiceChromeOSTest : public DeviceSettingsTestBase { | 83 class OwnerSettingsServiceChromeOSTest : public DeviceSettingsTestBase { |
| 82 public: | 84 public: |
| 83 OwnerSettingsServiceChromeOSTest() | 85 OwnerSettingsServiceChromeOSTest() |
| 84 : service_(nullptr), | 86 : service_(nullptr), |
| 85 local_state_(TestingBrowserProcess::GetGlobal()), | 87 local_state_(TestingBrowserProcess::GetGlobal()), |
| 86 user_data_dir_override_(chrome::DIR_USER_DATA) {} | 88 user_data_dir_override_(chrome::DIR_USER_DATA), |
| 89 management_settings_set_(false) {} |
| 87 | 90 |
| 88 virtual void SetUp() override { | 91 virtual void SetUp() override { |
| 89 DeviceSettingsTestBase::SetUp(); | 92 DeviceSettingsTestBase::SetUp(); |
| 90 provider_.reset(new DeviceSettingsProvider(base::Bind(&OnPrefChanged), | 93 provider_.reset(new DeviceSettingsProvider(base::Bind(&OnPrefChanged), |
| 91 &device_settings_service_)); | 94 &device_settings_service_)); |
| 92 owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey()); | 95 owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey()); |
| 93 InitOwner(device_policy_.policy_data().username(), true); | 96 InitOwner(device_policy_.policy_data().username(), true); |
| 94 FlushDeviceSettings(); | 97 FlushDeviceSettings(); |
| 95 | 98 |
| 96 service_ = OwnerSettingsServiceChromeOSFactory::GetForBrowserContext( | 99 service_ = OwnerSettingsServiceChromeOSFactory::GetForBrowserContext( |
| 97 profile_.get()); | 100 profile_.get()); |
| 98 ASSERT_TRUE(service_); | 101 ASSERT_TRUE(service_); |
| 99 ASSERT_TRUE(service_->IsOwner()); | 102 ASSERT_TRUE(service_->IsOwner()); |
| 100 } | 103 } |
| 101 | 104 |
| 102 virtual void TearDown() override { DeviceSettingsTestBase::TearDown(); } | 105 virtual void TearDown() override { DeviceSettingsTestBase::TearDown(); } |
| 103 | 106 |
| 104 void TestSingleSet(OwnerSettingsServiceChromeOS* service, | 107 void TestSingleSet(OwnerSettingsServiceChromeOS* service, |
| 105 const std::string& setting, | 108 const std::string& setting, |
| 106 const base::Value& in_value) { | 109 const base::Value& in_value) { |
| 107 PrefsChecker checker(service, provider_.get()); | 110 PrefsChecker checker(service, provider_.get()); |
| 108 checker.Set(setting, in_value); | 111 checker.Set(setting, in_value); |
| 109 FlushDeviceSettings(); | 112 FlushDeviceSettings(); |
| 110 checker.Wait(); | 113 checker.Wait(); |
| 111 } | 114 } |
| 112 | 115 |
| 116 void OnManagementSettingsSet(bool success) { |
| 117 management_settings_set_ = success; |
| 118 } |
| 119 |
| 113 OwnerSettingsServiceChromeOS* service_; | 120 OwnerSettingsServiceChromeOS* service_; |
| 114 ScopedTestingLocalState local_state_; | 121 ScopedTestingLocalState local_state_; |
| 115 scoped_ptr<DeviceSettingsProvider> provider_; | 122 scoped_ptr<DeviceSettingsProvider> provider_; |
| 116 base::ScopedPathOverride user_data_dir_override_; | 123 base::ScopedPathOverride user_data_dir_override_; |
| 124 bool management_settings_set_; |
| 117 | 125 |
| 118 private: | 126 private: |
| 119 DISALLOW_COPY_AND_ASSIGN(OwnerSettingsServiceChromeOSTest); | 127 DISALLOW_COPY_AND_ASSIGN(OwnerSettingsServiceChromeOSTest); |
| 120 }; | 128 }; |
| 121 | 129 |
| 122 TEST_F(OwnerSettingsServiceChromeOSTest, SingleSetTest) { | 130 TEST_F(OwnerSettingsServiceChromeOSTest, SingleSetTest) { |
| 123 TestSingleSet(service_, kReleaseChannel, base::StringValue("dev-channel")); | 131 TestSingleSet(service_, kReleaseChannel, base::StringValue("dev-channel")); |
| 124 TestSingleSet(service_, kReleaseChannel, base::StringValue("beta-channel")); | 132 TestSingleSet(service_, kReleaseChannel, base::StringValue("beta-channel")); |
| 125 TestSingleSet(service_, kReleaseChannel, base::StringValue("stable-channel")); | 133 TestSingleSet(service_, kReleaseChannel, base::StringValue("stable-channel")); |
| 126 } | 134 } |
| (...skipping 24 matching lines...) Expand all Loading... |
| 151 checker.Set(kReleaseChannel, base::StringValue("stable-channel")); | 159 checker.Set(kReleaseChannel, base::StringValue("stable-channel")); |
| 152 FlushDeviceSettings(); | 160 FlushDeviceSettings(); |
| 153 checker.Wait(); | 161 checker.Wait(); |
| 154 | 162 |
| 155 // Check that DeviceSettingsService's policy isn't updated. | 163 // Check that DeviceSettingsService's policy isn't updated. |
| 156 ASSERT_EQ(current_channel, device_settings_service_.device_settings() | 164 ASSERT_EQ(current_channel, device_settings_service_.device_settings() |
| 157 ->release_channel() | 165 ->release_channel() |
| 158 .release_channel()); | 166 .release_channel()); |
| 159 } | 167 } |
| 160 | 168 |
| 169 TEST_F(OwnerSettingsServiceChromeOSTest, SetManagementSettingsModeTransition) { |
| 170 ReloadDeviceSettings(); |
| 171 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS, |
| 172 device_settings_service_.status()); |
| 173 |
| 174 owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey()); |
| 175 InitOwner(device_policy_.policy_data().username(), true); |
| 176 FlushDeviceSettings(); |
| 177 |
| 178 // The initial management mode should be LOCAL_OWNER. |
| 179 EXPECT_EQ(em::PolicyData::LOCAL_OWNER, |
| 180 device_settings_service_.policy_data()->management_mode()); |
| 181 |
| 182 OwnerSettingsServiceChromeOS::ManagementSettingsSetRequest |
| 183 management_settings; |
| 184 management_settings.management_mode = em::PolicyData::CONSUMER_MANAGED; |
| 185 management_settings.request_token = "fake_request_token"; |
| 186 management_settings.device_id = "fake_device_id"; |
| 187 management_settings.callback = |
| 188 base::Bind(&OwnerSettingsServiceChromeOSTest::OnManagementSettingsSet, |
| 189 base::Unretained(this)); |
| 190 |
| 191 // LOCAL_OWNER -> CONSUMER_MANAGED: Okay. |
| 192 service_->SetManagementSettings(management_settings); |
| 193 FlushDeviceSettings(); |
| 194 |
| 195 EXPECT_TRUE(management_settings_set_); |
| 196 EXPECT_EQ(em::PolicyData::CONSUMER_MANAGED, |
| 197 device_settings_service_.policy_data()->management_mode()); |
| 198 |
| 199 // CONSUMER_MANAGED -> ENTERPRISE_MANAGED: Invalid. |
| 200 management_settings.management_mode = em::PolicyData::ENTERPRISE_MANAGED; |
| 201 service_->SetManagementSettings(management_settings); |
| 202 FlushDeviceSettings(); |
| 203 |
| 204 EXPECT_FALSE(management_settings_set_); |
| 205 EXPECT_EQ(em::PolicyData::CONSUMER_MANAGED, |
| 206 device_settings_service_.policy_data()->management_mode()); |
| 207 |
| 208 // CONSUMER_MANAGED -> LOCAL_OWNER: Okay. |
| 209 management_settings.management_mode = em::PolicyData::LOCAL_OWNER; |
| 210 service_->SetManagementSettings(management_settings); |
| 211 FlushDeviceSettings(); |
| 212 |
| 213 EXPECT_TRUE(management_settings_set_); |
| 214 EXPECT_EQ(em::PolicyData::LOCAL_OWNER, |
| 215 device_settings_service_.policy_data()->management_mode()); |
| 216 |
| 217 // LOCAL_OWNER -> ENTERPRISE_MANAGED: Invalid. |
| 218 management_settings.management_mode = em::PolicyData::ENTERPRISE_MANAGED; |
| 219 service_->SetManagementSettings(management_settings); |
| 220 FlushDeviceSettings(); |
| 221 |
| 222 EXPECT_FALSE(management_settings_set_); |
| 223 EXPECT_EQ(em::PolicyData::LOCAL_OWNER, |
| 224 device_settings_service_.policy_data()->management_mode()); |
| 225 |
| 226 // Inject a policy data with management mode set to ENTERPRISE_MANAGED. |
| 227 device_policy_.policy_data().set_management_mode( |
| 228 em::PolicyData::ENTERPRISE_MANAGED); |
| 229 device_policy_.Build(); |
| 230 device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob()); |
| 231 ReloadDeviceSettings(); |
| 232 EXPECT_EQ(em::PolicyData::ENTERPRISE_MANAGED, |
| 233 device_settings_service_.policy_data()->management_mode()); |
| 234 |
| 235 // ENTERPRISE_MANAGED -> LOCAL_OWNER: Invalid. |
| 236 management_settings.management_mode = em::PolicyData::LOCAL_OWNER; |
| 237 service_->SetManagementSettings(management_settings); |
| 238 FlushDeviceSettings(); |
| 239 |
| 240 EXPECT_FALSE(management_settings_set_); |
| 241 EXPECT_EQ(em::PolicyData::ENTERPRISE_MANAGED, |
| 242 device_settings_service_.policy_data()->management_mode()); |
| 243 |
| 244 // ENTERPRISE_MANAGED -> CONSUMER_MANAGED: Invalid. |
| 245 management_settings.management_mode = em::PolicyData::CONSUMER_MANAGED; |
| 246 service_->SetManagementSettings(management_settings); |
| 247 FlushDeviceSettings(); |
| 248 |
| 249 EXPECT_FALSE(management_settings_set_); |
| 250 EXPECT_EQ(em::PolicyData::ENTERPRISE_MANAGED, |
| 251 device_settings_service_.policy_data()->management_mode()); |
| 252 } |
| 253 |
| 254 TEST_F(OwnerSettingsServiceChromeOSTest, SetManagementSettingsSuccess) { |
| 255 ReloadDeviceSettings(); |
| 256 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS, |
| 257 device_settings_service_.status()); |
| 258 |
| 259 owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey()); |
| 260 InitOwner(device_policy_.policy_data().username(), true); |
| 261 FlushDeviceSettings(); |
| 262 |
| 263 OwnerSettingsServiceChromeOS::ManagementSettingsSetRequest request; |
| 264 request.management_mode = em::PolicyData::CONSUMER_MANAGED; |
| 265 request.request_token = "fake_request_token"; |
| 266 request.device_id = "fake_device_id"; |
| 267 request.callback = |
| 268 base::Bind(&OwnerSettingsServiceChromeOSTest::OnManagementSettingsSet, |
| 269 base::Unretained(this)); |
| 270 service_->SetManagementSettings(request); |
| 271 FlushDeviceSettings(); |
| 272 |
| 273 EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS, |
| 274 device_settings_service_.status()); |
| 275 ASSERT_TRUE(device_settings_service_.device_settings()); |
| 276 |
| 277 // Check that the loaded policy_data contains the expected values. |
| 278 const em::PolicyData* policy_data = device_settings_service_.policy_data(); |
| 279 EXPECT_EQ(policy::dm_protocol::kChromeDevicePolicyType, |
| 280 policy_data->policy_type()); |
| 281 EXPECT_EQ(device_settings_service_.GetUsername(), |
| 282 policy_data->username()); |
| 283 EXPECT_EQ(em::PolicyData::CONSUMER_MANAGED, policy_data->management_mode()); |
| 284 EXPECT_EQ("fake_request_token", policy_data->request_token()); |
| 285 EXPECT_EQ("fake_device_id", policy_data->device_id()); |
| 286 } |
| 287 |
| 161 class OwnerSettingsServiceChromeOSNoOwnerTest | 288 class OwnerSettingsServiceChromeOSNoOwnerTest |
| 162 : public OwnerSettingsServiceChromeOSTest { | 289 : public OwnerSettingsServiceChromeOSTest { |
| 163 public: | 290 public: |
| 164 OwnerSettingsServiceChromeOSNoOwnerTest() {} | 291 OwnerSettingsServiceChromeOSNoOwnerTest() {} |
| 165 virtual ~OwnerSettingsServiceChromeOSNoOwnerTest() {} | 292 virtual ~OwnerSettingsServiceChromeOSNoOwnerTest() {} |
| 166 | 293 |
| 167 virtual void SetUp() override { | 294 virtual void SetUp() override { |
| 168 DeviceSettingsTestBase::SetUp(); | 295 DeviceSettingsTestBase::SetUp(); |
| 169 provider_.reset(new DeviceSettingsProvider(base::Bind(&OnPrefChanged), | 296 provider_.reset(new DeviceSettingsProvider(base::Bind(&OnPrefChanged), |
| 170 &device_settings_service_)); | 297 &device_settings_service_)); |
| 171 FlushDeviceSettings(); | 298 FlushDeviceSettings(); |
| 172 service_ = OwnerSettingsServiceChromeOSFactory::GetForBrowserContext( | 299 service_ = OwnerSettingsServiceChromeOSFactory::GetForBrowserContext( |
| 173 profile_.get()); | 300 profile_.get()); |
| 174 ASSERT_TRUE(service_); | 301 ASSERT_TRUE(service_); |
| 175 ASSERT_FALSE(service_->IsOwner()); | 302 ASSERT_FALSE(service_->IsOwner()); |
| 176 } | 303 } |
| 177 | 304 |
| 178 virtual void TearDown() override { DeviceSettingsTestBase::TearDown(); } | 305 virtual void TearDown() override { DeviceSettingsTestBase::TearDown(); } |
| 179 | 306 |
| 180 private: | 307 private: |
| 181 DISALLOW_COPY_AND_ASSIGN(OwnerSettingsServiceChromeOSNoOwnerTest); | 308 DISALLOW_COPY_AND_ASSIGN(OwnerSettingsServiceChromeOSNoOwnerTest); |
| 182 }; | 309 }; |
| 183 | 310 |
| 184 TEST_F(OwnerSettingsServiceChromeOSNoOwnerTest, SingleSetTest) { | 311 TEST_F(OwnerSettingsServiceChromeOSNoOwnerTest, SingleSetTest) { |
| 185 ASSERT_FALSE(service_->SetBoolean(kAccountsPrefAllowGuest, false)); | 312 ASSERT_FALSE(service_->SetBoolean(kAccountsPrefAllowGuest, false)); |
| 186 } | 313 } |
| 187 | 314 |
| 188 } // namespace chromeos | 315 } // namespace chromeos |
| OLD | NEW |