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