Chromium Code Reviews| Index: chrome/browser/metrics/variations/network_time_tracker_unittest.cc |
| diff --git a/chrome/browser/metrics/variations/network_time_tracker_unittest.cc b/chrome/browser/metrics/variations/network_time_tracker_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..54ca81c07461c5471b9d142aec232c3c4da0ed7c |
| --- /dev/null |
| +++ b/chrome/browser/metrics/variations/network_time_tracker_unittest.cc |
| @@ -0,0 +1,81 @@ |
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include <math.h> |
| + |
| +#include "chrome/browser/metrics/variations/network_time_tracker.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +namespace { |
| + |
| +// These are all in milliseconds. |
| +const int64 kLatency1 = 50; |
| +const int64 kLatency2 = 500; |
| + |
| +// Can not be smaller than 15, it's the NowFromSystemTime() resolution. |
| +const int64 kResolution1 = 17; |
| +const int64 kResolution2 = 177; |
| + |
| +const int64 kPseudoSleepTime1 = 500000001; |
| +const int64 kPseudoSleepTime2 = 1888; |
| + |
| +class NetworkTimeTrackerTest : public NetworkTimeTracker { |
|
Alexei Svitkine (slow)
2013/02/05 02:29:07
Nit: NetworkTimeTrackerTest -> TestNetworkTimeTrac
MAD
2013/02/05 15:56:00
Done.
|
| + public: |
| + NetworkTimeTrackerTest() : now_(base::Time::NowFromSystemTime()) { |
| + } |
| + |
| + void AddToTicksNow(int64 ms) { |
| + ticks_now_ += base::TimeDelta::FromMilliseconds(ms); |
| + } |
| + |
| + base::Time now() const { |
| + return now_ + (ticks_now_ - base::TimeTicks()); |
| + } |
| + |
| + void ValidateExpectedTime() { |
| + base::Time network_time; |
| + base::TimeDelta uncertainty; |
| + EXPECT_TRUE(GetNetworkTime(&network_time, &uncertainty)); |
| + EXPECT_LE(fabs(static_cast<double>(now().ToInternalValue() - |
| + network_time.ToInternalValue())), |
| + static_cast<double>(uncertainty.ToInternalValue())); |
| + } |
| + |
| + protected: |
| + virtual base::TimeTicks GetTicksNow() const { return ticks_now_; } |
|
Alexei Svitkine (slow)
2013/02/05 02:29:07
Nits:
- OVERRIDE
- put method body on a new line
MAD
2013/02/05 15:56:00
Done.
|
| + base::TimeTicks ticks_now_; |
| + base::Time now_; |
| +}; |
| + |
| +} // namespace. |
| + |
| +TEST(NetworkTimeTrackerTest, ProperTimeTracking) { |
| + NetworkTimeTrackerTest network_time_tracker; |
| + |
| + // Should not return a value before UpdateNetworkTime gets called. |
| + base::Time network_time; |
| + base::TimeDelta uncertainty; |
| + EXPECT_FALSE(network_time_tracker.GetNetworkTime(&network_time, |
| + &uncertainty)); |
| + |
| + network_time_tracker.UpdateNetworkTime( |
| + network_time_tracker.now(), |
| + base::TimeDelta::FromMilliseconds(kResolution1), |
| + base::TimeDelta::FromMilliseconds(kLatency1)); |
| + network_time_tracker.ValidateExpectedTime(); |
| + |
| + // Fake a wait for kPseudoSleepTime1 to make sure we keep tracking. |
| + network_time_tracker.AddToTicksNow(kPseudoSleepTime1); |
| + network_time_tracker.ValidateExpectedTime(); |
| + |
| + // Update the time with a new now value and kLatency2. |
| + network_time_tracker.UpdateNetworkTime( |
| + network_time_tracker.now(), |
| + base::TimeDelta::FromMilliseconds(kResolution2), |
| + base::TimeDelta::FromMilliseconds(kLatency2)); |
| + |
| + // Fake a wait for kPseudoSleepTime2 to make sure we keep tracking still. |
| + network_time_tracker.AddToTicksNow(kPseudoSleepTime2); |
| + network_time_tracker.ValidateExpectedTime(); |
| +} |