Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(438)

Side by Side Diff: chrome/browser/policy/cloud/cloud_policy_invalidator_unittest.cc

Issue 465433002: Separate UMA histograms for user and device policy invalidation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Nesting preprocessor directives inside macros does not work under Windows. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <string> 5 #include <string>
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "base/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
12 #include "base/metrics/histogram.h" 12 #include "base/metrics/histogram.h"
13 #include "base/metrics/histogram_samples.h" 13 #include "base/metrics/histogram_samples.h"
14 #include "base/metrics/sample_map.h" 14 #include "base/metrics/sample_map.h"
15 #include "base/metrics/statistics_recorder.h" 15 #include "base/metrics/statistics_recorder.h"
16 #include "base/run_loop.h" 16 #include "base/run_loop.h"
17 #include "base/test/simple_test_clock.h" 17 #include "base/test/simple_test_clock.h"
18 #include "base/test/test_simple_task_runner.h" 18 #include "base/test/test_simple_task_runner.h"
19 #include "base/time/time.h" 19 #include "base/time/time.h"
20 #include "base/values.h" 20 #include "base/values.h"
21 #include "chrome/browser/invalidation/fake_invalidation_service.h" 21 #include "chrome/browser/invalidation/fake_invalidation_service.h"
22 #include "chrome/browser/policy/cloud/cloud_policy_invalidator.h" 22 #include "chrome/browser/policy/cloud/cloud_policy_invalidator.h"
23 #include "chrome/browser/policy/cloud/user_cloud_policy_invalidator.h"
23 #include "components/invalidation/invalidation_util.h" 24 #include "components/invalidation/invalidation_util.h"
24 #include "components/policy/core/common/cloud/cloud_policy_constants.h" 25 #include "components/policy/core/common/cloud/cloud_policy_constants.h"
25 #include "components/policy/core/common/cloud/cloud_policy_core.h" 26 #include "components/policy/core/common/cloud/cloud_policy_core.h"
26 #include "components/policy/core/common/cloud/cloud_policy_refresh_scheduler.h" 27 #include "components/policy/core/common/cloud/cloud_policy_refresh_scheduler.h"
27 #include "components/policy/core/common/cloud/enterprise_metrics.h" 28 #include "components/policy/core/common/cloud/enterprise_metrics.h"
28 #include "components/policy/core/common/cloud/mock_cloud_policy_client.h" 29 #include "components/policy/core/common/cloud/mock_cloud_policy_client.h"
29 #include "components/policy/core/common/cloud/mock_cloud_policy_store.h" 30 #include "components/policy/core/common/cloud/mock_cloud_policy_store.h"
30 #include "components/policy/core/common/policy_types.h" 31 #include "components/policy/core/common/policy_types.h"
31 #include "policy/policy_constants.h" 32 #include "policy/policy_constants.h"
32 #include "policy/proto/device_management_backend.pb.h"
33 #include "testing/gmock/include/gmock/gmock.h" 33 #include "testing/gmock/include/gmock/gmock.h"
34 #include "testing/gtest/include/gtest/gtest.h" 34 #include "testing/gtest/include/gtest/gtest.h"
35 35
36 namespace em = enterprise_management;
37
36 namespace policy { 38 namespace policy {
37 39
38 class CloudPolicyInvalidatorTest : public testing::Test { 40 class CloudPolicyInvalidatorTest : public testing::Test {
39 protected: 41 protected:
40 // Policy objects which can be used in tests. 42 // Policy objects which can be used in tests.
41 enum PolicyObject { 43 enum PolicyObject {
42 POLICY_OBJECT_NONE, 44 POLICY_OBJECT_NONE,
43 POLICY_OBJECT_A, 45 POLICY_OBJECT_A,
44 POLICY_OBJECT_B 46 POLICY_OBJECT_B
45 }; 47 };
46 48
47 CloudPolicyInvalidatorTest(); 49 CloudPolicyInvalidatorTest();
48 50
49 virtual void SetUp() OVERRIDE;
50
51 virtual void TearDown() OVERRIDE; 51 virtual void TearDown() OVERRIDE;
52 52
53 // Starts the invalidator which will be tested. 53 // Starts the invalidator which will be tested.
54 // |initialize| determines if the invalidator should be initialized. 54 // |initialize| determines if the invalidator should be initialized.
55 // |start_refresh_scheduler| determines if the refresh scheduler should start. 55 // |start_refresh_scheduler| determines if the refresh scheduler should start.
56 void StartInvalidator(bool initialize, bool start_refresh_scheduler); 56 void StartInvalidator(bool initialize, bool start_refresh_scheduler);
57 void StartInvalidator() { 57 void StartInvalidator() {
58 StartInvalidator(true /* initialize */, true /* start_refresh_scheduler */); 58 StartInvalidator(true /* initialize */, true /* start_refresh_scheduler */);
59 } 59 }
60 60
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 bool InvalidationsEnabled(); 140 bool InvalidationsEnabled();
141 141
142 // Determines if the invalidation with the given ack handle has been 142 // Determines if the invalidation with the given ack handle has been
143 // acknowledged. 143 // acknowledged.
144 bool IsInvalidationAcknowledged(const syncer::Invalidation& invalidation); 144 bool IsInvalidationAcknowledged(const syncer::Invalidation& invalidation);
145 145
146 // Determines if the invalidator has registered for an object with the 146 // Determines if the invalidator has registered for an object with the
147 // invalidation service. 147 // invalidation service.
148 bool IsInvalidatorRegistered(); 148 bool IsInvalidatorRegistered();
149 149
150 // Get the current count for the given metric.
151 base::HistogramBase::Count GetCount(MetricPolicyRefresh metric);
152 base::HistogramBase::Count GetInvalidationCount(PolicyInvalidationType type);
153
154 // Advance the test clock. 150 // Advance the test clock.
155 void AdvanceClock(base::TimeDelta delta); 151 void AdvanceClock(base::TimeDelta delta);
156 152
157 // Get the current time on the test clock. 153 // Get the current time on the test clock.
158 base::Time Now(); 154 base::Time Now();
159 155
160 // Translate a version number into an appropriate invalidation version (which 156 // Translate a version number into an appropriate invalidation version (which
161 // is based on the current time). 157 // is based on the current time).
162 int64 V(int version); 158 int64 V(int version);
163 159
164 // Get an invalidation version for the given time. 160 // Get an invalidation version for the given time.
165 int64 GetVersion(base::Time time); 161 int64 GetVersion(base::Time time);
166 162
163 // Get the policy type that the |invalidator_| is responsible for.
164 virtual em::DeviceRegisterRequest::Type GetPolicyType() const;
165
167 private: 166 private:
168 // Checks that the policy was refreshed due to an invalidation with the given 167 // Checks that the policy was refreshed due to an invalidation with the given
169 // base delay. 168 // base delay.
170 bool CheckPolicyRefreshed(base::TimeDelta delay); 169 bool CheckPolicyRefreshed(base::TimeDelta delay);
171 170
172 // Checks that the policy was refreshed the given number of times. 171 // Checks that the policy was refreshed the given number of times.
173 bool CheckPolicyRefreshCount(int count); 172 bool CheckPolicyRefreshCount(int count);
174 173
175 // Returns the object id of the given policy object. 174 // Returns the object id of the given policy object.
176 const invalidation::ObjectId& GetPolicyObjectId(PolicyObject object) const; 175 const invalidation::ObjectId& GetPolicyObjectId(PolicyObject object) const;
177 176
178 // Get histogram samples for the given histogram.
179 scoped_ptr<base::HistogramSamples> GetHistogramSamples(
180 const std::string& name) const;
181
182 base::MessageLoop loop_; 177 base::MessageLoop loop_;
183 178
184 // Objects the invalidator depends on. 179 // Objects the invalidator depends on.
185 invalidation::FakeInvalidationService invalidation_service_; 180 invalidation::FakeInvalidationService invalidation_service_;
186 MockCloudPolicyStore store_; 181 MockCloudPolicyStore store_;
187 CloudPolicyCore core_; 182 CloudPolicyCore core_;
188 MockCloudPolicyClient* client_; 183 MockCloudPolicyClient* client_;
189 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; 184 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
190 base::SimpleTestClock* clock_; 185 base::SimpleTestClock* clock_;
191 186
192 // The invalidator which will be tested. 187 // The invalidator which will be tested.
193 scoped_ptr<CloudPolicyInvalidator> invalidator_; 188 scoped_ptr<CloudPolicyInvalidator> invalidator_;
194 189
195 // Object ids for the test policy objects. 190 // Object ids for the test policy objects.
196 invalidation::ObjectId object_id_a_; 191 invalidation::ObjectId object_id_a_;
197 invalidation::ObjectId object_id_b_; 192 invalidation::ObjectId object_id_b_;
198 193
199 // Fake policy values which are alternated to cause the store to report a 194 // Fake policy values which are alternated to cause the store to report a
200 // changed policy. 195 // changed policy.
201 const char* policy_value_a_; 196 const char* policy_value_a_;
202 const char* policy_value_b_; 197 const char* policy_value_b_;
203 198
204 // The currently used policy value. 199 // The currently used policy value.
205 const char* policy_value_cur_; 200 const char* policy_value_cur_;
206
207 // Stores starting histogram counts for kMetricPolicyRefresh.
208 scoped_ptr<base::HistogramSamples> refresh_samples_;
209
210 // Stores starting histogram counts for kMetricPolicyInvalidations.
211 scoped_ptr<base::HistogramSamples> invalidations_samples_;
212 }; 201 };
213 202
214 CloudPolicyInvalidatorTest::CloudPolicyInvalidatorTest() 203 CloudPolicyInvalidatorTest::CloudPolicyInvalidatorTest()
215 : core_(PolicyNamespaceKey(dm_protocol::kChromeUserPolicyType, 204 : core_(PolicyNamespaceKey(dm_protocol::kChromeUserPolicyType,
216 std::string()), 205 std::string()),
217 &store_, 206 &store_,
218 loop_.message_loop_proxy()), 207 loop_.message_loop_proxy()),
219 client_(NULL), 208 client_(NULL),
220 task_runner_(new base::TestSimpleTaskRunner()), 209 task_runner_(new base::TestSimpleTaskRunner()),
221 clock_(new base::SimpleTestClock()), 210 clock_(new base::SimpleTestClock()),
222 object_id_a_(135, "asdf"), 211 object_id_a_(135, "asdf"),
223 object_id_b_(246, "zxcv"), 212 object_id_b_(246, "zxcv"),
224 policy_value_a_("asdf"), 213 policy_value_a_("asdf"),
225 policy_value_b_("zxcv"), 214 policy_value_b_("zxcv"),
226 policy_value_cur_(policy_value_a_) { 215 policy_value_cur_(policy_value_a_) {
227 clock_->SetNow( 216 clock_->SetNow(
228 base::Time::UnixEpoch() + base::TimeDelta::FromSeconds(987654321)); 217 base::Time::UnixEpoch() + base::TimeDelta::FromSeconds(987654321));
229 } 218 }
230 219
231 void CloudPolicyInvalidatorTest::SetUp() {
232 base::StatisticsRecorder::Initialize();
233 refresh_samples_ = GetHistogramSamples(kMetricPolicyRefresh);
234 invalidations_samples_ = GetHistogramSamples(kMetricPolicyInvalidations);
235 }
236
237 void CloudPolicyInvalidatorTest::TearDown() { 220 void CloudPolicyInvalidatorTest::TearDown() {
238 if (invalidator_) 221 if (invalidator_)
239 invalidator_->Shutdown(); 222 invalidator_->Shutdown();
240 core_.Disconnect(); 223 core_.Disconnect();
241 } 224 }
242 225
243 void CloudPolicyInvalidatorTest::StartInvalidator( 226 void CloudPolicyInvalidatorTest::StartInvalidator(
244 bool initialize, 227 bool initialize,
245 bool start_refresh_scheduler) { 228 bool start_refresh_scheduler) {
246 invalidator_.reset(new CloudPolicyInvalidator( 229 invalidator_.reset(new CloudPolicyInvalidator(
230 GetPolicyType(),
247 &core_, 231 &core_,
248 task_runner_, 232 task_runner_,
249 scoped_ptr<base::Clock>(clock_))); 233 scoped_ptr<base::Clock>(clock_)));
250 if (start_refresh_scheduler) { 234 if (start_refresh_scheduler) {
251 ConnectCore(); 235 ConnectCore();
252 StartRefreshScheduler(); 236 StartRefreshScheduler();
253 } 237 }
254 if (initialize) 238 if (initialize)
255 InitializeInvalidator(); 239 InitializeInvalidator();
256 } 240 }
(...skipping 23 matching lines...) Expand all
280 void CloudPolicyInvalidatorTest::DisconnectCore() { 264 void CloudPolicyInvalidatorTest::DisconnectCore() {
281 client_ = NULL; 265 client_ = NULL;
282 core_.Disconnect(); 266 core_.Disconnect();
283 } 267 }
284 268
285 void CloudPolicyInvalidatorTest::StorePolicy( 269 void CloudPolicyInvalidatorTest::StorePolicy(
286 PolicyObject object, 270 PolicyObject object,
287 int64 invalidation_version, 271 int64 invalidation_version,
288 bool policy_changed, 272 bool policy_changed,
289 const base::Time& time) { 273 const base::Time& time) {
290 enterprise_management::PolicyData* data = 274 em::PolicyData* data = new em::PolicyData();
291 new enterprise_management::PolicyData();
292 if (object != POLICY_OBJECT_NONE) { 275 if (object != POLICY_OBJECT_NONE) {
293 data->set_invalidation_source(GetPolicyObjectId(object).source()); 276 data->set_invalidation_source(GetPolicyObjectId(object).source());
294 data->set_invalidation_name(GetPolicyObjectId(object).name()); 277 data->set_invalidation_name(GetPolicyObjectId(object).name());
295 } 278 }
296 data->set_timestamp((time - base::Time::UnixEpoch()).InMilliseconds()); 279 data->set_timestamp((time - base::Time::UnixEpoch()).InMilliseconds());
297 // Swap the policy value if a policy change is desired. 280 // Swap the policy value if a policy change is desired.
298 if (policy_changed) 281 if (policy_changed)
299 policy_value_cur_ = policy_value_cur_ == policy_value_a_ ? 282 policy_value_cur_ = policy_value_cur_ == policy_value_a_ ?
300 policy_value_b_ : policy_value_a_; 283 policy_value_b_ : policy_value_a_;
301 data->set_policy_value(policy_value_cur_); 284 data->set_policy_value(policy_value_cur_);
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 364
382 EXPECT_FALSE(IsUnsent(invalidation)); 365 EXPECT_FALSE(IsUnsent(invalidation));
383 return !invalidation_service_.GetMockAckHandler()->IsUnacked(invalidation); 366 return !invalidation_service_.GetMockAckHandler()->IsUnacked(invalidation);
384 } 367 }
385 368
386 bool CloudPolicyInvalidatorTest::IsInvalidatorRegistered() { 369 bool CloudPolicyInvalidatorTest::IsInvalidatorRegistered() {
387 return !invalidation_service_.invalidator_registrar() 370 return !invalidation_service_.invalidator_registrar()
388 .GetRegisteredIds(invalidator_.get()).empty(); 371 .GetRegisteredIds(invalidator_.get()).empty();
389 } 372 }
390 373
391 base::HistogramBase::Count CloudPolicyInvalidatorTest::GetCount(
392 MetricPolicyRefresh metric) {
393 return GetHistogramSamples(kMetricPolicyRefresh)->GetCount(metric) -
394 refresh_samples_->GetCount(metric);
395 }
396
397 base::HistogramBase::Count CloudPolicyInvalidatorTest::GetInvalidationCount(
398 PolicyInvalidationType type) {
399 return GetHistogramSamples(kMetricPolicyInvalidations)->GetCount(type) -
400 invalidations_samples_->GetCount(type);
401 }
402
403 void CloudPolicyInvalidatorTest::AdvanceClock(base::TimeDelta delta) { 374 void CloudPolicyInvalidatorTest::AdvanceClock(base::TimeDelta delta) {
404 clock_->Advance(delta); 375 clock_->Advance(delta);
405 } 376 }
406 377
407 base::Time CloudPolicyInvalidatorTest::Now() { 378 base::Time CloudPolicyInvalidatorTest::Now() {
408 return clock_->Now(); 379 return clock_->Now();
409 } 380 }
410 381
411 int64 CloudPolicyInvalidatorTest::V(int version) { 382 int64 CloudPolicyInvalidatorTest::V(int version) {
412 return GetVersion(Now()) + version; 383 return GetVersion(Now()) + version;
413 } 384 }
414 385
415 int64 CloudPolicyInvalidatorTest::GetVersion(base::Time time) { 386 int64 CloudPolicyInvalidatorTest::GetVersion(base::Time time) {
416 return (time - base::Time::UnixEpoch()).InMicroseconds(); 387 return (time - base::Time::UnixEpoch()).InMicroseconds();
417 } 388 }
418 389
390 em::DeviceRegisterRequest::Type
391 CloudPolicyInvalidatorTest::GetPolicyType() const {
392 return UserCloudPolicyInvalidator::GetPolicyType();
393 }
394
419 bool CloudPolicyInvalidatorTest::CheckPolicyRefreshed(base::TimeDelta delay) { 395 bool CloudPolicyInvalidatorTest::CheckPolicyRefreshed(base::TimeDelta delay) {
420 base::TimeDelta max_delay = delay + base::TimeDelta::FromMilliseconds( 396 base::TimeDelta max_delay = delay + base::TimeDelta::FromMilliseconds(
421 CloudPolicyInvalidator::kMaxFetchDelayMin); 397 CloudPolicyInvalidator::kMaxFetchDelayMin);
422 398
423 if (task_runner_->GetPendingTasks().empty()) 399 if (task_runner_->GetPendingTasks().empty())
424 return false; 400 return false;
425 base::TimeDelta actual_delay = task_runner_->GetPendingTasks().back().delay; 401 base::TimeDelta actual_delay = task_runner_->GetPendingTasks().back().delay;
426 EXPECT_GE(actual_delay, delay); 402 EXPECT_GE(actual_delay, delay);
427 EXPECT_LE(actual_delay, max_delay); 403 EXPECT_LE(actual_delay, max_delay);
428 404
(...skipping 17 matching lines...) Expand all
446 base::RunLoop().RunUntilIdle(); 422 base::RunLoop().RunUntilIdle();
447 return testing::Mock::VerifyAndClearExpectations(client_); 423 return testing::Mock::VerifyAndClearExpectations(client_);
448 } 424 }
449 425
450 const invalidation::ObjectId& CloudPolicyInvalidatorTest::GetPolicyObjectId( 426 const invalidation::ObjectId& CloudPolicyInvalidatorTest::GetPolicyObjectId(
451 PolicyObject object) const { 427 PolicyObject object) const {
452 EXPECT_TRUE(object == POLICY_OBJECT_A || object == POLICY_OBJECT_B); 428 EXPECT_TRUE(object == POLICY_OBJECT_A || object == POLICY_OBJECT_B);
453 return object == POLICY_OBJECT_A ? object_id_a_ : object_id_b_; 429 return object == POLICY_OBJECT_A ? object_id_a_ : object_id_b_;
454 } 430 }
455 431
456 scoped_ptr<base::HistogramSamples>
457 CloudPolicyInvalidatorTest::GetHistogramSamples(
458 const std::string& name) const {
459 base::HistogramBase* histogram =
460 base::StatisticsRecorder::FindHistogram(name);
461 if (!histogram)
462 return scoped_ptr<base::HistogramSamples>(new base::SampleMap());
463 return histogram->SnapshotSamples();
464 }
465
466 TEST_F(CloudPolicyInvalidatorTest, Uninitialized) { 432 TEST_F(CloudPolicyInvalidatorTest, Uninitialized) {
467 // No invalidations should be processed if the invalidator is not initialized. 433 // No invalidations should be processed if the invalidator is not initialized.
468 StartInvalidator(false /* initialize */, true /* start_refresh_scheduler */); 434 StartInvalidator(false /* initialize */, true /* start_refresh_scheduler */);
469 StorePolicy(POLICY_OBJECT_A); 435 StorePolicy(POLICY_OBJECT_A);
470 EXPECT_FALSE(IsInvalidatorRegistered()); 436 EXPECT_FALSE(IsInvalidatorRegistered());
471 EXPECT_TRUE(IsUnsent(FireUnknownVersionInvalidation(POLICY_OBJECT_A))); 437 EXPECT_TRUE(IsUnsent(FireUnknownVersionInvalidation(POLICY_OBJECT_A)));
472 EXPECT_TRUE(CheckPolicyNotRefreshed()); 438 EXPECT_TRUE(CheckPolicyNotRefreshed());
473 } 439 }
474 440
475 TEST_F(CloudPolicyInvalidatorTest, RefreshSchedulerNotStarted) { 441 TEST_F(CloudPolicyInvalidatorTest, RefreshSchedulerNotStarted) {
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 StartRefreshScheduler(); 754 StartRefreshScheduler();
789 EXPECT_TRUE(CheckPolicyNotRefreshed()); 755 EXPECT_TRUE(CheckPolicyNotRefreshed());
790 EXPECT_TRUE(InvalidationsEnabled()); 756 EXPECT_TRUE(InvalidationsEnabled());
791 FireInvalidation(POLICY_OBJECT_A, V(5), "test"); 757 FireInvalidation(POLICY_OBJECT_A, V(5), "test");
792 EXPECT_TRUE(CheckInvalidationInfo(V(5), "test")); 758 EXPECT_TRUE(CheckInvalidationInfo(V(5), "test"));
793 EXPECT_TRUE(CheckPolicyRefreshed()); 759 EXPECT_TRUE(CheckPolicyRefreshed());
794 DisableInvalidationService(); 760 DisableInvalidationService();
795 EXPECT_FALSE(InvalidationsEnabled()); 761 EXPECT_FALSE(InvalidationsEnabled());
796 } 762 }
797 763
798 TEST_F(CloudPolicyInvalidatorTest, RefreshMetricsUnregistered) { 764 class CloudPolicyInvalidatorUserTypedTest
765 : public CloudPolicyInvalidatorTest,
766 public testing::WithParamInterface<em::DeviceRegisterRequest::Type> {
767 protected:
768 CloudPolicyInvalidatorUserTypedTest();
769 virtual ~CloudPolicyInvalidatorUserTypedTest();
770
771 // CloudPolicyInvalidatorTest:
772 virtual void SetUp() OVERRIDE;
773
774 // Get the current count for the given metric.
775 base::HistogramBase::Count GetCount(MetricPolicyRefresh metric);
776 base::HistogramBase::Count GetInvalidationCount(PolicyInvalidationType type);
777
778 private:
779 // CloudPolicyInvalidatorTest:
780 virtual em::DeviceRegisterRequest::Type GetPolicyType() const OVERRIDE;
781
782 // Get histogram samples for the given histogram.
783 scoped_ptr<base::HistogramSamples> GetHistogramSamples(
784 const std::string& name) const;
785
786 // Stores starting histogram counts for kMetricPolicyRefresh.
787 scoped_ptr<base::HistogramSamples> refresh_samples_;
788
789 // Stores starting histogram counts for kMetricPolicyInvalidations.
790 scoped_ptr<base::HistogramSamples> invalidations_samples_;
791
792 DISALLOW_COPY_AND_ASSIGN(CloudPolicyInvalidatorUserTypedTest);
793 };
794
795 CloudPolicyInvalidatorUserTypedTest::CloudPolicyInvalidatorUserTypedTest() {
796 }
797
798 CloudPolicyInvalidatorUserTypedTest::~CloudPolicyInvalidatorUserTypedTest() {
799 }
800
801 void CloudPolicyInvalidatorUserTypedTest::SetUp() {
802 base::StatisticsRecorder::Initialize();
803 refresh_samples_ = GetHistogramSamples(
804 GetPolicyType() == em::DeviceRegisterRequest::DEVICE ?
805 kMetricDevicePolicyRefresh : kMetricUserPolicyRefresh);
806 invalidations_samples_ = GetHistogramSamples(
807 GetPolicyType() == em::DeviceRegisterRequest::DEVICE ?
808 kMetricDevicePolicyInvalidations : kMetricUserPolicyInvalidations);
809 }
810
811 base::HistogramBase::Count CloudPolicyInvalidatorUserTypedTest::GetCount(
812 MetricPolicyRefresh metric) {
813 return GetHistogramSamples(
814 GetPolicyType() == em::DeviceRegisterRequest::DEVICE ?
815 kMetricDevicePolicyRefresh : kMetricUserPolicyRefresh)->
816 GetCount(metric) - refresh_samples_->GetCount(metric);
817 }
818
819 base::HistogramBase::Count
820 CloudPolicyInvalidatorUserTypedTest::GetInvalidationCount(
821 PolicyInvalidationType type) {
822 return GetHistogramSamples(
823 GetPolicyType() == em::DeviceRegisterRequest::DEVICE ?
824 kMetricDevicePolicyInvalidations : kMetricUserPolicyInvalidations)->
825 GetCount(type) - invalidations_samples_->GetCount(type);
826 }
827
828 em::DeviceRegisterRequest::Type
829 CloudPolicyInvalidatorUserTypedTest::GetPolicyType() const {
830 return GetParam();
831 }
832
833 scoped_ptr<base::HistogramSamples>
834 CloudPolicyInvalidatorUserTypedTest::GetHistogramSamples(
835 const std::string& name) const {
836 base::HistogramBase* histogram =
837 base::StatisticsRecorder::FindHistogram(name);
838 if (!histogram)
839 return scoped_ptr<base::HistogramSamples>(new base::SampleMap());
840 return histogram->SnapshotSamples();
841 }
842
843 TEST_P(CloudPolicyInvalidatorUserTypedTest, RefreshMetricsUnregistered) {
799 // Store loads occurring before invalidation registration are not counted. 844 // Store loads occurring before invalidation registration are not counted.
800 StartInvalidator(); 845 StartInvalidator();
801 StorePolicy(POLICY_OBJECT_NONE, 0, false /* policy_changed */); 846 StorePolicy(POLICY_OBJECT_NONE, 0, false /* policy_changed */);
802 StorePolicy(POLICY_OBJECT_NONE, 0, true /* policy_changed */); 847 StorePolicy(POLICY_OBJECT_NONE, 0, true /* policy_changed */);
803 EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_CHANGED)); 848 EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_CHANGED));
804 EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_CHANGED_NO_INVALIDATIONS)); 849 EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_CHANGED_NO_INVALIDATIONS));
805 EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_UNCHANGED)); 850 EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_UNCHANGED));
806 EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_CHANGED)); 851 EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_CHANGED));
807 EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_UNCHANGED)); 852 EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_UNCHANGED));
808 } 853 }
809 854
810 TEST_F(CloudPolicyInvalidatorTest, RefreshMetricsNoInvalidations) { 855 TEST_P(CloudPolicyInvalidatorUserTypedTest, RefreshMetricsNoInvalidations) {
811 // Store loads occurring while registered should be differentiated depending 856 // Store loads occurring while registered should be differentiated depending
812 // on whether the invalidation service was enabled or not. 857 // on whether the invalidation service was enabled or not.
813 StorePolicy(POLICY_OBJECT_A); 858 StorePolicy(POLICY_OBJECT_A);
814 StartInvalidator(); 859 StartInvalidator();
815 860
816 // Initially, invalidations have not been enabled past the grace period, so 861 // Initially, invalidations have not been enabled past the grace period, so
817 // invalidations are OFF. 862 // invalidations are OFF.
818 StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */); 863 StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */);
819 StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */); 864 StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */);
820 EXPECT_EQ(1, GetCount(METRIC_POLICY_REFRESH_CHANGED_NO_INVALIDATIONS)); 865 EXPECT_EQ(1, GetCount(METRIC_POLICY_REFRESH_CHANGED_NO_INVALIDATIONS));
(...skipping 30 matching lines...) Expand all
851 StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */); 896 StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */);
852 StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */); 897 StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */);
853 898
854 EXPECT_EQ(2, GetCount(METRIC_POLICY_REFRESH_CHANGED)); 899 EXPECT_EQ(2, GetCount(METRIC_POLICY_REFRESH_CHANGED));
855 EXPECT_EQ(4, GetCount(METRIC_POLICY_REFRESH_CHANGED_NO_INVALIDATIONS)); 900 EXPECT_EQ(4, GetCount(METRIC_POLICY_REFRESH_CHANGED_NO_INVALIDATIONS));
856 EXPECT_EQ(6, GetCount(METRIC_POLICY_REFRESH_UNCHANGED)); 901 EXPECT_EQ(6, GetCount(METRIC_POLICY_REFRESH_UNCHANGED));
857 EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_CHANGED)); 902 EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_CHANGED));
858 EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_UNCHANGED)); 903 EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_UNCHANGED));
859 } 904 }
860 905
861 TEST_F(CloudPolicyInvalidatorTest, RefreshMetricsInvalidation) { 906 TEST_P(CloudPolicyInvalidatorUserTypedTest, RefreshMetricsInvalidation) {
862 // Store loads after an invalidation are counted as invalidated, even if 907 // Store loads after an invalidation are counted as invalidated, even if
863 // the loads do not result in the invalidation being acknowledged. 908 // the loads do not result in the invalidation being acknowledged.
864 StartInvalidator(); 909 StartInvalidator();
865 StorePolicy(POLICY_OBJECT_A); 910 StorePolicy(POLICY_OBJECT_A);
866 AdvanceClock(base::TimeDelta::FromSeconds( 911 AdvanceClock(base::TimeDelta::FromSeconds(
867 CloudPolicyInvalidator::kInvalidationGracePeriod)); 912 CloudPolicyInvalidator::kInvalidationGracePeriod));
868 FireInvalidation(POLICY_OBJECT_A, V(5), "test"); 913 FireInvalidation(POLICY_OBJECT_A, V(5), "test");
869 StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */); 914 StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */);
870 StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */); 915 StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */);
871 StorePolicy(POLICY_OBJECT_A, V(5), true /* policy_changed */); 916 StorePolicy(POLICY_OBJECT_A, V(5), true /* policy_changed */);
872 917
873 // Store loads after the invalidation is complete are not counted as 918 // Store loads after the invalidation is complete are not counted as
874 // invalidated. 919 // invalidated.
875 StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */); 920 StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */);
876 StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */); 921 StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */);
877 StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */); 922 StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */);
878 StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */); 923 StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */);
879 StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */); 924 StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */);
880 StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */); 925 StorePolicy(POLICY_OBJECT_A, 0, true /* policy_changed */);
881 StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */); 926 StorePolicy(POLICY_OBJECT_A, 0, false /* policy_changed */);
882 927
883 EXPECT_EQ(3, GetCount(METRIC_POLICY_REFRESH_CHANGED)); 928 EXPECT_EQ(3, GetCount(METRIC_POLICY_REFRESH_CHANGED));
884 EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_CHANGED_NO_INVALIDATIONS)); 929 EXPECT_EQ(0, GetCount(METRIC_POLICY_REFRESH_CHANGED_NO_INVALIDATIONS));
885 EXPECT_EQ(4, GetCount(METRIC_POLICY_REFRESH_UNCHANGED)); 930 EXPECT_EQ(4, GetCount(METRIC_POLICY_REFRESH_UNCHANGED));
886 EXPECT_EQ(2, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_CHANGED)); 931 EXPECT_EQ(2, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_CHANGED));
887 EXPECT_EQ(1, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_UNCHANGED)); 932 EXPECT_EQ(1, GetCount(METRIC_POLICY_REFRESH_INVALIDATED_UNCHANGED));
888 } 933 }
889 934
890 TEST_F(CloudPolicyInvalidatorTest, ExpiredInvalidations) { 935 TEST_P(CloudPolicyInvalidatorUserTypedTest, ExpiredInvalidations) {
891 StorePolicy(POLICY_OBJECT_A, 0, false, Now()); 936 StorePolicy(POLICY_OBJECT_A, 0, false, Now());
892 StartInvalidator(); 937 StartInvalidator();
893 938
894 // Invalidations fired before the last fetch time (adjusted by max time delta) 939 // Invalidations fired before the last fetch time (adjusted by max time delta)
895 // should be ignored. 940 // should be ignored.
896 base::Time time = Now() - base::TimeDelta::FromSeconds( 941 base::Time time = Now() - base::TimeDelta::FromSeconds(
897 CloudPolicyInvalidator::kMaxInvalidationTimeDelta + 300); 942 CloudPolicyInvalidator::kMaxInvalidationTimeDelta + 300);
898 syncer::Invalidation inv = 943 syncer::Invalidation inv =
899 FireInvalidation(POLICY_OBJECT_A, GetVersion(time), "test"); 944 FireInvalidation(POLICY_OBJECT_A, GetVersion(time), "test");
900 ASSERT_TRUE(IsInvalidationAcknowledged(inv)); 945 ASSERT_TRUE(IsInvalidationAcknowledged(inv));
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
941 ASSERT_TRUE(CheckPolicyRefreshedWithUnknownVersion()); 986 ASSERT_TRUE(CheckPolicyRefreshedWithUnknownVersion());
942 987
943 // Verify that received invalidations metrics are correct. 988 // Verify that received invalidations metrics are correct.
944 EXPECT_EQ(1, GetInvalidationCount(POLICY_INVALIDATION_TYPE_NO_PAYLOAD)); 989 EXPECT_EQ(1, GetInvalidationCount(POLICY_INVALIDATION_TYPE_NO_PAYLOAD));
945 EXPECT_EQ(3, GetInvalidationCount(POLICY_INVALIDATION_TYPE_NORMAL)); 990 EXPECT_EQ(3, GetInvalidationCount(POLICY_INVALIDATION_TYPE_NORMAL));
946 EXPECT_EQ(2, 991 EXPECT_EQ(2,
947 GetInvalidationCount(POLICY_INVALIDATION_TYPE_NO_PAYLOAD_EXPIRED)); 992 GetInvalidationCount(POLICY_INVALIDATION_TYPE_NO_PAYLOAD_EXPIRED));
948 EXPECT_EQ(2, GetInvalidationCount(POLICY_INVALIDATION_TYPE_EXPIRED)); 993 EXPECT_EQ(2, GetInvalidationCount(POLICY_INVALIDATION_TYPE_EXPIRED));
949 } 994 }
950 995
996 #if defined(OS_CHROMEOS)
997 INSTANTIATE_TEST_CASE_P(
998 CloudPolicyInvalidatorUserTypedTestInstance,
999 CloudPolicyInvalidatorUserTypedTest,
1000 testing::Values(em::DeviceRegisterRequest::USER,
1001 em::DeviceRegisterRequest::DEVICE));
1002 #elif defined(OS_ANDROID)
1003 INSTANTIATE_TEST_CASE_P(
1004 CloudPolicyInvalidatorUserTypedTestInstance,
1005 CloudPolicyInvalidatorUserTypedTest,
1006 testing::Values(em::DeviceRegisterRequest::ANDROID_BROWSER));
1007 #elif defined(OS_IOS)
1008 INSTANTIATE_TEST_CASE_P(
1009 CloudPolicyInvalidatorUserTypedTestInstance,
1010 CloudPolicyInvalidatorUserTypedTest,
1011 testing::Values(em::DeviceRegisterRequest::IOS_BROWSER));
1012 #else
1013 INSTANTIATE_TEST_CASE_P(
1014 CloudPolicyInvalidatorUserTypedTestInstance,
1015 CloudPolicyInvalidatorUserTypedTest,
1016 testing::Values(em::DeviceRegisterRequest::BROWSER));
1017 #endif
1018
951 } // namespace policy 1019 } // namespace policy
OLDNEW
« no previous file with comments | « chrome/browser/policy/cloud/cloud_policy_invalidator.cc ('k') | chrome/browser/policy/cloud/user_cloud_policy_invalidator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698