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

Side by Side Diff: components/network_time/network_time_tracker_unittest.cc

Issue 1835823002: network_time_tracker: add temporary time protocol. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: and iOS Created 4 years, 7 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/network_time/network_time_tracker.h" 5 #include "components/network_time/network_time_tracker.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility>
8 9
9 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
11 #include "base/message_loop/message_loop.h"
12 #include "base/strings/stringprintf.h"
10 #include "base/test/simple_test_clock.h" 13 #include "base/test/simple_test_clock.h"
11 #include "base/test/simple_test_tick_clock.h" 14 #include "base/test/simple_test_tick_clock.h"
15 #include "components/client_update_protocol/ecdsa.h"
12 #include "components/network_time/network_time_pref_names.h" 16 #include "components/network_time/network_time_pref_names.h"
13 #include "components/prefs/testing_pref_service.h" 17 #include "components/prefs/testing_pref_service.h"
18 #include "net/http/http_response_headers.h"
19 #include "net/test/embedded_test_server/embedded_test_server.h"
20 #include "net/test/embedded_test_server/http_response.h"
21 #include "net/url_request/url_fetcher.h"
22 #include "net/url_request/url_request_test_util.h"
14 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
15 24
16 namespace network_time { 25 namespace network_time {
17 26
18 class NetworkTimeTrackerTest : public testing::Test { 27 class NetworkTimeTrackerTest : public testing::Test {
19 public: 28 public:
20 ~NetworkTimeTrackerTest() override {} 29 ~NetworkTimeTrackerTest() override {}
21 30
22 void SetUp() override { 31 NetworkTimeTrackerTest()
32 : io_thread_("IO thread"),
33 clock_(new base::SimpleTestClock),
34 tick_clock_(new base::SimpleTestTickClock),
35 test_server_(new net::EmbeddedTestServer) {
36 base::Thread::Options thread_options;
37 thread_options.message_loop_type = base::MessageLoop::TYPE_IO;
38 EXPECT_TRUE(io_thread_.StartWithOptions(thread_options));
23 NetworkTimeTracker::RegisterPrefs(pref_service_.registry()); 39 NetworkTimeTracker::RegisterPrefs(pref_service_.registry());
24 40
25 clock_ = new base::SimpleTestClock(); 41 tracker_.reset(new NetworkTimeTracker(
26 tick_clock_ = new base::SimpleTestTickClock(); 42 std::unique_ptr<base::Clock>(clock_),
43 std::unique_ptr<base::TickClock>(tick_clock_), &pref_service_,
44 new net::TestURLRequestContextGetter(io_thread_.task_runner())));
45
27 // Do this to be sure that |is_null| returns false. 46 // Do this to be sure that |is_null| returns false.
28 clock_->Advance(base::TimeDelta::FromDays(111)); 47 clock_->Advance(base::TimeDelta::FromDays(111));
29 tick_clock_->Advance(base::TimeDelta::FromDays(222)); 48 tick_clock_->Advance(base::TimeDelta::FromDays(222));
30 49
31 tracker_.reset(new NetworkTimeTracker(
32 std::unique_ptr<base::Clock>(clock_),
33 std::unique_ptr<base::TickClock>(tick_clock_), &pref_service_));
34
35 // Can not be smaller than 15, it's the NowFromSystemTime() resolution. 50 // Can not be smaller than 15, it's the NowFromSystemTime() resolution.
36 resolution_ = base::TimeDelta::FromMilliseconds(17); 51 resolution_ = base::TimeDelta::FromMilliseconds(17);
37 latency_ = base::TimeDelta::FromMilliseconds(50); 52 latency_ = base::TimeDelta::FromMilliseconds(50);
38 adjustment_ = 7 * base::TimeDelta::FromMilliseconds(kTicksResolutionMs); 53 adjustment_ = 7 * base::TimeDelta::FromMilliseconds(kTicksResolutionMs);
39 } 54 }
40 55
56 void TearDown() override {
57 if (test_server_->Started()) {
58 ASSERT_TRUE(test_server_->ShutdownAndWaitUntilComplete());
59 }
mmenke 2016/05/02 17:47:28 This isn't needed - the test server will shut itse
mab 2016/05/05 19:57:42 Done.
60 io_thread_.Stop();
61 }
62
63 void WaitForFetch(uint32_t nonce) {
64 tracker_->query_signer_->OverrideNonceForTesting(1 /* key version */,
65 nonce);
66 while (tracker_->time_fetcher_) {
67 base::MessageLoop::current()->RunUntilIdle();
mmenke 2016/05/02 17:47:28 This works, but repeatedly spinning up a runloop w
mab 2016/05/05 19:57:42 Modification of prefs is an incidental effect of a
mmenke 2016/05/06 15:00:37 SGTM
mab 2016/05/06 18:12:37 I ended up doing this by simply passing in the Mes
68 }
69 }
70
41 // Replaces |tracker_| with a new object, while preserving the 71 // Replaces |tracker_| with a new object, while preserving the
42 // testing clocks. 72 // testing clocks.
43 void Reset() { 73 void Reset() {
44 base::SimpleTestClock* new_clock = new base::SimpleTestClock(); 74 base::SimpleTestClock* new_clock = new base::SimpleTestClock();
45 new_clock->SetNow(clock_->Now()); 75 new_clock->SetNow(clock_->Now());
46 base::SimpleTestTickClock* new_tick_clock = new base::SimpleTestTickClock(); 76 base::SimpleTestTickClock* new_tick_clock = new base::SimpleTestTickClock();
47 new_tick_clock->SetNowTicks(tick_clock_->NowTicks()); 77 new_tick_clock->SetNowTicks(tick_clock_->NowTicks());
48 clock_ = new_clock; 78 clock_ = new_clock;
49 tick_clock_= new_tick_clock; 79 tick_clock_= new_tick_clock;
50 tracker_.reset(new NetworkTimeTracker( 80 tracker_.reset(new NetworkTimeTracker(
51 std::unique_ptr<base::Clock>(clock_), 81 std::unique_ptr<base::Clock>(clock_),
52 std::unique_ptr<base::TickClock>(tick_clock_), &pref_service_)); 82 std::unique_ptr<base::TickClock>(tick_clock_), &pref_service_,
83 new net::TestURLRequestContextGetter(io_thread_.task_runner())));
84 }
85
86 // Returns a valid time response. Update as follows:
87 //
88 // curl http://clients2.google.com/time/1/current?cup2key=1:123123123
89 //
90 // where 1 is the key version and 123123123 is the nonce. Copy the nonce, the
91 // response, and the x-cup-server-proof header into the test.
92 static std::unique_ptr<net::test_server::HttpResponse>
93 GoodTimeResponseHandler(const net::test_server::HttpRequest& request) {
94 net::test_server::BasicHttpResponse* response =
95 new net::test_server::BasicHttpResponse();
96 response->set_code(net::HTTP_OK);
97 response->set_content(
98 ")]}'\n"
99 "{\"current_time_millis\":1461621971825,\"server_nonce\":-6."
100 "006853099049523E85}");
101 response->AddCustomHeader(
102 "x-cup-server-proof",
103 "304402202e0f24db1ea69f1bbe81da4108f381fcf7a2781c53cf7663cb47083cb5fe8e"
104 "fd"
105 "022009d2b67c0deceaaf849f7c529be96701ed5f15d5efcaf401a94e0801accc9832:"
106 "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
107 return std::unique_ptr<net::test_server::HttpResponse>(response);
108 }
109
110 static std::unique_ptr<net::test_server::HttpResponse>
111 BadSignatureResponseHandler(const net::test_server::HttpRequest& request) {
112 net::test_server::BasicHttpResponse* response =
113 new net::test_server::BasicHttpResponse();
114 response->set_code(net::HTTP_OK);
115 response->set_content("foo");
116 response->AddCustomHeader("x-cup-server-proof", "dead:beef");
117 return std::unique_ptr<net::test_server::HttpResponse>(response);
118 }
119
120 static std::unique_ptr<net::test_server::HttpResponse> ErrorResponseHandler(
121 const net::test_server::HttpRequest& request) {
122 net::test_server::BasicHttpResponse* response =
123 new net::test_server::BasicHttpResponse();
124 response->set_code(net::HTTP_INTERNAL_SERVER_ERROR);
125 return std::unique_ptr<net::test_server::HttpResponse>(response);
53 } 126 }
mmenke 2016/05/02 17:47:28 You should also test a network error (Response has
mab 2016/05/05 19:57:42 Done.
54 127
55 // Updates the notifier's time with the specified parameters. 128 // Updates the notifier's time with the specified parameters.
56 void UpdateNetworkTime(const base::Time& network_time, 129 void UpdateNetworkTime(const base::Time& network_time,
57 const base::TimeDelta& resolution, 130 const base::TimeDelta& resolution,
58 const base::TimeDelta& latency, 131 const base::TimeDelta& latency,
59 const base::TimeTicks& post_time) { 132 const base::TimeTicks& post_time) {
60 tracker_->UpdateNetworkTime( 133 tracker_->UpdateNetworkTime(
61 network_time, resolution, latency, post_time); 134 network_time, resolution, latency, post_time);
62 } 135 }
63 136
64 // Advances both the system clock and the tick clock. This should be used for 137 // Advances both the system clock and the tick clock. This should be used for
65 // the normal passage of time, i.e. when neither clock is doing anything odd. 138 // the normal passage of time, i.e. when neither clock is doing anything odd.
66 void AdvanceBoth(const base::TimeDelta& delta) { 139 void AdvanceBoth(const base::TimeDelta& delta) {
67 tick_clock_->Advance(delta); 140 tick_clock_->Advance(delta);
68 clock_->Advance(delta); 141 clock_->Advance(delta);
69 } 142 }
70 143
71 protected: 144 protected:
145 base::Thread io_thread_;
146 base::MessageLoop message_loop_;
72 base::TimeDelta resolution_; 147 base::TimeDelta resolution_;
73 base::TimeDelta latency_; 148 base::TimeDelta latency_;
74 base::TimeDelta adjustment_; 149 base::TimeDelta adjustment_;
75 base::SimpleTestClock* clock_; 150 base::SimpleTestClock* clock_;
76 base::SimpleTestTickClock* tick_clock_; 151 base::SimpleTestTickClock* tick_clock_;
77 TestingPrefServiceSimple pref_service_; 152 TestingPrefServiceSimple pref_service_;
78 std::unique_ptr<NetworkTimeTracker> tracker_; 153 std::unique_ptr<NetworkTimeTracker> tracker_;
154 std::unique_ptr<net::EmbeddedTestServer> test_server_;
79 }; 155 };
80 156
81 TEST_F(NetworkTimeTrackerTest, Uninitialized) { 157 TEST_F(NetworkTimeTrackerTest, Uninitialized) {
82 base::Time network_time; 158 base::Time network_time;
83 base::TimeDelta uncertainty; 159 base::TimeDelta uncertainty;
84 EXPECT_FALSE(tracker_->GetNetworkTime(&network_time, &uncertainty)); 160 EXPECT_FALSE(tracker_->GetNetworkTime(&network_time, &uncertainty));
85 } 161 }
86 162
87 TEST_F(NetworkTimeTrackerTest, LongPostingDelay) { 163 TEST_F(NetworkTimeTrackerTest, LongPostingDelay) {
88 // The request arrives at the server, which records the time. Advance the 164 // The request arrives at the server, which records the time. Advance the
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 EXPECT_GT(out_network_time + uncertainty / 2, clock_->Now()); 200 EXPECT_GT(out_network_time + uncertainty / 2, clock_->Now());
125 } 201 }
126 202
127 TEST_F(NetworkTimeTrackerTest, ClockIsWack) { 203 TEST_F(NetworkTimeTrackerTest, ClockIsWack) {
128 // Now let's assume the system clock is completely wrong. 204 // Now let's assume the system clock is completely wrong.
129 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90); 205 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90);
130 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, 206 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_,
131 tick_clock_->NowTicks()); 207 tick_clock_->NowTicks());
132 208
133 base::Time out_network_time; 209 base::Time out_network_time;
134 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, NULL)); 210 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr));
135 EXPECT_EQ(in_network_time, out_network_time); 211 EXPECT_EQ(in_network_time, out_network_time);
136 } 212 }
137 213
138 TEST_F(NetworkTimeTrackerTest, ClocksDivergeSlightly) { 214 TEST_F(NetworkTimeTrackerTest, ClocksDivergeSlightly) {
139 // The two clocks are allowed to diverge a little bit. 215 // The two clocks are allowed to diverge a little bit.
140 base::Time in_network_time = clock_->Now(); 216 base::Time in_network_time = clock_->Now();
141 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, 217 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_,
142 tick_clock_->NowTicks()); 218 tick_clock_->NowTicks());
143 219
144 base::TimeDelta small = base::TimeDelta::FromSeconds(30); 220 base::TimeDelta small = base::TimeDelta::FromSeconds(30);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 EXPECT_EQ(resolution_ + latency_ + adjustment_, uncertainty); 254 EXPECT_EQ(resolution_ + latency_ + adjustment_, uncertainty);
179 } 255 }
180 256
181 TEST_F(NetworkTimeTrackerTest, SpringForward) { 257 TEST_F(NetworkTimeTrackerTest, SpringForward) {
182 // Simulate the wall clock advancing faster than the tick clock. 258 // Simulate the wall clock advancing faster than the tick clock.
183 UpdateNetworkTime(clock_->Now(), resolution_, latency_, 259 UpdateNetworkTime(clock_->Now(), resolution_, latency_,
184 tick_clock_->NowTicks()); 260 tick_clock_->NowTicks());
185 tick_clock_->Advance(base::TimeDelta::FromSeconds(1)); 261 tick_clock_->Advance(base::TimeDelta::FromSeconds(1));
186 clock_->Advance(base::TimeDelta::FromDays(1)); 262 clock_->Advance(base::TimeDelta::FromDays(1));
187 base::Time out_network_time; 263 base::Time out_network_time;
188 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, NULL)); 264 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr));
189 } 265 }
190 266
191 TEST_F(NetworkTimeTrackerTest, FallBack) { 267 TEST_F(NetworkTimeTrackerTest, FallBack) {
192 // Simulate the wall clock running backward. 268 // Simulate the wall clock running backward.
193 UpdateNetworkTime(clock_->Now(), resolution_, latency_, 269 UpdateNetworkTime(clock_->Now(), resolution_, latency_,
194 tick_clock_->NowTicks()); 270 tick_clock_->NowTicks());
195 tick_clock_->Advance(base::TimeDelta::FromSeconds(1)); 271 tick_clock_->Advance(base::TimeDelta::FromSeconds(1));
196 clock_->Advance(base::TimeDelta::FromDays(-1)); 272 clock_->Advance(base::TimeDelta::FromDays(-1));
197 base::Time out_network_time; 273 base::Time out_network_time;
198 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, NULL)); 274 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr));
199 } 275 }
200 276
201 TEST_F(NetworkTimeTrackerTest, SuspendAndResume) { 277 TEST_F(NetworkTimeTrackerTest, SuspendAndResume) {
202 // Simulate the wall clock advancing while the tick clock stands still, as 278 // Simulate the wall clock advancing while the tick clock stands still, as
203 // would happen in a suspend+resume cycle. 279 // would happen in a suspend+resume cycle.
204 UpdateNetworkTime(clock_->Now(), resolution_, latency_, 280 UpdateNetworkTime(clock_->Now(), resolution_, latency_,
205 tick_clock_->NowTicks()); 281 tick_clock_->NowTicks());
206 clock_->Advance(base::TimeDelta::FromHours(1)); 282 clock_->Advance(base::TimeDelta::FromHours(1));
207 base::Time out_network_time; 283 base::Time out_network_time;
208 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, NULL)); 284 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr));
209 } 285 }
210 286
211 TEST_F(NetworkTimeTrackerTest, Serialize) { 287 TEST_F(NetworkTimeTrackerTest, Serialize) {
212 // Test that we can serialize and deserialize state and get consistent 288 // Test that we can serialize and deserialize state and get consistent
213 // results. 289 // results.
214 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90); 290 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90);
215 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, 291 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_,
216 tick_clock_->NowTicks()); 292 tick_clock_->NowTicks());
217 base::Time out_network_time; 293 base::Time out_network_time;
218 base::TimeDelta out_uncertainty; 294 base::TimeDelta out_uncertainty;
(...skipping 11 matching lines...) Expand all
230 } 306 }
231 307
232 TEST_F(NetworkTimeTrackerTest, DeserializeOldFormat) { 308 TEST_F(NetworkTimeTrackerTest, DeserializeOldFormat) {
233 // Test that deserializing old data (which do not record the uncertainty and 309 // Test that deserializing old data (which do not record the uncertainty and
234 // tick clock) causes the serialized data to be ignored. 310 // tick clock) causes the serialized data to be ignored.
235 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90); 311 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90);
236 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, 312 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_,
237 tick_clock_->NowTicks()); 313 tick_clock_->NowTicks());
238 314
239 base::Time out_network_time; 315 base::Time out_network_time;
240 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, NULL)); 316 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr));
241 double local, network; 317 double local, network;
242 const base::DictionaryValue* saved_prefs = 318 const base::DictionaryValue* saved_prefs =
243 pref_service_.GetDictionary(prefs::kNetworkTimeMapping); 319 pref_service_.GetDictionary(prefs::kNetworkTimeMapping);
244 saved_prefs->GetDouble("local", &local); 320 saved_prefs->GetDouble("local", &local);
245 saved_prefs->GetDouble("network", &network); 321 saved_prefs->GetDouble("network", &network);
246 base::DictionaryValue prefs; 322 base::DictionaryValue prefs;
247 prefs.SetDouble("local", local); 323 prefs.SetDouble("local", local);
248 prefs.SetDouble("network", network); 324 prefs.SetDouble("network", network);
249 pref_service_.Set(prefs::kNetworkTimeMapping, prefs); 325 pref_service_.Set(prefs::kNetworkTimeMapping, prefs);
250 Reset(); 326 Reset();
251 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, NULL)); 327 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr));
252 } 328 }
253 329
254 TEST_F(NetworkTimeTrackerTest, SerializeWithLongDelay) { 330 TEST_F(NetworkTimeTrackerTest, SerializeWithLongDelay) {
255 // Test that if the serialized data are more than a week old, they are 331 // Test that if the serialized data are more than a week old, they are
256 // discarded. 332 // discarded.
257 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90); 333 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90);
258 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, 334 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_,
259 tick_clock_->NowTicks()); 335 tick_clock_->NowTicks());
260 base::Time out_network_time; 336 base::Time out_network_time;
261 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, NULL)); 337 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr));
262 AdvanceBoth(base::TimeDelta::FromDays(8)); 338 AdvanceBoth(base::TimeDelta::FromDays(8));
263 Reset(); 339 Reset();
264 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, NULL)); 340 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr));
265 } 341 }
266 342
267 TEST_F(NetworkTimeTrackerTest, SerializeWithTickClockAdvance) { 343 TEST_F(NetworkTimeTrackerTest, SerializeWithTickClockAdvance) {
268 // Test that serialized data are discarded if the wall clock and tick clock 344 // Test that serialized data are discarded if the wall clock and tick clock
269 // have not advanced consistently since data were serialized. 345 // have not advanced consistently since data were serialized.
270 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90); 346 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90);
271 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, 347 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_,
272 tick_clock_->NowTicks()); 348 tick_clock_->NowTicks());
273 base::Time out_network_time; 349 base::Time out_network_time;
274 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, NULL)); 350 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr));
275 tick_clock_->Advance(base::TimeDelta::FromDays(1)); 351 tick_clock_->Advance(base::TimeDelta::FromDays(1));
276 Reset(); 352 Reset();
277 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, NULL)); 353 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr));
278 } 354 }
279 355
280 TEST_F(NetworkTimeTrackerTest, SerializeWithWallClockAdvance) { 356 TEST_F(NetworkTimeTrackerTest, SerializeWithWallClockAdvance) {
281 // Test that serialized data are discarded if the wall clock and tick clock 357 // Test that serialized data are discarded if the wall clock and tick clock
282 // have not advanced consistently since data were serialized. 358 // have not advanced consistently since data were serialized.
283 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90); 359 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90);
284 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, 360 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_,
285 tick_clock_->NowTicks()); 361 tick_clock_->NowTicks());
286 362
287 base::Time out_network_time; 363 base::Time out_network_time;
288 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, NULL)); 364 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr));
289 clock_->Advance(base::TimeDelta::FromDays(1)); 365 clock_->Advance(base::TimeDelta::FromDays(1));
290 Reset(); 366 Reset();
291 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, NULL)); 367 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr));
368 }
369
370 TEST_F(NetworkTimeTrackerTest, UpdateFromNetwork) {
371 base::Time out_network_time;
372 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr));
373
374 test_server_->RegisterRequestHandler(
375 base::Bind(&NetworkTimeTrackerTest::GoodTimeResponseHandler));
376 EXPECT_TRUE(test_server_->Start());
377 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/"));
378 tracker_->QueryTimeService();
379 WaitForFetch(123123123);
380
381 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr));
382 EXPECT_EQ(base::Time::UnixEpoch() +
383 base::TimeDelta::FromMilliseconds(1461621971825),
384 out_network_time);
385 // Should see no backoff in the success case.
386 EXPECT_TRUE(tracker_->query_timer_.IsRunning());
387 EXPECT_EQ(base::TimeDelta::FromMinutes(60),
388 tracker_->query_timer_.GetCurrentDelay());
389 }
390
391 TEST_F(NetworkTimeTrackerTest, NoNetworkQueryWhileSynced) {
392 base::Time in_network_time = clock_->Now();
393 UpdateNetworkTime(in_network_time, resolution_, latency_,
394 tick_clock_->NowTicks());
395 tracker_->QueryTimeService();
396 EXPECT_EQ(nullptr, tracker_->time_fetcher_); // No query should be started.
397 }
398
399 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkBadSignature) {
mmenke 2016/05/02 17:47:28 Seems like there are two cases we should care abou
mab 2016/05/05 19:57:42 It's a fair point that we should test good data +
mmenke 2016/05/05 20:23:54 I didn't suggest bad data + bad signature, I said
mab 2016/05/05 22:24:36 Ah, I see what you're saying. Done.
400 test_server_->RegisterRequestHandler(
401 base::Bind(&NetworkTimeTrackerTest::BadSignatureResponseHandler));
402 EXPECT_TRUE(test_server_->Start());
403 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/"));
404 tracker_->QueryTimeService();
405 WaitForFetch(123123123);
406
407 base::Time out_network_time;
408 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr));
409 EXPECT_TRUE(tracker_->query_timer_.IsRunning());
410 }
411
412 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkServerError) {
413 test_server_->RegisterRequestHandler(
414 base::Bind(&NetworkTimeTrackerTest::ErrorResponseHandler));
415 EXPECT_TRUE(test_server_->Start());
416 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/"));
417 tracker_->QueryTimeService();
418 WaitForFetch(123123123);
419
420 base::Time out_network_time;
421 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr));
422 // Should see backoff in the error case.
423 EXPECT_TRUE(tracker_->query_timer_.IsRunning());
424 EXPECT_EQ(base::TimeDelta::FromMinutes(120),
425 tracker_->query_timer_.GetCurrentDelay());
426 }
427
428 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkLargeResponse) {
429 test_server_->RegisterRequestHandler(
430 base::Bind(&NetworkTimeTrackerTest::GoodTimeResponseHandler));
431 EXPECT_TRUE(test_server_->Start());
432 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/"));
433
434 base::Time out_network_time;
435
436 tracker_->SetMaxResponseSizeForTesting(3);
437 tracker_->QueryTimeService();
438 WaitForFetch(123123123);
439 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr));
440
441 tracker_->SetMaxResponseSizeForTesting(1024);
442 tracker_->QueryTimeService();
443 WaitForFetch(123123123);
444 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr));
292 } 445 }
293 446
294 } // namespace network_time 447 } // namespace network_time
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698