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

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

Issue 11299305: Break CloudPolicyRefreshScheduler's dependency on PrefService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address review feedback Created 8 years 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
« no previous file with comments | « chrome/browser/policy/cloud_policy_refresh_scheduler.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.h" 9 #include "base/message_loop.h"
10 #include "chrome/browser/policy/cloud_policy_refresh_scheduler.h" 10 #include "chrome/browser/policy/cloud_policy_refresh_scheduler.h"
11 #include "chrome/browser/policy/mock_cloud_policy_client.h" 11 #include "chrome/browser/policy/mock_cloud_policy_client.h"
12 #include "chrome/browser/policy/mock_cloud_policy_store.h" 12 #include "chrome/browser/policy/mock_cloud_policy_store.h"
13 #include "chrome/browser/policy/test_task_runner.h" 13 #include "chrome/browser/policy/test_task_runner.h"
14 #include "chrome/browser/prefs/browser_prefs.h" 14 #include "chrome/browser/prefs/browser_prefs.h"
15 #include "chrome/common/pref_names.h" 15 #include "policy/policy_constants.h"
16 #include "chrome/test/base/testing_pref_service.h"
17 #include "testing/gmock/include/gmock/gmock.h" 16 #include "testing/gmock/include/gmock/gmock.h"
18 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
19 18
20 namespace em = enterprise_management; 19 namespace em = enterprise_management;
21 20
22 using testing::DoAll; 21 using testing::DoAll;
23 using testing::Return; 22 using testing::Return;
24 using testing::SaveArg; 23 using testing::SaveArg;
25 using testing::_; 24 using testing::_;
26 25
27 namespace policy { 26 namespace policy {
28 27
29 namespace { 28 namespace {
30 const int64 kPolicyRefreshRate = 4 * 60 * 60 * 1000; 29 const int64 kPolicyRefreshRate = 4 * 60 * 60 * 1000;
31 } // namespace 30 } // namespace
32 31
33 class CloudPolicyRefreshSchedulerTest : public testing::Test { 32 class CloudPolicyRefreshSchedulerTest : public testing::Test {
34 protected: 33 protected:
35 CloudPolicyRefreshSchedulerTest() 34 CloudPolicyRefreshSchedulerTest()
36 : task_runner_(new TestTaskRunner()), 35 : task_runner_(new TestTaskRunner()),
37 network_change_notifier_(net::NetworkChangeNotifier::CreateMock()) { 36 network_change_notifier_(net::NetworkChangeNotifier::CreateMock()) {}
38 chrome::RegisterLocalState(&prefs_);
39 prefs_.SetInteger(prefs::kUserPolicyRefreshRate, kPolicyRefreshRate);
40 }
41 37
42 virtual void SetUp() OVERRIDE { 38 virtual void SetUp() OVERRIDE {
43 client_.SetDMToken("token"); 39 client_.SetDMToken("token");
44 40
45 // Set up the protobuf timestamp to be one minute in the past. Since the 41 // Set up the protobuf timestamp to be one minute in the past. Since the
46 // protobuf field only has millisecond precision, we convert the actual 42 // protobuf field only has millisecond precision, we convert the actual
47 // value back to get a millisecond-clamped time stamp for the checks below. 43 // value back to get a millisecond-clamped time stamp for the checks below.
48 store_.policy_.reset(new em::PolicyData()); 44 store_.policy_.reset(new em::PolicyData());
49 store_.policy_->set_timestamp( 45 store_.policy_->set_timestamp(
50 ((base::Time::NowFromSystemTime() - base::TimeDelta::FromMinutes(1)) - 46 ((base::Time::NowFromSystemTime() - base::TimeDelta::FromMinutes(1)) -
51 base::Time::UnixEpoch()).InMilliseconds()); 47 base::Time::UnixEpoch()).InMilliseconds());
52 last_refresh_ = 48 last_refresh_ =
53 base::Time::UnixEpoch() + 49 base::Time::UnixEpoch() +
54 base::TimeDelta::FromMilliseconds(store_.policy_->timestamp()); 50 base::TimeDelta::FromMilliseconds(store_.policy_->timestamp());
55 51
56 // Keep track of when the last task was posted. 52 // Keep track of when the last task was posted.
57 EXPECT_CALL(*task_runner_, PostDelayedTask(_, _, _)) 53 EXPECT_CALL(*task_runner_, PostDelayedTask(_, _, _))
58 .WillRepeatedly(DoAll(SaveArg<1>(&last_callback_), 54 .WillRepeatedly(DoAll(SaveArg<1>(&last_callback_),
59 SaveArg<2>(&last_delay_), 55 SaveArg<2>(&last_delay_),
60 Return(true))); 56 Return(true)));
61 } 57 }
62 58
63 CloudPolicyRefreshScheduler* CreateRefreshScheduler() { 59 CloudPolicyRefreshScheduler* CreateRefreshScheduler() {
64 return new CloudPolicyRefreshScheduler(&client_, &store_, &prefs_, 60 CloudPolicyRefreshScheduler* scheduler =
65 prefs::kUserPolicyRefreshRate, 61 new CloudPolicyRefreshScheduler(&client_, &store_, task_runner_);
66 task_runner_); 62 scheduler->SetRefreshDelay(kPolicyRefreshRate);
63 return scheduler;
67 } 64 }
68 65
69 void NotifyIPAddressChanged() { 66 void NotifyIPAddressChanged() {
70 net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); 67 net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
71 loop_.RunUntilIdle(); 68 loop_.RunUntilIdle();
72 } 69 }
73 70
74 void CheckTiming(int64 expected_delay_ms) { 71 void CheckTiming(int64 expected_delay_ms) {
75 base::Time now(base::Time::NowFromSystemTime()); 72 base::Time now(base::Time::NowFromSystemTime());
76 base::TimeDelta expected_delay( 73 base::TimeDelta expected_delay(
77 base::TimeDelta::FromMilliseconds(expected_delay_ms)); 74 base::TimeDelta::FromMilliseconds(expected_delay_ms));
78 EXPECT_GE(last_delay_, expected_delay - (now - last_refresh_)); 75 EXPECT_GE(last_delay_, expected_delay - (now - last_refresh_));
79 EXPECT_LE(last_delay_, expected_delay); 76 EXPECT_LE(last_delay_, expected_delay);
80 } 77 }
81 78
82 MessageLoop loop_; 79 MessageLoop loop_;
83 MockCloudPolicyClient client_; 80 MockCloudPolicyClient client_;
84 MockCloudPolicyStore store_; 81 MockCloudPolicyStore store_;
85 TestingPrefService prefs_;
86 scoped_refptr<TestTaskRunner> task_runner_; 82 scoped_refptr<TestTaskRunner> task_runner_;
87 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; 83 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_;
88 84
89 // Base time for the refresh that the scheduler should be using. 85 // Base time for the refresh that the scheduler should be using.
90 base::Time last_refresh_; 86 base::Time last_refresh_;
91 87
92 base::Closure last_callback_; 88 base::Closure last_callback_;
93 base::TimeDelta last_delay_; 89 base::TimeDelta last_delay_;
94 }; 90 };
95 91
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 last_callback_.Run(); 125 last_callback_.Run();
130 } 126 }
131 127
132 TEST_F(CloudPolicyRefreshSchedulerTest, Unregistered) { 128 TEST_F(CloudPolicyRefreshSchedulerTest, Unregistered) {
133 client_.SetDMToken(""); 129 client_.SetDMToken("");
134 EXPECT_CALL(*task_runner_, PostDelayedTask(_, _, _)).Times(0); 130 EXPECT_CALL(*task_runner_, PostDelayedTask(_, _, _)).Times(0);
135 scoped_ptr<CloudPolicyRefreshScheduler> scheduler(CreateRefreshScheduler()); 131 scoped_ptr<CloudPolicyRefreshScheduler> scheduler(CreateRefreshScheduler());
136 client_.NotifyPolicyFetched(); 132 client_.NotifyPolicyFetched();
137 client_.NotifyRegistrationStateChanged(); 133 client_.NotifyRegistrationStateChanged();
138 client_.NotifyClientError(); 134 client_.NotifyClientError();
135 scheduler->SetRefreshDelay(12 * 60 * 60 * 1000);
139 store_.NotifyStoreLoaded(); 136 store_.NotifyStoreLoaded();
140 store_.NotifyStoreError(); 137 store_.NotifyStoreError();
141 prefs_.SetInteger(prefs::kUserPolicyRefreshRate, 12 * 60 * 60 * 1000);
142 } 138 }
143 139
144 class CloudPolicyRefreshSchedulerSteadyStateTest 140 class CloudPolicyRefreshSchedulerSteadyStateTest
145 : public CloudPolicyRefreshSchedulerTest { 141 : public CloudPolicyRefreshSchedulerTest {
146 protected: 142 protected:
147 CloudPolicyRefreshSchedulerSteadyStateTest() 143 CloudPolicyRefreshSchedulerSteadyStateTest()
148 : refresh_scheduler_(&client_, &store_, &prefs_, 144 : refresh_scheduler_(&client_, &store_, task_runner_) {}
149 prefs::kUserPolicyRefreshRate, task_runner_) {}
150 145
151 virtual void SetUp() OVERRIDE { 146 virtual void SetUp() OVERRIDE {
147 refresh_scheduler_.SetRefreshDelay(kPolicyRefreshRate);
152 CloudPolicyRefreshSchedulerTest::SetUp(); 148 CloudPolicyRefreshSchedulerTest::SetUp();
153 last_refresh_ = base::Time::NowFromSystemTime(); 149 last_refresh_ = base::Time::NowFromSystemTime();
154 client_.NotifyPolicyFetched(); 150 client_.NotifyPolicyFetched();
155 CheckTiming(kPolicyRefreshRate); 151 CheckTiming(kPolicyRefreshRate);
156 } 152 }
157 153
158 CloudPolicyRefreshScheduler refresh_scheduler_; 154 CloudPolicyRefreshScheduler refresh_scheduler_;
159 }; 155 };
160 156
161 TEST_F(CloudPolicyRefreshSchedulerSteadyStateTest, OnPolicyFetched) { 157 TEST_F(CloudPolicyRefreshSchedulerSteadyStateTest, OnPolicyFetched) {
(...skipping 16 matching lines...) Expand all
178 CheckTiming(kPolicyRefreshRate); 174 CheckTiming(kPolicyRefreshRate);
179 } 175 }
180 176
181 TEST_F(CloudPolicyRefreshSchedulerSteadyStateTest, OnStoreError) { 177 TEST_F(CloudPolicyRefreshSchedulerSteadyStateTest, OnStoreError) {
182 EXPECT_CALL(*task_runner_, PostDelayedTask(_, _, _)).Times(0); 178 EXPECT_CALL(*task_runner_, PostDelayedTask(_, _, _)).Times(0);
183 store_.NotifyStoreError(); 179 store_.NotifyStoreError();
184 } 180 }
185 181
186 TEST_F(CloudPolicyRefreshSchedulerSteadyStateTest, RefreshDelayChange) { 182 TEST_F(CloudPolicyRefreshSchedulerSteadyStateTest, RefreshDelayChange) {
187 const int delay_short_ms = 5 * 60 * 1000; 183 const int delay_short_ms = 5 * 60 * 1000;
188 prefs_.SetInteger(prefs::kUserPolicyRefreshRate, delay_short_ms); 184 refresh_scheduler_.SetRefreshDelay(delay_short_ms);
189 CheckTiming(CloudPolicyRefreshScheduler::kRefreshDelayMinMs); 185 CheckTiming(CloudPolicyRefreshScheduler::kRefreshDelayMinMs);
190 186
191 const int delay_ms = 12 * 60 * 60 * 1000; 187 const int delay_ms = 12 * 60 * 60 * 1000;
192 prefs_.SetInteger(prefs::kUserPolicyRefreshRate, delay_ms); 188 refresh_scheduler_.SetRefreshDelay(delay_ms);
193 CheckTiming(delay_ms); 189 CheckTiming(delay_ms);
194 190
195 const int delay_long_ms = 2 * 24 * 60 * 60 * 1000; 191 const int delay_long_ms = 2 * 24 * 60 * 60 * 1000;
196 prefs_.SetInteger(prefs::kUserPolicyRefreshRate, delay_long_ms); 192 refresh_scheduler_.SetRefreshDelay(delay_long_ms);
197 CheckTiming(CloudPolicyRefreshScheduler::kRefreshDelayMaxMs); 193 CheckTiming(CloudPolicyRefreshScheduler::kRefreshDelayMaxMs);
198 } 194 }
199 195
200 TEST_F(CloudPolicyRefreshSchedulerSteadyStateTest, OnIPAddressChanged) { 196 TEST_F(CloudPolicyRefreshSchedulerSteadyStateTest, OnIPAddressChanged) {
201 NotifyIPAddressChanged(); 197 NotifyIPAddressChanged();
202 CheckTiming(kPolicyRefreshRate); 198 CheckTiming(kPolicyRefreshRate);
203 199
204 client_.SetStatus(DM_STATUS_REQUEST_FAILED); 200 client_.SetStatus(DM_STATUS_REQUEST_FAILED);
205 NotifyIPAddressChanged(); 201 NotifyIPAddressChanged();
206 EXPECT_EQ(last_delay_, base::TimeDelta()); 202 EXPECT_EQ(last_delay_, base::TimeDelta());
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 EXPECT_EQ(base::TimeDelta(), last_delay_); 267 EXPECT_EQ(base::TimeDelta(), last_delay_);
272 EXPECT_TRUE(last_callback_.is_null()); 268 EXPECT_TRUE(last_callback_.is_null());
273 } 269 }
274 } 270 }
275 271
276 INSTANTIATE_TEST_CASE_P(CloudPolicyRefreshSchedulerClientErrorTest, 272 INSTANTIATE_TEST_CASE_P(CloudPolicyRefreshSchedulerClientErrorTest,
277 CloudPolicyRefreshSchedulerClientErrorTest, 273 CloudPolicyRefreshSchedulerClientErrorTest,
278 testing::ValuesIn(kClientErrorTestCases)); 274 testing::ValuesIn(kClientErrorTestCases));
279 275
280 } // namespace policy 276 } // namespace policy
OLDNEW
« no previous file with comments | « chrome/browser/policy/cloud_policy_refresh_scheduler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698