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

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

Powered by Google App Engine
This is Rietveld 408576698