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