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

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

Issue 19733003: Implement cloud policy invalidations using the invalidation service framework. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 5 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
OLDNEW
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 "base/callback.h" 5 #include "base/callback.h"
6 #include "base/compiler_specific.h" 6 #include "base/compiler_specific.h"
7 #include "base/memory/ref_counted.h" 7 #include "base/memory/ref_counted.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/test/test_simple_task_runner.h" 10 #include "base/test/test_simple_task_runner.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 store_.policy_.reset(new em::PolicyData()); 46 store_.policy_.reset(new em::PolicyData());
47 store_.policy_->set_timestamp( 47 store_.policy_->set_timestamp(
48 ((base::Time::NowFromSystemTime() - base::TimeDelta::FromMinutes(1)) - 48 ((base::Time::NowFromSystemTime() - base::TimeDelta::FromMinutes(1)) -
49 base::Time::UnixEpoch()).InMilliseconds()); 49 base::Time::UnixEpoch()).InMilliseconds());
50 last_refresh_ = 50 last_refresh_ =
51 base::Time::UnixEpoch() + 51 base::Time::UnixEpoch() +
52 base::TimeDelta::FromMilliseconds(store_.policy_->timestamp()); 52 base::TimeDelta::FromMilliseconds(store_.policy_->timestamp());
53 } 53 }
54 54
55 CloudPolicyRefreshScheduler* CreateRefreshScheduler() { 55 CloudPolicyRefreshScheduler* CreateRefreshScheduler() {
56 return CreateRefreshScheduler(true /* invalidations_enabled */);
57 }
58
59 CloudPolicyRefreshScheduler* CreateRefreshScheduler(
60 bool invalidations_enabled) {
56 CloudPolicyRefreshScheduler* scheduler = 61 CloudPolicyRefreshScheduler* scheduler =
57 new CloudPolicyRefreshScheduler(&client_, &store_, task_runner_); 62 new CloudPolicyRefreshScheduler(&client_, &store_, task_runner_,
63 invalidations_enabled);
58 scheduler->SetRefreshDelay(kPolicyRefreshRate); 64 scheduler->SetRefreshDelay(kPolicyRefreshRate);
59 return scheduler; 65 return scheduler;
60 } 66 }
61 67
62 void NotifyIPAddressChanged() { 68 void NotifyIPAddressChanged() {
63 net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); 69 net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
64 loop_.RunUntilIdle(); 70 loop_.RunUntilIdle();
65 } 71 }
66 72
67 base::TimeDelta GetLastDelay() const { 73 base::TimeDelta GetLastDelay() const {
(...skipping 19 matching lines...) Expand all
87 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; 93 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_;
88 94
89 // Base time for the refresh that the scheduler should be using. 95 // Base time for the refresh that the scheduler should be using.
90 base::Time last_refresh_; 96 base::Time last_refresh_;
91 }; 97 };
92 98
93 TEST_F(CloudPolicyRefreshSchedulerTest, InitialRefreshNoPolicy) { 99 TEST_F(CloudPolicyRefreshSchedulerTest, InitialRefreshNoPolicy) {
94 store_.policy_.reset(); 100 store_.policy_.reset();
95 scoped_ptr<CloudPolicyRefreshScheduler> scheduler(CreateRefreshScheduler()); 101 scoped_ptr<CloudPolicyRefreshScheduler> scheduler(CreateRefreshScheduler());
96 EXPECT_FALSE(task_runner_->GetPendingTasks().empty()); 102 EXPECT_FALSE(task_runner_->GetPendingTasks().empty());
103 CheckTiming(CloudPolicyRefreshScheduler::kFirstRefreshDelayMs);
104 EXPECT_CALL(client_, FetchPolicy()).Times(1);
105 task_runner_->RunUntilIdle();
106 }
107
108 TEST_F(CloudPolicyRefreshSchedulerTest, InitialRefreshNoPolicyNoInvalidations) {
109 store_.policy_.reset();
110 scoped_ptr<CloudPolicyRefreshScheduler> scheduler(CreateRefreshScheduler(
111 false /* invalidations_enabled */));
112 EXPECT_FALSE(task_runner_->GetPendingTasks().empty());
97 EXPECT_EQ(GetLastDelay(), base::TimeDelta()); 113 EXPECT_EQ(GetLastDelay(), base::TimeDelta());
98 EXPECT_CALL(client_, FetchPolicy()).Times(1); 114 EXPECT_CALL(client_, FetchPolicy()).Times(1);
99 task_runner_->RunUntilIdle(); 115 task_runner_->RunUntilIdle();
100 } 116 }
101 117
102 TEST_F(CloudPolicyRefreshSchedulerTest, InitialRefreshUnmanaged) { 118 TEST_F(CloudPolicyRefreshSchedulerTest, InitialRefreshUnmanaged) {
103 store_.policy_->set_state(em::PolicyData::UNMANAGED); 119 store_.policy_->set_state(em::PolicyData::UNMANAGED);
104 scoped_ptr<CloudPolicyRefreshScheduler> scheduler(CreateRefreshScheduler()); 120 scoped_ptr<CloudPolicyRefreshScheduler> scheduler(CreateRefreshScheduler());
105 CheckTiming(CloudPolicyRefreshScheduler::kUnmanagedRefreshDelayMs); 121 CheckTiming(CloudPolicyRefreshScheduler::kUnmanagedRefreshDelayMs);
106 EXPECT_CALL(client_, FetchPolicy()).Times(1); 122 EXPECT_CALL(client_, FetchPolicy()).Times(1);
107 task_runner_->RunUntilIdle(); 123 task_runner_->RunUntilIdle();
108 } 124 }
109 125
110 TEST_F(CloudPolicyRefreshSchedulerTest, InitialRefreshManagedNotYetFetched) { 126 TEST_F(CloudPolicyRefreshSchedulerTest, InitialRefreshManagedNotYetFetched) {
111 scoped_ptr<CloudPolicyRefreshScheduler> scheduler(CreateRefreshScheduler()); 127 scoped_ptr<CloudPolicyRefreshScheduler> scheduler(CreateRefreshScheduler());
112 EXPECT_FALSE(task_runner_->GetPendingTasks().empty()); 128 EXPECT_FALSE(task_runner_->GetPendingTasks().empty());
129 CheckTiming(CloudPolicyRefreshScheduler::kFirstRefreshDelayMs);
130 EXPECT_CALL(client_, FetchPolicy()).Times(1);
131 task_runner_->RunUntilIdle();
132 }
133
134 TEST_F(CloudPolicyRefreshSchedulerTest,
135 InitialRefreshManagedNotYetFetchedNoInvalidations) {
136 scoped_ptr<CloudPolicyRefreshScheduler> scheduler(CreateRefreshScheduler(
137 false /* invalidations_enabled */));
138 EXPECT_FALSE(task_runner_->GetPendingTasks().empty());
113 EXPECT_EQ(GetLastDelay(), base::TimeDelta()); 139 EXPECT_EQ(GetLastDelay(), base::TimeDelta());
114 EXPECT_CALL(client_, FetchPolicy()).Times(1); 140 EXPECT_CALL(client_, FetchPolicy()).Times(1);
115 task_runner_->RunUntilIdle(); 141 task_runner_->RunUntilIdle();
116 } 142 }
117 143
118 TEST_F(CloudPolicyRefreshSchedulerTest, InitialRefreshManagedAlreadyFetched) { 144 TEST_F(CloudPolicyRefreshSchedulerTest, InitialRefreshManagedAlreadyFetched) {
119 last_refresh_ = base::Time::NowFromSystemTime(); 145 last_refresh_ = base::Time::NowFromSystemTime();
120 client_.SetPolicy(PolicyNamespaceKey(dm_protocol::kChromeUserPolicyType, 146 client_.SetPolicy(PolicyNamespaceKey(dm_protocol::kChromeUserPolicyType,
121 std::string()), 147 std::string()),
122 em::PolicyFetchResponse()); 148 em::PolicyFetchResponse());
123 scoped_ptr<CloudPolicyRefreshScheduler> scheduler(CreateRefreshScheduler()); 149 scoped_ptr<CloudPolicyRefreshScheduler> scheduler(CreateRefreshScheduler());
124 CheckTiming(kPolicyRefreshRate); 150 CheckTiming(kPolicyRefreshRate);
125 EXPECT_CALL(client_, FetchPolicy()).Times(1); 151 EXPECT_CALL(client_, FetchPolicy()).Times(1);
126 task_runner_->RunUntilIdle(); 152 task_runner_->RunUntilIdle();
127 } 153 }
128 154
129 TEST_F(CloudPolicyRefreshSchedulerTest, Unregistered) { 155 TEST_F(CloudPolicyRefreshSchedulerTest, Unregistered) {
130 client_.SetDMToken(std::string()); 156 client_.SetDMToken(std::string());
131 scoped_ptr<CloudPolicyRefreshScheduler> scheduler(CreateRefreshScheduler()); 157 scoped_ptr<CloudPolicyRefreshScheduler> scheduler(CreateRefreshScheduler());
132 client_.NotifyPolicyFetched(); 158 client_.NotifyPolicyFetched();
133 client_.NotifyRegistrationStateChanged(); 159 client_.NotifyRegistrationStateChanged();
134 client_.NotifyClientError(); 160 client_.NotifyClientError();
135 scheduler->SetRefreshDelay(12 * 60 * 60 * 1000); 161 scheduler->SetRefreshDelay(12 * 60 * 60 * 1000);
136 store_.NotifyStoreLoaded(); 162 store_.NotifyStoreLoaded();
137 store_.NotifyStoreError(); 163 store_.NotifyStoreError();
138 EXPECT_TRUE(task_runner_->GetPendingTasks().empty()); 164 EXPECT_TRUE(task_runner_->GetPendingTasks().empty());
139 } 165 }
140 166
167 TEST_F(CloudPolicyRefreshSchedulerTest, RefreshSoon) {
168 last_refresh_ = base::Time::NowFromSystemTime();
169 store_.policy_.reset();
170 scoped_ptr<CloudPolicyRefreshScheduler> scheduler(CreateRefreshScheduler());
171 EXPECT_FALSE(task_runner_->GetPendingTasks().empty());
172 CheckTiming(CloudPolicyRefreshScheduler::kFirstRefreshDelayMs);
173 scheduler->RefreshSoon();
174 EXPECT_FALSE(task_runner_->GetPendingTasks().empty());
175 CheckTiming(CloudPolicyRefreshScheduler::kFirstRefreshDelayMs);
176 EXPECT_CALL(client_, FetchPolicy()).Times(1);
177 task_runner_->RunUntilIdle();
178 }
179
180 TEST_F(CloudPolicyRefreshSchedulerTest, RefreshForInvalidation) {
181 last_refresh_ = base::Time::NowFromSystemTime();
182 store_.policy_.reset();
183 scoped_ptr<CloudPolicyRefreshScheduler> scheduler(CreateRefreshScheduler());
184 EXPECT_FALSE(task_runner_->GetPendingTasks().empty());
185 CheckTiming(CloudPolicyRefreshScheduler::kFirstRefreshDelayMs);
186 scheduler->RefreshForInvalidation();
187 EXPECT_FALSE(task_runner_->GetPendingTasks().empty());
188 EXPECT_EQ(GetLastDelay(), base::TimeDelta());
189 EXPECT_CALL(client_, FetchPolicy()).Times(1);
190 task_runner_->RunUntilIdle();
191 }
192
141 TEST_F(CloudPolicyRefreshSchedulerTest, RefreshSoonRateLimit) { 193 TEST_F(CloudPolicyRefreshSchedulerTest, RefreshSoonRateLimit) {
142 scoped_ptr<CloudPolicyRefreshScheduler> scheduler(CreateRefreshScheduler()); 194 scoped_ptr<CloudPolicyRefreshScheduler> scheduler(CreateRefreshScheduler());
143 // Max out the request rate. 195 // Max out the request rate.
144 for (int i = 0; i < 5; ++i) { 196 for (int i = 0; i < 5; ++i) {
145 EXPECT_CALL(client_, FetchPolicy()).Times(1); 197 EXPECT_CALL(client_, FetchPolicy()).Times(1);
146 scheduler->RefreshSoon(); 198 scheduler->RefreshSoon();
147 task_runner_->RunUntilIdle(); 199 task_runner_->RunUntilIdle();
148 Mock::VerifyAndClearExpectations(&client_); 200 Mock::VerifyAndClearExpectations(&client_);
149 } 201 }
150 // The next refresh is throttled. 202 // The next refresh is throttled.
151 EXPECT_CALL(client_, FetchPolicy()).Times(0); 203 EXPECT_CALL(client_, FetchPolicy()).Times(0);
152 scheduler->RefreshSoon(); 204 scheduler->RefreshSoon();
153 task_runner_->RunPendingTasks(); 205 task_runner_->RunPendingTasks();
154 Mock::VerifyAndClearExpectations(&client_); 206 Mock::VerifyAndClearExpectations(&client_);
155 } 207 }
156 208
157 class CloudPolicyRefreshSchedulerSteadyStateTest 209 class CloudPolicyRefreshSchedulerSteadyStateTest
158 : public CloudPolicyRefreshSchedulerTest { 210 : public CloudPolicyRefreshSchedulerTest {
159 protected: 211 protected:
160 CloudPolicyRefreshSchedulerSteadyStateTest() 212 CloudPolicyRefreshSchedulerSteadyStateTest()
161 : refresh_scheduler_(&client_, &store_, task_runner_) {} 213 : refresh_scheduler_(&client_, &store_, task_runner_,
214 true /* invalidations_enabled */) {}
162 215
163 virtual void SetUp() OVERRIDE { 216 virtual void SetUp() OVERRIDE {
164 refresh_scheduler_.SetRefreshDelay(kPolicyRefreshRate); 217 refresh_scheduler_.SetRefreshDelay(kPolicyRefreshRate);
165 CloudPolicyRefreshSchedulerTest::SetUp(); 218 CloudPolicyRefreshSchedulerTest::SetUp();
166 last_refresh_ = base::Time::NowFromSystemTime(); 219 last_refresh_ = base::Time::NowFromSystemTime();
167 client_.NotifyPolicyFetched(); 220 client_.NotifyPolicyFetched();
168 CheckTiming(kPolicyRefreshRate); 221 CheckTiming(kPolicyRefreshRate);
169 } 222 }
170 223
171 CloudPolicyRefreshScheduler refresh_scheduler_; 224 CloudPolicyRefreshScheduler refresh_scheduler_;
172 }; 225 };
173 226
174 TEST_F(CloudPolicyRefreshSchedulerSteadyStateTest, OnPolicyFetched) { 227 TEST_F(CloudPolicyRefreshSchedulerSteadyStateTest, OnPolicyFetched) {
175 client_.NotifyPolicyFetched(); 228 client_.NotifyPolicyFetched();
176 CheckTiming(kPolicyRefreshRate); 229 CheckTiming(kPolicyRefreshRate);
177 } 230 }
178 231
179 TEST_F(CloudPolicyRefreshSchedulerSteadyStateTest, OnRegistrationStateChanged) { 232 TEST_F(CloudPolicyRefreshSchedulerSteadyStateTest, OnRegistrationStateChanged) {
180 client_.SetDMToken("new_token"); 233 client_.SetDMToken("new_token");
181 client_.NotifyRegistrationStateChanged(); 234 client_.NotifyRegistrationStateChanged();
182 EXPECT_EQ(GetLastDelay(), base::TimeDelta()); 235 CheckTiming(CloudPolicyRefreshScheduler::kFirstRefreshDelayMs);
183 236
184 task_runner_->ClearPendingTasks(); 237 task_runner_->ClearPendingTasks();
185 client_.SetDMToken(std::string()); 238 client_.SetDMToken(std::string());
186 client_.NotifyRegistrationStateChanged(); 239 client_.NotifyRegistrationStateChanged();
187 EXPECT_TRUE(task_runner_->GetPendingTasks().empty()); 240 EXPECT_TRUE(task_runner_->GetPendingTasks().empty());
188 } 241 }
189 242
190 TEST_F(CloudPolicyRefreshSchedulerSteadyStateTest, OnStoreLoaded) { 243 TEST_F(CloudPolicyRefreshSchedulerSteadyStateTest, OnStoreLoaded) {
191 store_.NotifyStoreLoaded(); 244 store_.NotifyStoreLoaded();
192 CheckTiming(kPolicyRefreshRate); 245 CheckTiming(kPolicyRefreshRate);
(...skipping 18 matching lines...) Expand all
211 refresh_scheduler_.SetRefreshDelay(delay_long_ms); 264 refresh_scheduler_.SetRefreshDelay(delay_long_ms);
212 CheckTiming(CloudPolicyRefreshScheduler::kRefreshDelayMaxMs); 265 CheckTiming(CloudPolicyRefreshScheduler::kRefreshDelayMaxMs);
213 } 266 }
214 267
215 TEST_F(CloudPolicyRefreshSchedulerSteadyStateTest, OnIPAddressChanged) { 268 TEST_F(CloudPolicyRefreshSchedulerSteadyStateTest, OnIPAddressChanged) {
216 NotifyIPAddressChanged(); 269 NotifyIPAddressChanged();
217 CheckTiming(kPolicyRefreshRate); 270 CheckTiming(kPolicyRefreshRate);
218 271
219 client_.SetStatus(DM_STATUS_REQUEST_FAILED); 272 client_.SetStatus(DM_STATUS_REQUEST_FAILED);
220 NotifyIPAddressChanged(); 273 NotifyIPAddressChanged();
221 EXPECT_EQ(GetLastDelay(), base::TimeDelta()); 274 CheckTiming(CloudPolicyRefreshScheduler::kFirstRefreshDelayMs);
222 } 275 }
223 276
224 struct ClientErrorTestParam { 277 struct ClientErrorTestParam {
225 DeviceManagementStatus client_error; 278 DeviceManagementStatus client_error;
226 int64 expected_delay_ms; 279 int64 expected_delay_ms;
227 int backoff_factor; 280 int backoff_factor;
228 }; 281 };
229 282
230 static const ClientErrorTestParam kClientErrorTestCases[] = { 283 static const ClientErrorTestParam kClientErrorTestCases[] = {
231 { DM_STATUS_REQUEST_INVALID, 284 { DM_STATUS_REQUEST_INVALID,
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 EXPECT_EQ(base::TimeDelta(), GetLastDelay()); 338 EXPECT_EQ(base::TimeDelta(), GetLastDelay());
286 EXPECT_TRUE(task_runner_->GetPendingTasks().empty()); 339 EXPECT_TRUE(task_runner_->GetPendingTasks().empty());
287 } 340 }
288 } 341 }
289 342
290 INSTANTIATE_TEST_CASE_P(CloudPolicyRefreshSchedulerClientErrorTest, 343 INSTANTIATE_TEST_CASE_P(CloudPolicyRefreshSchedulerClientErrorTest,
291 CloudPolicyRefreshSchedulerClientErrorTest, 344 CloudPolicyRefreshSchedulerClientErrorTest,
292 testing::ValuesIn(kClientErrorTestCases)); 345 testing::ValuesIn(kClientErrorTestCases));
293 346
294 } // namespace policy 347 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698