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

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

Issue 2254433003: When network time is unavailable, record the reason in UMA (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix compile failure Created 4 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
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 <map> 7 #include <map>
8 #include <memory> 8 #include <memory>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 TestingPrefServiceSimple pref_service_; 225 TestingPrefServiceSimple pref_service_;
226 std::unique_ptr<base::FieldTrialList> field_trial_list_; 226 std::unique_ptr<base::FieldTrialList> field_trial_list_;
227 std::unique_ptr<NetworkTimeTracker> tracker_; 227 std::unique_ptr<NetworkTimeTracker> tracker_;
228 std::unique_ptr<net::EmbeddedTestServer> test_server_; 228 std::unique_ptr<net::EmbeddedTestServer> test_server_;
229 std::unique_ptr<base::test::ScopedFeatureList> scoped_feature_list_; 229 std::unique_ptr<base::test::ScopedFeatureList> scoped_feature_list_;
230 }; 230 };
231 231
232 TEST_F(NetworkTimeTrackerTest, Uninitialized) { 232 TEST_F(NetworkTimeTrackerTest, Uninitialized) {
233 base::Time network_time; 233 base::Time network_time;
234 base::TimeDelta uncertainty; 234 base::TimeDelta uncertainty;
235 EXPECT_FALSE(tracker_->GetNetworkTime(&network_time, &uncertainty)); 235 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC,
236 tracker_->GetNetworkTime(&network_time, &uncertainty));
236 } 237 }
237 238
238 TEST_F(NetworkTimeTrackerTest, LongPostingDelay) { 239 TEST_F(NetworkTimeTrackerTest, LongPostingDelay) {
239 // The request arrives at the server, which records the time. Advance the 240 // The request arrives at the server, which records the time. Advance the
240 // clock to simulate the latency of sending the reply, which we'll say for 241 // clock to simulate the latency of sending the reply, which we'll say for
241 // convenience is half the total latency. 242 // convenience is half the total latency.
242 base::Time in_network_time = clock_->Now(); 243 base::Time in_network_time = clock_->Now();
243 AdvanceBoth(latency_ / 2); 244 AdvanceBoth(latency_ / 2);
244 245
245 // Record the tick counter at the time the reply is received. At this point, 246 // Record the tick counter at the time the reply is received. At this point,
246 // we would post UpdateNetworkTime to be run on the browser thread. 247 // we would post UpdateNetworkTime to be run on the browser thread.
247 base::TimeTicks posting_time = tick_clock_->NowTicks(); 248 base::TimeTicks posting_time = tick_clock_->NowTicks();
248 249
249 // Simulate that it look a long time (1888us) for the browser thread to get 250 // Simulate that it look a long time (1888us) for the browser thread to get
250 // around to executing the update. 251 // around to executing the update.
251 AdvanceBoth(base::TimeDelta::FromMicroseconds(1888)); 252 AdvanceBoth(base::TimeDelta::FromMicroseconds(1888));
252 UpdateNetworkTime(in_network_time, resolution_, latency_, posting_time); 253 UpdateNetworkTime(in_network_time, resolution_, latency_, posting_time);
253 254
254 base::Time out_network_time; 255 base::Time out_network_time;
255 base::TimeDelta uncertainty; 256 base::TimeDelta uncertainty;
256 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, &uncertainty)); 257 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE,
258 tracker_->GetNetworkTime(&out_network_time, &uncertainty));
257 EXPECT_EQ(resolution_ + latency_ + adjustment_, uncertainty); 259 EXPECT_EQ(resolution_ + latency_ + adjustment_, uncertainty);
258 EXPECT_EQ(clock_->Now(), out_network_time); 260 EXPECT_EQ(clock_->Now(), out_network_time);
259 } 261 }
260 262
261 TEST_F(NetworkTimeTrackerTest, LopsidedLatency) { 263 TEST_F(NetworkTimeTrackerTest, LopsidedLatency) {
262 // Simulate that the server received the request instantaneously, and that all 264 // Simulate that the server received the request instantaneously, and that all
263 // of the latency was in sending the reply. (This contradicts the assumption 265 // of the latency was in sending the reply. (This contradicts the assumption
264 // in the code.) 266 // in the code.)
265 base::Time in_network_time = clock_->Now(); 267 base::Time in_network_time = clock_->Now();
266 AdvanceBoth(latency_); 268 AdvanceBoth(latency_);
267 UpdateNetworkTime(in_network_time, resolution_, latency_, 269 UpdateNetworkTime(in_network_time, resolution_, latency_,
268 tick_clock_->NowTicks()); 270 tick_clock_->NowTicks());
269 271
270 // But, the answer is still within the uncertainty bounds! 272 // But, the answer is still within the uncertainty bounds!
271 base::Time out_network_time; 273 base::Time out_network_time;
272 base::TimeDelta uncertainty; 274 base::TimeDelta uncertainty;
273 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, &uncertainty)); 275 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE,
276 tracker_->GetNetworkTime(&out_network_time, &uncertainty));
274 EXPECT_LT(out_network_time - uncertainty / 2, clock_->Now()); 277 EXPECT_LT(out_network_time - uncertainty / 2, clock_->Now());
275 EXPECT_GT(out_network_time + uncertainty / 2, clock_->Now()); 278 EXPECT_GT(out_network_time + uncertainty / 2, clock_->Now());
276 } 279 }
277 280
278 TEST_F(NetworkTimeTrackerTest, ClockIsWack) { 281 TEST_F(NetworkTimeTrackerTest, ClockIsWack) {
279 // Now let's assume the system clock is completely wrong. 282 // Now let's assume the system clock is completely wrong.
280 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90); 283 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90);
281 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, 284 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_,
282 tick_clock_->NowTicks()); 285 tick_clock_->NowTicks());
283 286
284 base::Time out_network_time; 287 base::Time out_network_time;
285 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 288 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE,
289 tracker_->GetNetworkTime(&out_network_time, nullptr));
286 EXPECT_EQ(in_network_time, out_network_time); 290 EXPECT_EQ(in_network_time, out_network_time);
287 } 291 }
288 292
289 TEST_F(NetworkTimeTrackerTest, ClocksDivergeSlightly) { 293 TEST_F(NetworkTimeTrackerTest, ClocksDivergeSlightly) {
290 // The two clocks are allowed to diverge a little bit. 294 // The two clocks are allowed to diverge a little bit.
291 base::Time in_network_time = clock_->Now(); 295 base::Time in_network_time = clock_->Now();
292 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, 296 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_,
293 tick_clock_->NowTicks()); 297 tick_clock_->NowTicks());
294 298
295 base::TimeDelta small = base::TimeDelta::FromSeconds(30); 299 base::TimeDelta small = base::TimeDelta::FromSeconds(30);
296 tick_clock_->Advance(small); 300 tick_clock_->Advance(small);
297 base::Time out_network_time; 301 base::Time out_network_time;
298 base::TimeDelta out_uncertainty; 302 base::TimeDelta out_uncertainty;
299 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, &out_uncertainty)); 303 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE,
304 tracker_->GetNetworkTime(&out_network_time, &out_uncertainty));
300 EXPECT_EQ(in_network_time + small, out_network_time); 305 EXPECT_EQ(in_network_time + small, out_network_time);
301 // The clock divergence should show up in the uncertainty. 306 // The clock divergence should show up in the uncertainty.
302 EXPECT_EQ(resolution_ + latency_ + adjustment_ + small, out_uncertainty); 307 EXPECT_EQ(resolution_ + latency_ + adjustment_ + small, out_uncertainty);
303 } 308 }
304 309
305 TEST_F(NetworkTimeTrackerTest, NetworkTimeUpdates) { 310 TEST_F(NetworkTimeTrackerTest, NetworkTimeUpdates) {
306 // Verify that the the tracker receives and properly handles updates to the 311 // Verify that the the tracker receives and properly handles updates to the
307 // network time. 312 // network time.
308 base::Time out_network_time; 313 base::Time out_network_time;
309 base::TimeDelta uncertainty; 314 base::TimeDelta uncertainty;
310 315
311 UpdateNetworkTime(clock_->Now() - latency_ / 2, resolution_, latency_, 316 UpdateNetworkTime(clock_->Now() - latency_ / 2, resolution_, latency_,
312 tick_clock_->NowTicks()); 317 tick_clock_->NowTicks());
313 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, &uncertainty)); 318 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE,
319 tracker_->GetNetworkTime(&out_network_time, &uncertainty));
314 EXPECT_EQ(clock_->Now(), out_network_time); 320 EXPECT_EQ(clock_->Now(), out_network_time);
315 EXPECT_EQ(resolution_ + latency_ + adjustment_, uncertainty); 321 EXPECT_EQ(resolution_ + latency_ + adjustment_, uncertainty);
316 322
317 // Fake a wait to make sure we keep tracking. 323 // Fake a wait to make sure we keep tracking.
318 AdvanceBoth(base::TimeDelta::FromSeconds(1)); 324 AdvanceBoth(base::TimeDelta::FromSeconds(1));
319 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, &uncertainty)); 325 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE,
326 tracker_->GetNetworkTime(&out_network_time, &uncertainty));
320 EXPECT_EQ(clock_->Now(), out_network_time); 327 EXPECT_EQ(clock_->Now(), out_network_time);
321 EXPECT_EQ(resolution_ + latency_ + adjustment_, uncertainty); 328 EXPECT_EQ(resolution_ + latency_ + adjustment_, uncertainty);
322 329
323 // And one more time. 330 // And one more time.
324 UpdateNetworkTime(clock_->Now() - latency_ / 2, resolution_, latency_, 331 UpdateNetworkTime(clock_->Now() - latency_ / 2, resolution_, latency_,
325 tick_clock_->NowTicks()); 332 tick_clock_->NowTicks());
326 AdvanceBoth(base::TimeDelta::FromSeconds(1)); 333 AdvanceBoth(base::TimeDelta::FromSeconds(1));
327 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, &uncertainty)); 334 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE,
335 tracker_->GetNetworkTime(&out_network_time, &uncertainty));
328 EXPECT_EQ(clock_->Now(), out_network_time); 336 EXPECT_EQ(clock_->Now(), out_network_time);
329 EXPECT_EQ(resolution_ + latency_ + adjustment_, uncertainty); 337 EXPECT_EQ(resolution_ + latency_ + adjustment_, uncertainty);
330 } 338 }
331 339
332 TEST_F(NetworkTimeTrackerTest, SpringForward) { 340 TEST_F(NetworkTimeTrackerTest, SpringForward) {
333 // Simulate the wall clock advancing faster than the tick clock. 341 // Simulate the wall clock advancing faster than the tick clock.
334 UpdateNetworkTime(clock_->Now(), resolution_, latency_, 342 UpdateNetworkTime(clock_->Now(), resolution_, latency_,
335 tick_clock_->NowTicks()); 343 tick_clock_->NowTicks());
336 tick_clock_->Advance(base::TimeDelta::FromSeconds(1)); 344 tick_clock_->Advance(base::TimeDelta::FromSeconds(1));
337 clock_->Advance(base::TimeDelta::FromDays(1)); 345 clock_->Advance(base::TimeDelta::FromDays(1));
338 base::Time out_network_time; 346 base::Time out_network_time;
339 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 347 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_SYNC_LOST,
348 tracker_->GetNetworkTime(&out_network_time, nullptr));
340 } 349 }
341 350
342 TEST_F(NetworkTimeTrackerTest, FallBack) { 351 TEST_F(NetworkTimeTrackerTest, FallBack) {
343 // Simulate the wall clock running backward. 352 // Simulate the wall clock running backward.
344 UpdateNetworkTime(clock_->Now(), resolution_, latency_, 353 UpdateNetworkTime(clock_->Now(), resolution_, latency_,
345 tick_clock_->NowTicks()); 354 tick_clock_->NowTicks());
346 tick_clock_->Advance(base::TimeDelta::FromSeconds(1)); 355 tick_clock_->Advance(base::TimeDelta::FromSeconds(1));
347 clock_->Advance(base::TimeDelta::FromDays(-1)); 356 clock_->Advance(base::TimeDelta::FromDays(-1));
348 base::Time out_network_time; 357 base::Time out_network_time;
349 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 358 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_SYNC_LOST,
359 tracker_->GetNetworkTime(&out_network_time, nullptr));
350 } 360 }
351 361
352 TEST_F(NetworkTimeTrackerTest, SuspendAndResume) { 362 TEST_F(NetworkTimeTrackerTest, SuspendAndResume) {
353 // Simulate the wall clock advancing while the tick clock stands still, as 363 // Simulate the wall clock advancing while the tick clock stands still, as
354 // would happen in a suspend+resume cycle. 364 // would happen in a suspend+resume cycle.
355 UpdateNetworkTime(clock_->Now(), resolution_, latency_, 365 UpdateNetworkTime(clock_->Now(), resolution_, latency_,
356 tick_clock_->NowTicks()); 366 tick_clock_->NowTicks());
357 clock_->Advance(base::TimeDelta::FromHours(1)); 367 clock_->Advance(base::TimeDelta::FromHours(1));
358 base::Time out_network_time; 368 base::Time out_network_time;
359 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 369 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_SYNC_LOST,
370 tracker_->GetNetworkTime(&out_network_time, nullptr));
360 } 371 }
361 372
362 TEST_F(NetworkTimeTrackerTest, Serialize) { 373 TEST_F(NetworkTimeTrackerTest, Serialize) {
363 // Test that we can serialize and deserialize state and get consistent 374 // Test that we can serialize and deserialize state and get consistent
364 // results. 375 // results.
365 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90); 376 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90);
366 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, 377 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_,
367 tick_clock_->NowTicks()); 378 tick_clock_->NowTicks());
368 base::Time out_network_time; 379 base::Time out_network_time;
369 base::TimeDelta out_uncertainty; 380 base::TimeDelta out_uncertainty;
370 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, &out_uncertainty)); 381 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE,
382 tracker_->GetNetworkTime(&out_network_time, &out_uncertainty));
371 EXPECT_EQ(in_network_time, out_network_time); 383 EXPECT_EQ(in_network_time, out_network_time);
372 EXPECT_EQ(resolution_ + latency_ + adjustment_, out_uncertainty); 384 EXPECT_EQ(resolution_ + latency_ + adjustment_, out_uncertainty);
373 385
374 // 6 days is just under the threshold for discarding data. 386 // 6 days is just under the threshold for discarding data.
375 base::TimeDelta delta = base::TimeDelta::FromDays(6); 387 base::TimeDelta delta = base::TimeDelta::FromDays(6);
376 AdvanceBoth(delta); 388 AdvanceBoth(delta);
377 Reset(); 389 Reset();
378 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, &out_uncertainty)); 390 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE,
391 tracker_->GetNetworkTime(&out_network_time, &out_uncertainty));
379 EXPECT_EQ(in_network_time + delta, out_network_time); 392 EXPECT_EQ(in_network_time + delta, out_network_time);
380 EXPECT_EQ(resolution_ + latency_ + adjustment_, out_uncertainty); 393 EXPECT_EQ(resolution_ + latency_ + adjustment_, out_uncertainty);
381 } 394 }
382 395
383 TEST_F(NetworkTimeTrackerTest, DeserializeOldFormat) { 396 TEST_F(NetworkTimeTrackerTest, DeserializeOldFormat) {
384 // Test that deserializing old data (which do not record the uncertainty and 397 // Test that deserializing old data (which do not record the uncertainty and
385 // tick clock) causes the serialized data to be ignored. 398 // tick clock) causes the serialized data to be ignored.
386 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90); 399 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90);
387 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, 400 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_,
388 tick_clock_->NowTicks()); 401 tick_clock_->NowTicks());
389 402
390 base::Time out_network_time; 403 base::Time out_network_time;
391 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 404 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE,
405 tracker_->GetNetworkTime(&out_network_time, nullptr));
392 double local, network; 406 double local, network;
393 const base::DictionaryValue* saved_prefs = 407 const base::DictionaryValue* saved_prefs =
394 pref_service_.GetDictionary(prefs::kNetworkTimeMapping); 408 pref_service_.GetDictionary(prefs::kNetworkTimeMapping);
395 saved_prefs->GetDouble("local", &local); 409 saved_prefs->GetDouble("local", &local);
396 saved_prefs->GetDouble("network", &network); 410 saved_prefs->GetDouble("network", &network);
397 base::DictionaryValue prefs; 411 base::DictionaryValue prefs;
398 prefs.SetDouble("local", local); 412 prefs.SetDouble("local", local);
399 prefs.SetDouble("network", network); 413 prefs.SetDouble("network", network);
400 pref_service_.Set(prefs::kNetworkTimeMapping, prefs); 414 pref_service_.Set(prefs::kNetworkTimeMapping, prefs);
401 Reset(); 415 Reset();
402 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 416 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC,
417 tracker_->GetNetworkTime(&out_network_time, nullptr));
403 } 418 }
404 419
405 TEST_F(NetworkTimeTrackerTest, SerializeWithLongDelay) { 420 TEST_F(NetworkTimeTrackerTest, SerializeWithLongDelay) {
406 // Test that if the serialized data are more than a week old, they are 421 // Test that if the serialized data are more than a week old, they are
407 // discarded. 422 // discarded.
408 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90); 423 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90);
409 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, 424 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_,
410 tick_clock_->NowTicks()); 425 tick_clock_->NowTicks());
411 base::Time out_network_time; 426 base::Time out_network_time;
412 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 427 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE,
428 tracker_->GetNetworkTime(&out_network_time, nullptr));
413 AdvanceBoth(base::TimeDelta::FromDays(8)); 429 AdvanceBoth(base::TimeDelta::FromDays(8));
414 Reset(); 430 Reset();
415 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 431 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC,
432 tracker_->GetNetworkTime(&out_network_time, nullptr));
416 } 433 }
417 434
418 TEST_F(NetworkTimeTrackerTest, SerializeWithTickClockAdvance) { 435 TEST_F(NetworkTimeTrackerTest, SerializeWithTickClockAdvance) {
419 // Test that serialized data are discarded if the wall clock and tick clock 436 // Test that serialized data are discarded if the wall clock and tick clock
420 // have not advanced consistently since data were serialized. 437 // have not advanced consistently since data were serialized.
421 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90); 438 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90);
422 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, 439 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_,
423 tick_clock_->NowTicks()); 440 tick_clock_->NowTicks());
424 base::Time out_network_time; 441 base::Time out_network_time;
425 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 442 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE,
443 tracker_->GetNetworkTime(&out_network_time, nullptr));
426 tick_clock_->Advance(base::TimeDelta::FromDays(1)); 444 tick_clock_->Advance(base::TimeDelta::FromDays(1));
427 Reset(); 445 Reset();
428 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 446 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_SYNC_LOST,
447 tracker_->GetNetworkTime(&out_network_time, nullptr));
429 } 448 }
430 449
431 TEST_F(NetworkTimeTrackerTest, SerializeWithWallClockAdvance) { 450 TEST_F(NetworkTimeTrackerTest, SerializeWithWallClockAdvance) {
432 // Test that serialized data are discarded if the wall clock and tick clock 451 // Test that serialized data are discarded if the wall clock and tick clock
433 // have not advanced consistently since data were serialized. 452 // have not advanced consistently since data were serialized.
434 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90); 453 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90);
435 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, 454 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_,
436 tick_clock_->NowTicks()); 455 tick_clock_->NowTicks());
437 456
438 base::Time out_network_time; 457 base::Time out_network_time;
439 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 458 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE,
459 tracker_->GetNetworkTime(&out_network_time, nullptr));
440 clock_->Advance(base::TimeDelta::FromDays(1)); 460 clock_->Advance(base::TimeDelta::FromDays(1));
441 Reset(); 461 Reset();
442 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 462 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_SYNC_LOST,
463 tracker_->GetNetworkTime(&out_network_time, nullptr));
443 } 464 }
444 465
445 TEST_F(NetworkTimeTrackerTest, UpdateFromNetwork) { 466 TEST_F(NetworkTimeTrackerTest, UpdateFromNetwork) {
446 base::HistogramTester histograms; 467 base::HistogramTester histograms;
447 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); 468 histograms.ExpectTotalCount(kFetchFailedHistogram, 0);
448 histograms.ExpectTotalCount(kFetchValidHistogram, 0); 469 histograms.ExpectTotalCount(kFetchValidHistogram, 0);
449 470
450 base::Time out_network_time; 471 base::Time out_network_time;
451 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 472 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC,
473 tracker_->GetNetworkTime(&out_network_time, nullptr));
452 // First query should happen soon. 474 // First query should happen soon.
453 EXPECT_EQ(base::TimeDelta::FromMinutes(0), 475 EXPECT_EQ(base::TimeDelta::FromMinutes(0),
454 tracker_->GetTimerDelayForTesting()); 476 tracker_->GetTimerDelayForTesting());
455 477
456 test_server_->RegisterRequestHandler( 478 test_server_->RegisterRequestHandler(
457 base::Bind(&NetworkTimeTrackerTest::GoodTimeResponseHandler)); 479 base::Bind(&NetworkTimeTrackerTest::GoodTimeResponseHandler));
458 EXPECT_TRUE(test_server_->Start()); 480 EXPECT_TRUE(test_server_->Start());
459 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); 481 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/"));
460 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); 482 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting());
461 tracker_->WaitForFetchForTesting(123123123); 483 tracker_->WaitForFetchForTesting(123123123);
462 484
463 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 485 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE,
486 tracker_->GetNetworkTime(&out_network_time, nullptr));
464 EXPECT_EQ(base::Time::UnixEpoch() + 487 EXPECT_EQ(base::Time::UnixEpoch() +
465 base::TimeDelta::FromMilliseconds(1461621971825), 488 base::TimeDelta::FromMilliseconds(1461621971825),
466 out_network_time); 489 out_network_time);
467 // Should see no backoff in the success case. 490 // Should see no backoff in the success case.
468 EXPECT_EQ(base::TimeDelta::FromMinutes(60), 491 EXPECT_EQ(base::TimeDelta::FromMinutes(60),
469 tracker_->GetTimerDelayForTesting()); 492 tracker_->GetTimerDelayForTesting());
470 493
471 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); 494 histograms.ExpectTotalCount(kFetchFailedHistogram, 0);
472 histograms.ExpectTotalCount(kFetchValidHistogram, 1); 495 histograms.ExpectTotalCount(kFetchValidHistogram, 1);
473 histograms.ExpectBucketCount(kFetchValidHistogram, true, 1); 496 histograms.ExpectBucketCount(kFetchValidHistogram, true, 1);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 histograms.ExpectTotalCount(kFetchValidHistogram, 0); 539 histograms.ExpectTotalCount(kFetchValidHistogram, 0);
517 540
518 test_server_->RegisterRequestHandler( 541 test_server_->RegisterRequestHandler(
519 base::Bind(&NetworkTimeTrackerTest::BadSignatureResponseHandler)); 542 base::Bind(&NetworkTimeTrackerTest::BadSignatureResponseHandler));
520 EXPECT_TRUE(test_server_->Start()); 543 EXPECT_TRUE(test_server_->Start());
521 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); 544 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/"));
522 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); 545 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting());
523 tracker_->WaitForFetchForTesting(123123123); 546 tracker_->WaitForFetchForTesting(123123123);
524 547
525 base::Time out_network_time; 548 base::Time out_network_time;
526 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 549 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC,
550 tracker_->GetNetworkTime(&out_network_time, nullptr));
527 EXPECT_EQ(base::TimeDelta::FromMinutes(120), 551 EXPECT_EQ(base::TimeDelta::FromMinutes(120),
528 tracker_->GetTimerDelayForTesting()); 552 tracker_->GetTimerDelayForTesting());
529 553
530 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); 554 histograms.ExpectTotalCount(kFetchFailedHistogram, 0);
531 histograms.ExpectTotalCount(kFetchValidHistogram, 1); 555 histograms.ExpectTotalCount(kFetchValidHistogram, 1);
532 histograms.ExpectBucketCount(kFetchValidHistogram, false, 1); 556 histograms.ExpectBucketCount(kFetchValidHistogram, false, 1);
533 } 557 }
534 558
535 static const uint8_t kDevKeyPubBytes[] = { 559 static const uint8_t kDevKeyPubBytes[] = {
536 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 560 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
(...skipping 13 matching lines...) Expand all
550 test_server_->RegisterRequestHandler( 574 test_server_->RegisterRequestHandler(
551 base::Bind(&NetworkTimeTrackerTest::BadDataResponseHandler)); 575 base::Bind(&NetworkTimeTrackerTest::BadDataResponseHandler));
552 EXPECT_TRUE(test_server_->Start()); 576 EXPECT_TRUE(test_server_->Start());
553 base::StringPiece key = {reinterpret_cast<const char*>(kDevKeyPubBytes), 577 base::StringPiece key = {reinterpret_cast<const char*>(kDevKeyPubBytes),
554 sizeof(kDevKeyPubBytes)}; 578 sizeof(kDevKeyPubBytes)};
555 tracker_->SetPublicKeyForTesting(key); 579 tracker_->SetPublicKeyForTesting(key);
556 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); 580 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/"));
557 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); 581 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting());
558 tracker_->WaitForFetchForTesting(123123123); 582 tracker_->WaitForFetchForTesting(123123123);
559 base::Time out_network_time; 583 base::Time out_network_time;
560 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 584 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC,
585 tracker_->GetNetworkTime(&out_network_time, nullptr));
561 EXPECT_EQ(base::TimeDelta::FromMinutes(120), 586 EXPECT_EQ(base::TimeDelta::FromMinutes(120),
562 tracker_->GetTimerDelayForTesting()); 587 tracker_->GetTimerDelayForTesting());
563 588
564 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); 589 histograms.ExpectTotalCount(kFetchFailedHistogram, 0);
565 histograms.ExpectTotalCount(kFetchValidHistogram, 1); 590 histograms.ExpectTotalCount(kFetchValidHistogram, 1);
566 histograms.ExpectBucketCount(kFetchValidHistogram, false, 1); 591 histograms.ExpectBucketCount(kFetchValidHistogram, false, 1);
567 } 592 }
568 593
569 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkServerError) { 594 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkServerError) {
570 base::HistogramTester histograms; 595 base::HistogramTester histograms;
571 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); 596 histograms.ExpectTotalCount(kFetchFailedHistogram, 0);
572 histograms.ExpectTotalCount(kFetchValidHistogram, 0); 597 histograms.ExpectTotalCount(kFetchValidHistogram, 0);
573 598
574 test_server_->RegisterRequestHandler( 599 test_server_->RegisterRequestHandler(
575 base::Bind(&NetworkTimeTrackerTest::ServerErrorResponseHandler)); 600 base::Bind(&NetworkTimeTrackerTest::ServerErrorResponseHandler));
576 EXPECT_TRUE(test_server_->Start()); 601 EXPECT_TRUE(test_server_->Start());
577 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); 602 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/"));
578 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); 603 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting());
579 tracker_->WaitForFetchForTesting(123123123); 604 tracker_->WaitForFetchForTesting(123123123);
580 605
581 base::Time out_network_time; 606 base::Time out_network_time;
582 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 607 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC,
608 tracker_->GetNetworkTime(&out_network_time, nullptr));
583 // Should see backoff in the error case. 609 // Should see backoff in the error case.
584 EXPECT_EQ(base::TimeDelta::FromMinutes(120), 610 EXPECT_EQ(base::TimeDelta::FromMinutes(120),
585 tracker_->GetTimerDelayForTesting()); 611 tracker_->GetTimerDelayForTesting());
586 612
587 histograms.ExpectTotalCount(kFetchFailedHistogram, 1); 613 histograms.ExpectTotalCount(kFetchFailedHistogram, 1);
588 // There was no network error, so the histogram is recorded as 614 // There was no network error, so the histogram is recorded as
589 // net::OK, indicating that the connection succeeded but there was a 615 // net::OK, indicating that the connection succeeded but there was a
590 // non-200 HTTP status code. 616 // non-200 HTTP status code.
591 histograms.ExpectBucketCount(kFetchFailedHistogram, net::OK, 1); 617 histograms.ExpectBucketCount(kFetchFailedHistogram, net::OK, 1);
592 histograms.ExpectTotalCount(kFetchValidHistogram, 0); 618 histograms.ExpectTotalCount(kFetchValidHistogram, 0);
593 } 619 }
594 620
595 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkNetworkError) { 621 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkNetworkError) {
596 base::HistogramTester histograms; 622 base::HistogramTester histograms;
597 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); 623 histograms.ExpectTotalCount(kFetchFailedHistogram, 0);
598 histograms.ExpectTotalCount(kFetchValidHistogram, 0); 624 histograms.ExpectTotalCount(kFetchValidHistogram, 0);
599 625
600 test_server_->RegisterRequestHandler( 626 test_server_->RegisterRequestHandler(
601 base::Bind(&NetworkTimeTrackerTest::NetworkErrorResponseHandler)); 627 base::Bind(&NetworkTimeTrackerTest::NetworkErrorResponseHandler));
602 EXPECT_TRUE(test_server_->Start()); 628 EXPECT_TRUE(test_server_->Start());
603 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); 629 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/"));
604 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); 630 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting());
605 tracker_->WaitForFetchForTesting(123123123); 631 tracker_->WaitForFetchForTesting(123123123);
606 632
607 base::Time out_network_time; 633 base::Time out_network_time;
608 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 634 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC,
635 tracker_->GetNetworkTime(&out_network_time, nullptr));
609 // Should see backoff in the error case. 636 // Should see backoff in the error case.
610 EXPECT_EQ(base::TimeDelta::FromMinutes(120), 637 EXPECT_EQ(base::TimeDelta::FromMinutes(120),
611 tracker_->GetTimerDelayForTesting()); 638 tracker_->GetTimerDelayForTesting());
612 639
613 histograms.ExpectTotalCount(kFetchFailedHistogram, 1); 640 histograms.ExpectTotalCount(kFetchFailedHistogram, 1);
614 histograms.ExpectBucketCount(kFetchFailedHistogram, -net::ERR_EMPTY_RESPONSE, 641 histograms.ExpectBucketCount(kFetchFailedHistogram, -net::ERR_EMPTY_RESPONSE,
615 1); 642 1);
616 histograms.ExpectTotalCount(kFetchValidHistogram, 0); 643 histograms.ExpectTotalCount(kFetchValidHistogram, 0);
617 } 644 }
618 645
619 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkLargeResponse) { 646 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkLargeResponse) {
620 base::HistogramTester histograms; 647 base::HistogramTester histograms;
621 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); 648 histograms.ExpectTotalCount(kFetchFailedHistogram, 0);
622 histograms.ExpectTotalCount(kFetchValidHistogram, 0); 649 histograms.ExpectTotalCount(kFetchValidHistogram, 0);
623 650
624 test_server_->RegisterRequestHandler( 651 test_server_->RegisterRequestHandler(
625 base::Bind(&NetworkTimeTrackerTest::GoodTimeResponseHandler)); 652 base::Bind(&NetworkTimeTrackerTest::GoodTimeResponseHandler));
626 EXPECT_TRUE(test_server_->Start()); 653 EXPECT_TRUE(test_server_->Start());
627 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); 654 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/"));
628 655
629 base::Time out_network_time; 656 base::Time out_network_time;
630 657
631 tracker_->SetMaxResponseSizeForTesting(3); 658 tracker_->SetMaxResponseSizeForTesting(3);
632 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); 659 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting());
633 tracker_->WaitForFetchForTesting(123123123); 660 tracker_->WaitForFetchForTesting(123123123);
634 EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 661 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC,
662 tracker_->GetNetworkTime(&out_network_time, nullptr));
635 663
636 histograms.ExpectTotalCount(kFetchFailedHistogram, 1); 664 histograms.ExpectTotalCount(kFetchFailedHistogram, 1);
637 histograms.ExpectTotalCount(kFetchValidHistogram, 0); 665 histograms.ExpectTotalCount(kFetchValidHistogram, 0);
638 666
639 tracker_->SetMaxResponseSizeForTesting(1024); 667 tracker_->SetMaxResponseSizeForTesting(1024);
640 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); 668 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting());
641 tracker_->WaitForFetchForTesting(123123123); 669 tracker_->WaitForFetchForTesting(123123123);
642 EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr)); 670 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE,
671 tracker_->GetNetworkTime(&out_network_time, nullptr));
643 672
644 histograms.ExpectTotalCount(kFetchFailedHistogram, 1); 673 histograms.ExpectTotalCount(kFetchFailedHistogram, 1);
645 histograms.ExpectTotalCount(kFetchValidHistogram, 1); 674 histograms.ExpectTotalCount(kFetchValidHistogram, 1);
646 histograms.ExpectBucketCount(kFetchValidHistogram, true, 1); 675 histograms.ExpectBucketCount(kFetchValidHistogram, true, 1);
647 } 676 }
648 677
649 } // namespace network_time 678 } // namespace network_time
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698