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 "chrome/browser/chromeos/policy/device_local_account_policy_service.h" | 5 #include "chrome/browser/chromeos/policy/device_local_account_policy_service.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
11 #include "base/callback.h" | 11 #include "base/callback.h" |
12 #include "base/files/file_path.h" | 12 #include "base/files/file_path.h" |
13 #include "base/files/file_util.h" | 13 #include "base/files/file_util.h" |
14 #include "base/files/scoped_temp_dir.h" | 14 #include "base/files/scoped_temp_dir.h" |
15 #include "base/message_loop/message_loop.h" | 15 #include "base/message_loop/message_loop.h" |
16 #include "base/message_loop/message_loop_proxy.h" | 16 #include "base/message_loop/message_loop_proxy.h" |
17 #include "base/path_service.h" | 17 #include "base/path_service.h" |
18 #include "base/run_loop.h" | 18 #include "base/run_loop.h" |
19 #include "base/strings/string_number_conversions.h" | 19 #include "base/strings/string_number_conversions.h" |
20 #include "base/strings/stringprintf.h" | 20 #include "base/strings/stringprintf.h" |
21 #include "base/test/scoped_path_override.h" | 21 #include "base/test/scoped_path_override.h" |
22 #include "base/test/test_simple_task_runner.h" | 22 #include "base/test/test_simple_task_runner.h" |
23 #include "chrome/browser/chromeos/policy/device_local_account.h" | 23 #include "chrome/browser/chromeos/policy/device_local_account.h" |
24 #include "chrome/browser/chromeos/policy/device_local_account_policy_provider.h" | 24 #include "chrome/browser/chromeos/policy/device_local_account_policy_provider.h" |
25 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h" | 25 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h" |
26 #include "chrome/browser/chromeos/settings/cros_settings.h" | 26 #include "chrome/browser/chromeos/settings/cros_settings.h" |
27 #include "chrome/browser/chromeos/settings/device_settings_service.h" | 27 #include "chrome/browser/chromeos/settings/device_settings_service.h" |
28 #include "chrome/browser/chromeos/settings/device_settings_test_helper.h" | 28 #include "chrome/browser/chromeos/settings/device_settings_test_helper.h" |
29 #include "chrome/browser/invalidation/fake_invalidation_service.h" | |
30 #include "chrome/browser/policy/cloud/cloud_policy_invalidator.h" | |
29 #include "chrome/common/chrome_paths.h" | 31 #include "chrome/common/chrome_paths.h" |
32 #include "chrome/test/base/testing_browser_process.h" | |
33 #include "chrome/test/base/testing_profile_manager.h" | |
30 #include "chromeos/chromeos_paths.h" | 34 #include "chromeos/chromeos_paths.h" |
31 #include "chromeos/dbus/power_policy_controller.h" | 35 #include "chromeos/dbus/power_policy_controller.h" |
36 #include "components/invalidation/invalidation.h" | |
37 #include "components/invalidation/object_id_invalidation_map.h" | |
32 #include "components/policy/core/common/cloud/cloud_policy_client.h" | 38 #include "components/policy/core/common/cloud/cloud_policy_client.h" |
33 #include "components/policy/core/common/cloud/cloud_policy_constants.h" | 39 #include "components/policy/core/common/cloud/cloud_policy_constants.h" |
34 #include "components/policy/core/common/cloud/cloud_policy_service.h" | 40 #include "components/policy/core/common/cloud/cloud_policy_service.h" |
35 #include "components/policy/core/common/cloud/mock_device_management_service.h" | 41 #include "components/policy/core/common/cloud/mock_device_management_service.h" |
36 #include "components/policy/core/common/cloud/policy_builder.h" | 42 #include "components/policy/core/common/cloud/policy_builder.h" |
37 #include "components/policy/core/common/external_data_fetcher.h" | 43 #include "components/policy/core/common/external_data_fetcher.h" |
38 #include "components/policy/core/common/mock_configuration_policy_provider.h" | 44 #include "components/policy/core/common/mock_configuration_policy_provider.h" |
39 #include "components/policy/core/common/policy_bundle.h" | 45 #include "components/policy/core/common/policy_bundle.h" |
40 #include "components/policy/core/common/policy_map.h" | 46 #include "components/policy/core/common/policy_map.h" |
41 #include "components/policy/core/common/schema_registry.h" | 47 #include "components/policy/core/common/schema_registry.h" |
48 #include "google/cacheinvalidation/include/types.h" | |
42 #include "net/url_request/url_request_context_getter.h" | 49 #include "net/url_request/url_request_context_getter.h" |
43 #include "net/url_request/url_request_test_util.h" | 50 #include "net/url_request/url_request_test_util.h" |
44 #include "policy/policy_constants.h" | 51 #include "policy/policy_constants.h" |
45 #include "policy/proto/cloud_policy.pb.h" | 52 #include "policy/proto/cloud_policy.pb.h" |
46 #include "policy/proto/device_management_backend.pb.h" | 53 #include "policy/proto/device_management_backend.pb.h" |
47 #include "testing/gtest/include/gtest/gtest.h" | 54 #include "testing/gtest/include/gtest/gtest.h" |
48 | 55 |
49 using testing::AnyNumber; | 56 using testing::AnyNumber; |
50 using testing::AtLeast; | 57 using testing::AtLeast; |
51 using testing::Mock; | 58 using testing::Mock; |
52 using testing::SaveArg; | 59 using testing::SaveArg; |
53 using testing::_; | 60 using testing::_; |
54 | 61 |
55 namespace em = enterprise_management; | 62 namespace em = enterprise_management; |
56 | 63 |
57 namespace policy { | 64 namespace policy { |
58 | 65 |
59 namespace { | 66 namespace { |
60 | 67 |
61 const char kAccount1[] = "account1@localhost"; | 68 const char kAccount1[] = "account1@localhost"; |
62 const char kAccount2[] = "account2@localhost"; | 69 const char kAccount2[] = "account2@localhost"; |
63 const char kAccount3[] = "account3@localhost"; | 70 const char kAccount3[] = "account3@localhost"; |
64 | 71 |
65 const char kExtensionID[] = "kbmnembihfiondgfjekmnmcbddelicoi"; | 72 const char kExtensionID[] = "kbmnembihfiondgfjekmnmcbddelicoi"; |
66 const char kExtensionVersion[] = "1.0.0.0"; | 73 const char kExtensionVersion[] = "1.0.0.0"; |
67 const char kExtensionCRXPath[] = "extensions/hosted_app.crx"; | 74 const char kExtensionCRXPath[] = "extensions/hosted_app.crx"; |
68 const char kUpdateURL[] = "https://clients2.google.com/service/update2/crx"; | 75 const char kUpdateURL[] = "https://clients2.google.com/service/update2/crx"; |
69 | 76 |
77 const int kInvalidationSource = 123; | |
78 const char kInvalidationName[] = "invalidation"; | |
79 | |
70 } // namespace | 80 } // namespace |
71 | 81 |
72 class MockDeviceLocalAccountPolicyServiceObserver | 82 class MockDeviceLocalAccountPolicyServiceObserver |
73 : public DeviceLocalAccountPolicyService::Observer { | 83 : public DeviceLocalAccountPolicyService::Observer { |
74 public: | 84 public: |
75 MOCK_METHOD1(OnPolicyUpdated, void(const std::string&)); | 85 MOCK_METHOD1(OnPolicyUpdated, void(const std::string&)); |
76 MOCK_METHOD0(OnDeviceLocalAccountsChanged, void(void)); | 86 MOCK_METHOD0(OnDeviceLocalAccountsChanged, void(void)); |
77 }; | 87 }; |
78 | 88 |
79 class DeviceLocalAccountPolicyServiceTestBase | 89 class DeviceLocalAccountPolicyServiceTestBase |
(...skipping 11 matching lines...) Expand all Loading... | |
91 virtual void InstallDevicePolicy(); | 101 virtual void InstallDevicePolicy(); |
92 | 102 |
93 const std::string account_1_user_id_; | 103 const std::string account_1_user_id_; |
94 const std::string account_2_user_id_; | 104 const std::string account_2_user_id_; |
95 | 105 |
96 PolicyMap expected_policy_map_; | 106 PolicyMap expected_policy_map_; |
97 UserPolicyBuilder device_local_account_policy_; | 107 UserPolicyBuilder device_local_account_policy_; |
98 chromeos::CrosSettings cros_settings_; | 108 chromeos::CrosSettings cros_settings_; |
99 scoped_refptr<base::TestSimpleTaskRunner> extension_cache_task_runner_; | 109 scoped_refptr<base::TestSimpleTaskRunner> extension_cache_task_runner_; |
100 MockDeviceManagementService mock_device_management_service_; | 110 MockDeviceManagementService mock_device_management_service_; |
111 TestingProfileManager profile_manager_; | |
112 scoped_ptr<AffiliatedInvalidationServiceProvider> | |
113 affiliated_invalidation_service_provider_; | |
101 scoped_ptr<DeviceLocalAccountPolicyService> service_; | 114 scoped_ptr<DeviceLocalAccountPolicyService> service_; |
102 | 115 |
103 private: | 116 private: |
104 DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountPolicyServiceTestBase); | 117 DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountPolicyServiceTestBase); |
105 }; | 118 }; |
106 | 119 |
107 class DeviceLocalAccountPolicyServiceTest | 120 class DeviceLocalAccountPolicyServiceTest |
108 : public DeviceLocalAccountPolicyServiceTestBase { | 121 : public DeviceLocalAccountPolicyServiceTestBase { |
109 public: | 122 public: |
110 MOCK_METHOD1(OnRefreshDone, void(bool)); | 123 MOCK_METHOD1(OnRefreshDone, void(bool)); |
111 | 124 |
112 protected: | 125 protected: |
113 DeviceLocalAccountPolicyServiceTest(); | 126 DeviceLocalAccountPolicyServiceTest(); |
114 | 127 |
115 virtual void SetUp() override; | 128 virtual void SetUp() override; |
116 virtual void TearDown() override; | 129 virtual void TearDown() override; |
117 | 130 |
118 void InstallDevicePolicy() override; | 131 void InstallDevicePolicy() override; |
119 | 132 |
133 void FlushDeviceLocalAccountPolicyFetch(); | |
pneubeck (no reviews)
2015/01/30 14:23:58
i think this function has enough side effect that
bartfab (slow)
2015/02/03 18:31:06
Obsolete.
| |
134 | |
120 MockDeviceLocalAccountPolicyServiceObserver service_observer_; | 135 MockDeviceLocalAccountPolicyServiceObserver service_observer_; |
121 | 136 |
122 private: | 137 private: |
123 DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountPolicyServiceTest); | 138 DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountPolicyServiceTest); |
124 }; | 139 }; |
125 | 140 |
126 DeviceLocalAccountPolicyServiceTestBase:: | 141 DeviceLocalAccountPolicyServiceTestBase:: |
127 DeviceLocalAccountPolicyServiceTestBase() | 142 DeviceLocalAccountPolicyServiceTestBase() |
128 : account_1_user_id_(GenerateDeviceLocalAccountUserId( | 143 : account_1_user_id_(GenerateDeviceLocalAccountUserId( |
129 kAccount1, | 144 kAccount1, |
130 DeviceLocalAccount::TYPE_PUBLIC_SESSION)), | 145 DeviceLocalAccount::TYPE_PUBLIC_SESSION)), |
131 account_2_user_id_(GenerateDeviceLocalAccountUserId( | 146 account_2_user_id_(GenerateDeviceLocalAccountUserId( |
132 kAccount2, | 147 kAccount2, |
133 DeviceLocalAccount::TYPE_PUBLIC_SESSION)), | 148 DeviceLocalAccount::TYPE_PUBLIC_SESSION)), |
134 cros_settings_(&device_settings_service_), | 149 cros_settings_(&device_settings_service_), |
135 extension_cache_task_runner_(new base::TestSimpleTaskRunner) { | 150 extension_cache_task_runner_(new base::TestSimpleTaskRunner), |
151 profile_manager_(TestingBrowserProcess::GetGlobal()) { | |
136 } | 152 } |
137 | 153 |
138 void DeviceLocalAccountPolicyServiceTestBase::SetUp() { | 154 void DeviceLocalAccountPolicyServiceTestBase::SetUp() { |
139 chromeos::DeviceSettingsTestBase::SetUp(); | 155 chromeos::DeviceSettingsTestBase::SetUp(); |
140 | 156 |
157 ASSERT_TRUE(profile_manager_.SetUp()); | |
158 | |
159 affiliated_invalidation_service_provider_.reset( | |
160 new AffiliatedInvalidationServiceProvider); | |
pneubeck (no reviews)
2015/01/30 14:23:58
you could make the relevant methods of the provide
bartfab (slow)
2015/02/03 18:31:06
Done.
| |
161 // Mark the |affiliated_invalidation_service_provider_| as shut down | |
162 // immediately. This will prevent it from trying to find an available | |
163 // invalidation service, which pulls in a lot of additional run-time | |
164 // dependencies. | |
165 affiliated_invalidation_service_provider_->Shutdown(); | |
166 | |
141 expected_policy_map_.Set(key::kDisableSpdy, | 167 expected_policy_map_.Set(key::kDisableSpdy, |
142 POLICY_LEVEL_MANDATORY, | 168 POLICY_LEVEL_MANDATORY, |
143 POLICY_SCOPE_USER, | 169 POLICY_SCOPE_USER, |
144 new base::FundamentalValue(true), | 170 new base::FundamentalValue(true), |
145 NULL); | 171 NULL); |
146 | 172 |
147 device_local_account_policy_.payload().mutable_disablespdy()->set_value( | 173 device_local_account_policy_.payload().mutable_disablespdy()->set_value( |
148 true); | 174 true); |
149 device_local_account_policy_.policy_data().set_policy_type( | 175 device_local_account_policy_.policy_data().set_policy_type( |
150 dm_protocol::kChromePublicAccountPolicyType); | 176 dm_protocol::kChromePublicAccountPolicyType); |
151 } | 177 } |
152 | 178 |
153 void DeviceLocalAccountPolicyServiceTestBase::TearDown() { | 179 void DeviceLocalAccountPolicyServiceTestBase::TearDown() { |
154 service_->Shutdown(); | 180 service_->Shutdown(); |
155 service_.reset(); | 181 service_.reset(); |
156 extension_cache_task_runner_->RunUntilIdle(); | 182 extension_cache_task_runner_->RunUntilIdle(); |
157 chromeos::DeviceSettingsTestBase::TearDown(); | 183 chromeos::DeviceSettingsTestBase::TearDown(); |
158 } | 184 } |
159 | 185 |
160 void DeviceLocalAccountPolicyServiceTestBase::CreatePolicyService() { | 186 void DeviceLocalAccountPolicyServiceTestBase::CreatePolicyService() { |
161 service_.reset(new DeviceLocalAccountPolicyService( | 187 service_.reset(new DeviceLocalAccountPolicyService( |
162 &device_settings_test_helper_, | 188 &device_settings_test_helper_, |
163 &device_settings_service_, | 189 &device_settings_service_, |
164 &cros_settings_, | 190 &cros_settings_, |
191 affiliated_invalidation_service_provider_.get(), | |
165 base::MessageLoopProxy::current(), | 192 base::MessageLoopProxy::current(), |
166 extension_cache_task_runner_, | 193 extension_cache_task_runner_, |
167 base::MessageLoopProxy::current(), | 194 base::MessageLoopProxy::current(), |
168 base::MessageLoopProxy::current(), | 195 base::MessageLoopProxy::current(), |
169 new net::TestURLRequestContextGetter(base::MessageLoopProxy::current()))); | 196 new net::TestURLRequestContextGetter(base::MessageLoopProxy::current()))); |
170 } | 197 } |
171 | 198 |
172 void DeviceLocalAccountPolicyServiceTestBase:: | 199 void DeviceLocalAccountPolicyServiceTestBase:: |
173 InstallDeviceLocalAccountPolicy(const std::string& account_id) { | 200 InstallDeviceLocalAccountPolicy(const std::string& account_id) { |
174 device_local_account_policy_.policy_data().set_settings_entity_id(account_id); | 201 device_local_account_policy_.policy_data().set_settings_entity_id(account_id); |
(...skipping 12 matching lines...) Expand all Loading... | |
187 em::DeviceLocalAccountInfoProto::ACCOUNT_TYPE_PUBLIC_SESSION); | 214 em::DeviceLocalAccountInfoProto::ACCOUNT_TYPE_PUBLIC_SESSION); |
188 } | 215 } |
189 | 216 |
190 void DeviceLocalAccountPolicyServiceTestBase::InstallDevicePolicy() { | 217 void DeviceLocalAccountPolicyServiceTestBase::InstallDevicePolicy() { |
191 device_policy_.Build(); | 218 device_policy_.Build(); |
192 device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob()); | 219 device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob()); |
193 ReloadDeviceSettings(); | 220 ReloadDeviceSettings(); |
194 } | 221 } |
195 | 222 |
196 DeviceLocalAccountPolicyServiceTest::DeviceLocalAccountPolicyServiceTest() { | 223 DeviceLocalAccountPolicyServiceTest::DeviceLocalAccountPolicyServiceTest() { |
197 CreatePolicyService(); | |
198 } | 224 } |
199 | 225 |
200 void DeviceLocalAccountPolicyServiceTest::SetUp() { | 226 void DeviceLocalAccountPolicyServiceTest::SetUp() { |
201 DeviceLocalAccountPolicyServiceTestBase::SetUp(); | 227 DeviceLocalAccountPolicyServiceTestBase::SetUp(); |
228 | |
229 CreatePolicyService(); | |
202 service_->AddObserver(&service_observer_); | 230 service_->AddObserver(&service_observer_); |
203 } | 231 } |
204 | 232 |
205 void DeviceLocalAccountPolicyServiceTest::TearDown() { | 233 void DeviceLocalAccountPolicyServiceTest::TearDown() { |
206 service_->RemoveObserver(&service_observer_); | 234 service_->RemoveObserver(&service_observer_); |
207 DeviceLocalAccountPolicyServiceTestBase::TearDown(); | 235 DeviceLocalAccountPolicyServiceTestBase::TearDown(); |
208 } | 236 } |
209 | 237 |
210 void DeviceLocalAccountPolicyServiceTest::InstallDevicePolicy() { | 238 void DeviceLocalAccountPolicyServiceTest::InstallDevicePolicy() { |
211 EXPECT_CALL(service_observer_, OnDeviceLocalAccountsChanged()); | 239 EXPECT_CALL(service_observer_, OnDeviceLocalAccountsChanged()); |
212 DeviceLocalAccountPolicyServiceTestBase::InstallDevicePolicy(); | 240 DeviceLocalAccountPolicyServiceTestBase::InstallDevicePolicy(); |
213 Mock::VerifyAndClearExpectations(&service_observer_); | 241 Mock::VerifyAndClearExpectations(&service_observer_); |
214 } | 242 } |
215 | 243 |
244 void DeviceLocalAccountPolicyServiceTest::FlushDeviceLocalAccountPolicyFetch() { | |
245 em::DeviceManagementRequest request; | |
246 em::DeviceManagementResponse response; | |
247 response.mutable_policy_response()->add_response()->CopyFrom( | |
248 device_local_account_policy_.policy()); | |
249 EXPECT_CALL(mock_device_management_service_, | |
250 CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH, _)) | |
251 .WillOnce(mock_device_management_service_.SucceedJob(response)); | |
252 EXPECT_CALL(mock_device_management_service_, | |
253 StartJob(dm_protocol::kValueRequestPolicy, | |
254 std::string(), std::string(), | |
255 device_policy_.policy_data().request_token(), | |
256 dm_protocol::kValueUserAffiliationManaged, | |
257 device_policy_.policy_data().device_id(), | |
258 _)) | |
259 .WillOnce(SaveArg<6>(&request)); | |
260 // This will be called twice, because the ComponentCloudPolicyService will | |
261 // also become ready after flushing all the pending tasks. | |
262 EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)).Times(2); | |
263 FlushDeviceSettings(); | |
264 | |
265 Mock::VerifyAndClearExpectations(&service_observer_); | |
266 Mock::VerifyAndClearExpectations(&mock_device_management_service_); | |
267 | |
268 EXPECT_TRUE(request.has_policy_request()); | |
269 ASSERT_EQ(2, request.policy_request().request_size()); | |
270 | |
271 const em::PolicyFetchRequest* public_account = | |
272 &request.policy_request().request(0); | |
273 const em::PolicyFetchRequest* extensions = | |
274 &request.policy_request().request(1); | |
275 // The order is not guarateed. | |
276 if (extensions->policy_type() == | |
277 dm_protocol::kChromePublicAccountPolicyType) { | |
278 std::swap(public_account, extensions); | |
279 } | |
280 | |
281 EXPECT_EQ(dm_protocol::kChromePublicAccountPolicyType, | |
282 public_account->policy_type()); | |
283 EXPECT_FALSE(public_account->has_machine_id()); | |
284 EXPECT_EQ(kAccount1, public_account->settings_entity_id()); | |
285 | |
286 EXPECT_EQ(dm_protocol::kChromeExtensionPolicyType, | |
287 extensions->policy_type()); | |
288 EXPECT_FALSE(extensions->has_machine_id()); | |
289 EXPECT_FALSE(extensions->has_settings_entity_id()); | |
290 } | |
291 | |
216 TEST_F(DeviceLocalAccountPolicyServiceTest, NoAccounts) { | 292 TEST_F(DeviceLocalAccountPolicyServiceTest, NoAccounts) { |
217 EXPECT_FALSE(service_->GetBrokerForUser(account_1_user_id_)); | 293 EXPECT_FALSE(service_->GetBrokerForUser(account_1_user_id_)); |
218 } | 294 } |
219 | 295 |
220 TEST_F(DeviceLocalAccountPolicyServiceTest, GetBroker) { | 296 TEST_F(DeviceLocalAccountPolicyServiceTest, GetBroker) { |
221 InstallDeviceLocalAccountPolicy(kAccount1); | 297 InstallDeviceLocalAccountPolicy(kAccount1); |
222 AddDeviceLocalAccountToPolicy(kAccount1); | 298 AddDeviceLocalAccountToPolicy(kAccount1); |
223 EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); | 299 EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); |
224 InstallDevicePolicy(); | 300 InstallDevicePolicy(); |
225 | 301 |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
386 EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); | 462 EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); |
387 InstallDevicePolicy(); | 463 InstallDevicePolicy(); |
388 | 464 |
389 DeviceLocalAccountPolicyBroker* broker = | 465 DeviceLocalAccountPolicyBroker* broker = |
390 service_->GetBrokerForUser(account_1_user_id_); | 466 service_->GetBrokerForUser(account_1_user_id_); |
391 ASSERT_TRUE(broker); | 467 ASSERT_TRUE(broker); |
392 | 468 |
393 service_->Connect(&mock_device_management_service_); | 469 service_->Connect(&mock_device_management_service_); |
394 EXPECT_TRUE(broker->core()->client()); | 470 EXPECT_TRUE(broker->core()->client()); |
395 | 471 |
396 em::DeviceManagementRequest request; | 472 FlushDeviceLocalAccountPolicyFetch(); |
397 em::DeviceManagementResponse response; | |
398 response.mutable_policy_response()->add_response()->CopyFrom( | |
399 device_local_account_policy_.policy()); | |
400 EXPECT_CALL(mock_device_management_service_, | |
401 CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH, _)) | |
402 .WillOnce(mock_device_management_service_.SucceedJob(response)); | |
403 EXPECT_CALL(mock_device_management_service_, | |
404 StartJob(dm_protocol::kValueRequestPolicy, | |
405 std::string(), std::string(), | |
406 device_policy_.policy_data().request_token(), | |
407 dm_protocol::kValueUserAffiliationManaged, | |
408 device_policy_.policy_data().device_id(), | |
409 _)) | |
410 .WillOnce(SaveArg<6>(&request)); | |
411 // This will be called twice, because the ComponentCloudPolicyService will | |
412 // also become ready after flushing all the pending tasks. | |
413 EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)).Times(2); | |
414 broker->core()->client()->FetchPolicy(); | |
pneubeck (no reviews)
2015/01/30 14:23:58
you dropped this FetchPolicy call during the refac
bartfab (slow)
2015/02/03 18:31:06
Yes, this was intentional. We should test that the
| |
415 FlushDeviceSettings(); | |
416 Mock::VerifyAndClearExpectations(&service_observer_); | |
417 Mock::VerifyAndClearExpectations(&mock_device_management_service_); | |
418 EXPECT_TRUE(request.has_policy_request()); | |
419 ASSERT_EQ(2, request.policy_request().request_size()); | |
420 | |
421 const em::PolicyFetchRequest* public_account = | |
422 &request.policy_request().request(0); | |
423 const em::PolicyFetchRequest* extensions = | |
424 &request.policy_request().request(1); | |
425 // The order is not guarateed. | |
426 if (extensions->policy_type() == | |
427 dm_protocol::kChromePublicAccountPolicyType) { | |
428 std::swap(public_account, extensions); | |
429 } | |
430 | |
431 EXPECT_EQ(dm_protocol::kChromePublicAccountPolicyType, | |
432 public_account->policy_type()); | |
433 EXPECT_FALSE(public_account->has_machine_id()); | |
434 EXPECT_EQ(kAccount1, public_account->settings_entity_id()); | |
435 | |
436 EXPECT_EQ(dm_protocol::kChromeExtensionPolicyType, | |
437 extensions->policy_type()); | |
438 EXPECT_FALSE(extensions->has_machine_id()); | |
439 EXPECT_FALSE(extensions->has_settings_entity_id()); | |
440 | 473 |
441 ASSERT_TRUE(broker->core()->store()); | 474 ASSERT_TRUE(broker->core()->store()); |
442 EXPECT_EQ(CloudPolicyStore::STATUS_OK, | 475 EXPECT_EQ(CloudPolicyStore::STATUS_OK, |
443 broker->core()->store()->status()); | 476 broker->core()->store()->status()); |
444 ASSERT_TRUE(broker->core()->store()->policy()); | 477 ASSERT_TRUE(broker->core()->store()->policy()); |
445 EXPECT_EQ(device_local_account_policy_.policy_data().SerializeAsString(), | 478 EXPECT_EQ(device_local_account_policy_.policy_data().SerializeAsString(), |
446 broker->core()->store()->policy()->SerializeAsString()); | 479 broker->core()->store()->policy()->SerializeAsString()); |
447 EXPECT_TRUE(expected_policy_map_.Equals( | 480 EXPECT_TRUE(expected_policy_map_.Equals( |
448 broker->core()->store()->policy_map())); | 481 broker->core()->store()->policy_map())); |
449 EXPECT_TRUE(service_->IsPolicyAvailableForUser(account_1_user_id_)); | 482 EXPECT_TRUE(service_->IsPolicyAvailableForUser(account_1_user_id_)); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
481 Mock::VerifyAndClearExpectations(&mock_device_management_service_); | 514 Mock::VerifyAndClearExpectations(&mock_device_management_service_); |
482 | 515 |
483 ASSERT_TRUE(broker->core()->store()); | 516 ASSERT_TRUE(broker->core()->store()); |
484 EXPECT_EQ(CloudPolicyStore::STATUS_OK, | 517 EXPECT_EQ(CloudPolicyStore::STATUS_OK, |
485 broker->core()->store()->status()); | 518 broker->core()->store()->status()); |
486 EXPECT_TRUE(expected_policy_map_.Equals( | 519 EXPECT_TRUE(expected_policy_map_.Equals( |
487 broker->core()->store()->policy_map())); | 520 broker->core()->store()->policy_map())); |
488 EXPECT_TRUE(service_->IsPolicyAvailableForUser(account_1_user_id_)); | 521 EXPECT_TRUE(service_->IsPolicyAvailableForUser(account_1_user_id_)); |
489 } | 522 } |
490 | 523 |
524 TEST_F(DeviceLocalAccountPolicyServiceTest, Invalidation) { | |
525 device_local_account_policy_.policy_data().set_invalidation_source( | |
526 kInvalidationSource); | |
527 device_local_account_policy_.policy_data().set_invalidation_name( | |
528 "invalidation"); | |
529 InstallDeviceLocalAccountPolicy(kAccount1); | |
530 | |
531 AddDeviceLocalAccountToPolicy(kAccount1); | |
532 EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); | |
533 InstallDevicePolicy(); | |
534 Mock::VerifyAndClearExpectations(&service_observer_); | |
535 | |
536 DeviceLocalAccountPolicyBroker* broker = | |
537 service_->GetBrokerForUser(account_1_user_id_); | |
538 ASSERT_TRUE(broker); | |
539 EXPECT_EQ(account_1_user_id_, broker->user_id()); | |
pneubeck (no reviews)
2015/01/30 14:23:58
this seems to be tested already in TEST_F(..., Get
bartfab (slow)
2015/02/03 18:31:06
Obsolete.
| |
540 ASSERT_TRUE(broker->core()->store()); | |
541 | |
542 // Make a first invalidation service available. | |
543 invalidation::FakeInvalidationService invalidation_service_1; | |
544 broker->OnInvalidationServiceSet(&invalidation_service_1); | |
545 | |
546 // Verify that no invalidator exists initially. | |
547 EXPECT_FALSE(broker->GetInvalidatorForTest()); | |
548 | |
549 service_->Connect(&mock_device_management_service_); | |
550 | |
551 // Verify that an invalidator backed by the first invalidation service has | |
552 // been created and its highest handled invalidation version starts out as 0. | |
553 CloudPolicyInvalidator* invalidator = broker->GetInvalidatorForTest(); | |
554 ASSERT_TRUE(invalidator); | |
555 EXPECT_EQ(0, invalidator->highest_handled_invalidation_version()); | |
556 EXPECT_EQ(&invalidation_service_1, | |
557 invalidator->invalidation_service_for_test()); | |
558 | |
559 // Trigger an invalidation. The invalidation version is interpreted as a | |
560 // timestamp in microseconds. The policy blob contains a timestamp in | |
561 // milliseconds. Convert from one to the other by multiplying by 1000. | |
562 const int64 invalidation_version = | |
563 broker->core()->store()->policy()->timestamp() * 1000; | |
564 syncer::Invalidation invalidation = syncer::Invalidation::Init( | |
565 invalidation::ObjectId(kInvalidationSource, kInvalidationName), | |
566 invalidation_version, | |
567 "dummy payload"); | |
568 syncer::ObjectIdInvalidationMap invalidation_map; | |
569 invalidation_map.Insert(invalidation); | |
570 invalidator->OnIncomingInvalidation(invalidation_map); | |
571 | |
572 // Verify that the invalidation causes a policy refresh. | |
573 FlushDeviceLocalAccountPolicyFetch(); | |
574 | |
575 // Verify that the highest handled invalidation version has been recorded. | |
576 EXPECT_EQ(invalidation_version, | |
577 invalidator->highest_handled_invalidation_version()); | |
578 | |
579 // Make the first invalidation service unavailable. | |
580 broker->OnInvalidationServiceSet(nullptr); | |
581 | |
582 // Verify that the invalidator has been destroyed. | |
583 EXPECT_FALSE(broker->GetInvalidatorForTest()); | |
584 | |
585 // Make a second invalidation service available instead. | |
586 invalidation::FakeInvalidationService invalidation_service_2; | |
587 broker->OnInvalidationServiceSet(&invalidation_service_2); | |
588 | |
589 // Verify that an invalidator backed by the second invalidation service has | |
590 // been created and its highest handled invalidation version starts out as the | |
591 // highest invalidation version handled by the previous invalidator. | |
592 invalidator = broker->GetInvalidatorForTest(); | |
593 ASSERT_TRUE(invalidator); | |
594 EXPECT_EQ(invalidation_version, | |
595 invalidator->highest_handled_invalidation_version()); | |
596 EXPECT_EQ(&invalidation_service_2, | |
597 invalidator->invalidation_service_for_test()); | |
598 | |
599 // Make the first invalidation service available again. This implies that the | |
600 // second invalidation service is no longer available. | |
601 broker->OnInvalidationServiceSet(&invalidation_service_1); | |
602 | |
603 // Verify that the invalidator backed by the second invalidation service was | |
604 // destroyed and an invalidation backed by the first invalidation service has | |
605 // been created instead. Also verify that its highest handled invalidation | |
606 // version starts out as 1. | |
607 invalidator = broker->GetInvalidatorForTest(); | |
608 ASSERT_TRUE(invalidator); | |
609 EXPECT_EQ(invalidation_version, | |
610 invalidator->highest_handled_invalidation_version()); | |
611 EXPECT_EQ(&invalidation_service_1, | |
612 invalidator->invalidation_service_for_test()); | |
613 | |
614 // Make the first invalidation service unavailable. | |
615 broker->OnInvalidationServiceSet(nullptr); | |
616 } | |
617 | |
618 TEST_F(DeviceLocalAccountPolicyServiceTest, | |
pneubeck (no reviews)
2015/01/30 14:23:58
If I checked it correctly, by parameterizing Devic
bartfab (slow)
2015/02/03 18:31:06
Done. After making this change, I renamed DeviceCl
| |
619 ConnectBeforeInvalidationServiceAvailable) { | |
620 device_local_account_policy_.policy_data().set_invalidation_source(123); | |
621 device_local_account_policy_.policy_data().set_invalidation_name( | |
622 kInvalidationName); | |
623 InstallDeviceLocalAccountPolicy(kAccount1); | |
624 | |
625 AddDeviceLocalAccountToPolicy(kAccount1); | |
626 EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); | |
627 InstallDevicePolicy(); | |
628 Mock::VerifyAndClearExpectations(&service_observer_); | |
629 | |
630 DeviceLocalAccountPolicyBroker* broker = | |
631 service_->GetBrokerForUser(account_1_user_id_); | |
632 ASSERT_TRUE(broker); | |
633 EXPECT_EQ(account_1_user_id_, broker->user_id()); | |
pneubeck (no reviews)
2015/01/30 14:23:58
same as above, please remove
bartfab (slow)
2015/02/03 18:31:06
Obsolete.
| |
634 ASSERT_TRUE(broker->core()->store()); | |
635 | |
636 service_->Connect(&mock_device_management_service_); | |
637 | |
638 // Verify that no invalidator exists initially. | |
639 EXPECT_FALSE(broker->GetInvalidatorForTest()); | |
640 | |
641 // Make an invalidation service available. | |
642 invalidation::FakeInvalidationService invalidation_service; | |
643 broker->OnInvalidationServiceSet(&invalidation_service); | |
644 | |
645 // Verify that an invalidator backed by the invalidation service has been | |
646 // created and its highest handled invalidation version starts out as 0. | |
647 CloudPolicyInvalidator* invalidator = broker->GetInvalidatorForTest(); | |
648 ASSERT_TRUE(invalidator); | |
649 EXPECT_EQ(0, invalidator->highest_handled_invalidation_version()); | |
650 EXPECT_EQ(&invalidation_service, | |
651 invalidator->invalidation_service_for_test()); | |
652 | |
653 // Make the invalidation service unavailable. | |
654 broker->OnInvalidationServiceSet(nullptr); | |
655 } | |
656 | |
491 class DeviceLocalAccountPolicyExtensionCacheTest | 657 class DeviceLocalAccountPolicyExtensionCacheTest |
492 : public DeviceLocalAccountPolicyServiceTestBase { | 658 : public DeviceLocalAccountPolicyServiceTestBase { |
493 protected: | 659 protected: |
494 DeviceLocalAccountPolicyExtensionCacheTest(); | 660 DeviceLocalAccountPolicyExtensionCacheTest(); |
495 | 661 |
496 void SetUp() override; | 662 void SetUp() override; |
497 | 663 |
498 base::FilePath GetCacheDirectoryForAccountID(const std::string& account_id); | 664 base::FilePath GetCacheDirectoryForAccountID(const std::string& account_id); |
499 | 665 |
500 base::ScopedTempDir cache_root_dir_; | 666 base::ScopedTempDir cache_root_dir_; |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
777 | 943 |
778 SchemaRegistry schema_registry_; | 944 SchemaRegistry schema_registry_; |
779 scoped_ptr<DeviceLocalAccountPolicyProvider> provider_; | 945 scoped_ptr<DeviceLocalAccountPolicyProvider> provider_; |
780 MockConfigurationPolicyObserver provider_observer_; | 946 MockConfigurationPolicyObserver provider_observer_; |
781 | 947 |
782 private: | 948 private: |
783 DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountPolicyProviderTest); | 949 DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountPolicyProviderTest); |
784 }; | 950 }; |
785 | 951 |
786 DeviceLocalAccountPolicyProviderTest::DeviceLocalAccountPolicyProviderTest() { | 952 DeviceLocalAccountPolicyProviderTest::DeviceLocalAccountPolicyProviderTest() { |
953 } | |
954 | |
955 void DeviceLocalAccountPolicyProviderTest::SetUp() { | |
956 DeviceLocalAccountPolicyServiceTestBase::SetUp(); | |
957 | |
787 CreatePolicyService(); | 958 CreatePolicyService(); |
788 provider_ = DeviceLocalAccountPolicyProvider::Create( | 959 provider_ = DeviceLocalAccountPolicyProvider::Create( |
789 GenerateDeviceLocalAccountUserId(kAccount1, | 960 GenerateDeviceLocalAccountUserId(kAccount1, |
790 DeviceLocalAccount::TYPE_PUBLIC_SESSION), | 961 DeviceLocalAccount::TYPE_PUBLIC_SESSION), |
791 service_.get()); | 962 service_.get()); |
792 } | |
793 | |
794 void DeviceLocalAccountPolicyProviderTest::SetUp() { | |
795 DeviceLocalAccountPolicyServiceTestBase::SetUp(); | |
796 provider_->Init(&schema_registry_); | 963 provider_->Init(&schema_registry_); |
797 provider_->AddObserver(&provider_observer_); | 964 provider_->AddObserver(&provider_observer_); |
798 | 965 |
799 // Values implicitly enforced for public accounts. | 966 // Values implicitly enforced for public accounts. |
800 expected_policy_map_.Set(key::kLidCloseAction, | 967 expected_policy_map_.Set(key::kLidCloseAction, |
801 POLICY_LEVEL_MANDATORY, | 968 POLICY_LEVEL_MANDATORY, |
802 POLICY_SCOPE_MACHINE, | 969 POLICY_SCOPE_MACHINE, |
803 new base::FundamentalValue( | 970 new base::FundamentalValue( |
804 chromeos::PowerPolicyController:: | 971 chromeos::PowerPolicyController:: |
805 ACTION_STOP_SESSION), | 972 ACTION_STOP_SESSION), |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
966 em::DeviceManagementResponse response; | 1133 em::DeviceManagementResponse response; |
967 device_local_account_policy_.Build(); | 1134 device_local_account_policy_.Build(); |
968 response.mutable_policy_response()->add_response()->CopyFrom( | 1135 response.mutable_policy_response()->add_response()->CopyFrom( |
969 device_local_account_policy_.policy()); | 1136 device_local_account_policy_.policy()); |
970 request_job->SendResponse(DM_STATUS_SUCCESS, response); | 1137 request_job->SendResponse(DM_STATUS_SUCCESS, response); |
971 FlushDeviceSettings(); | 1138 FlushDeviceSettings(); |
972 Mock::VerifyAndClearExpectations(&provider_observer_); | 1139 Mock::VerifyAndClearExpectations(&provider_observer_); |
973 } | 1140 } |
974 | 1141 |
975 } // namespace policy | 1142 } // namespace policy |
OLD | NEW |