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..ea69196c89e939d5b64609ef49d277dc2468259a |
--- /dev/null |
+++ b/chrome/browser/metrics/variations/network_time_tracker_unittest.cc |
@@ -0,0 +1,63 @@ |
+// 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 "base/threading/platform_thread.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 kSleepTime1 = 500; |
+const int64 kSleepTime2 = 333; |
+ |
+void ValidateCurrentTime(const NetworkTimeTracker& network_time_tracker) { |
+ base::Time expected_time = base::Time::NowFromSystemTime(); |
+ base::Time network_time; |
+ base::TimeDelta uncertainty; |
+ EXPECT_TRUE(network_time_tracker.GetNetworkTime(&network_time, |
+ &uncertainty)); |
+ EXPECT_LE(abs(expected_time.ToInternalValue() - |
+ network_time.ToInternalValue()), uncertainty.ToInternalValue()); |
+} |
+ |
+} |
Alexei Svitkine (slow)
2013/02/04 21:23:18
Nit: Add "// namespace".
MAD
2013/02/05 01:05:55
Done.
|
+ |
+TEST(NetworkTimeTrackerTest, ProperTimeTracking) { |
+ NetworkTimeTracker 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)); |
+ |
+ // Update the time based on NowFromSystemTime and kLatency1. |
+ network_time_tracker.UpdateNetworkTime( |
+ base::Time::NowFromSystemTime(), |
+ base::TimeDelta::FromMilliseconds(kResolution1), |
+ base::TimeDelta::FromMilliseconds(kLatency1)); |
+ ValidateCurrentTime(network_time_tracker); |
+ |
+ // Wait for kSleepTime1 to make sure we keep tracking. |
+ base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(kSleepTime1)); |
Alexei Svitkine (slow)
2013/02/04 21:23:18
Instead of making the test sleep (which makes the
MAD
2013/02/05 01:05:55
Done.
|
+ ValidateCurrentTime(network_time_tracker); |
+ |
+ // Update the time with a new NowFromSystemTime value and kLatency2. |
+ network_time_tracker.UpdateNetworkTime( |
+ base::Time::NowFromSystemTime(), |
+ base::TimeDelta::FromMilliseconds(kResolution2), |
+ base::TimeDelta::FromMilliseconds(kLatency2)); |
+ |
+ // Wait for kSleepTime2 to make sure we keep tracking still. |
+ base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(kSleepTime2)); |
+ ValidateCurrentTime(network_time_tracker); |
+} |