xref: /aosp_15_r20/external/cronet/base/test/scoped_mock_clock_override_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2018 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/test/scoped_mock_clock_override.h"
6 
7 #include "base/build_time.h"
8 #include "base/time/time.h"
9 #include "build/build_config.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 
12 namespace base {
13 
14 namespace {
15 
16 // Disabled on Android due to flakes; see https://crbug.com/1474884.
17 #if BUILDFLAG(IS_ANDROID)
18 #define MAYBE_Time DISABLED_Time
19 #else
20 #define MAYBE_Time Time
21 #endif
TEST(ScopedMockClockOverrideTest,MAYBE_Time)22 TEST(ScopedMockClockOverrideTest, MAYBE_Time) {
23   // Choose a reference time that we know to be in the past but close to now.
24   Time build_time = GetBuildTime();
25 
26   // Override is not active. All Now() methods should return a time greater than
27   // the build time.
28   EXPECT_LT(build_time, Time::Now());
29   EXPECT_GT(Time::Max(), Time::Now());
30   EXPECT_LT(build_time, Time::NowFromSystemTime());
31   EXPECT_GT(Time::Max(), Time::NowFromSystemTime());
32 
33   {
34     // Set override.
35     ScopedMockClockOverride mock_clock;
36 
37     EXPECT_NE(Time(), Time::Now());
38     Time start = Time::Now();
39     mock_clock.Advance(Seconds(1));
40     EXPECT_EQ(start + Seconds(1), Time::Now());
41   }
42 
43   // All methods return real time again.
44   EXPECT_LT(build_time, Time::Now());
45   EXPECT_GT(Time::Max(), Time::Now());
46   EXPECT_LT(build_time, Time::NowFromSystemTime());
47   EXPECT_GT(Time::Max(), Time::NowFromSystemTime());
48 }
49 
TEST(ScopedMockClockOverrideTest,TimeTicks)50 TEST(ScopedMockClockOverrideTest, TimeTicks) {
51   // Override is not active. All Now() methods should return a sensible value.
52   EXPECT_LT(TimeTicks::UnixEpoch(), TimeTicks::Now());
53   EXPECT_GT(TimeTicks::Max(), TimeTicks::Now());
54   EXPECT_LT(TimeTicks::UnixEpoch() + Days(365), TimeTicks::Now());
55 
56   {
57     // Set override.
58     ScopedMockClockOverride mock_clock;
59 
60     EXPECT_NE(TimeTicks(), TimeTicks::Now());
61     TimeTicks start = TimeTicks::Now();
62     mock_clock.Advance(Seconds(1));
63     EXPECT_EQ(start + Seconds(1), TimeTicks::Now());
64   }
65 
66   // All methods return real ticks again.
67   EXPECT_LT(TimeTicks::UnixEpoch(), TimeTicks::Now());
68   EXPECT_GT(TimeTicks::Max(), TimeTicks::Now());
69   EXPECT_LT(TimeTicks::UnixEpoch() + Days(365), TimeTicks::Now());
70 }
71 
TEST(ScopedMockClockOverrideTest,ThreadTicks)72 TEST(ScopedMockClockOverrideTest, ThreadTicks) {
73   if (ThreadTicks::IsSupported()) {
74     ThreadTicks::WaitUntilInitialized();
75 
76     // Override is not active. All Now() methods should return a sensible value.
77     ThreadTicks initial_thread_ticks = ThreadTicks::Now();
78     EXPECT_LE(initial_thread_ticks, ThreadTicks::Now());
79     EXPECT_GT(ThreadTicks::Max(), ThreadTicks::Now());
80     EXPECT_LT(ThreadTicks(), ThreadTicks::Now());
81 
82     {
83       // Set override.
84       ScopedMockClockOverride mock_clock;
85 
86       EXPECT_NE(ThreadTicks(), ThreadTicks::Now());
87       ThreadTicks start = ThreadTicks::Now();
88       mock_clock.Advance(Seconds(1));
89       EXPECT_EQ(start + Seconds(1), ThreadTicks::Now());
90     }
91 
92     // All methods return real ticks again.
93     EXPECT_LE(initial_thread_ticks, ThreadTicks::Now());
94     EXPECT_GT(ThreadTicks::Max(), ThreadTicks::Now());
95     EXPECT_LT(ThreadTicks(), ThreadTicks::Now());
96   }
97 }
98 
99 }  // namespace
100 
101 }  // namespace base
102