xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/core/quic_time_accumulator_test.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright (c) 2019 The Chromium Authors. All rights reserved.
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 "quiche/quic/core/quic_time_accumulator.h"
6 
7 #include "quiche/quic/platform/api/quic_test.h"
8 #include "quiche/quic/test_tools/mock_clock.h"
9 
10 namespace quic {
11 namespace test {
12 
TEST(QuicTimeAccumulator,DefaultConstruct)13 TEST(QuicTimeAccumulator, DefaultConstruct) {
14   MockClock clock;
15   clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(1));
16 
17   QuicTimeAccumulator acc;
18   EXPECT_FALSE(acc.IsRunning());
19 
20   clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(1));
21   EXPECT_EQ(QuicTime::Delta::Zero(), acc.GetTotalElapsedTime());
22   EXPECT_EQ(QuicTime::Delta::Zero(), acc.GetTotalElapsedTime(clock.Now()));
23 }
24 
TEST(QuicTimeAccumulator,StartStop)25 TEST(QuicTimeAccumulator, StartStop) {
26   MockClock clock;
27   clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(1));
28 
29   QuicTimeAccumulator acc;
30   acc.Start(clock.Now());
31   EXPECT_TRUE(acc.IsRunning());
32 
33   clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(10));
34   acc.Stop(clock.Now());
35   EXPECT_FALSE(acc.IsRunning());
36 
37   clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(5));
38   EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), acc.GetTotalElapsedTime());
39   EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10),
40             acc.GetTotalElapsedTime(clock.Now()));
41 
42   acc.Start(clock.Now());
43   clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(5));
44   EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), acc.GetTotalElapsedTime());
45   EXPECT_EQ(QuicTime::Delta::FromMilliseconds(15),
46             acc.GetTotalElapsedTime(clock.Now()));
47 
48   clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(5));
49   EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), acc.GetTotalElapsedTime());
50   EXPECT_EQ(QuicTime::Delta::FromMilliseconds(20),
51             acc.GetTotalElapsedTime(clock.Now()));
52 
53   acc.Stop(clock.Now());
54   EXPECT_EQ(QuicTime::Delta::FromMilliseconds(20), acc.GetTotalElapsedTime());
55   EXPECT_EQ(QuicTime::Delta::FromMilliseconds(20),
56             acc.GetTotalElapsedTime(clock.Now()));
57 }
58 
TEST(QuicTimeAccumulator,ClockStepBackwards)59 TEST(QuicTimeAccumulator, ClockStepBackwards) {
60   MockClock clock;
61   clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(100));
62 
63   QuicTimeAccumulator acc;
64   acc.Start(clock.Now());
65 
66   clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(-10));
67   acc.Stop(clock.Now());
68   EXPECT_EQ(QuicTime::Delta::Zero(), acc.GetTotalElapsedTime());
69   EXPECT_EQ(QuicTime::Delta::Zero(), acc.GetTotalElapsedTime(clock.Now()));
70 
71   acc.Start(clock.Now());
72   clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(50));
73   acc.Stop(clock.Now());
74 
75   acc.Start(clock.Now());
76   clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(-80));
77   EXPECT_EQ(QuicTime::Delta::FromMilliseconds(50), acc.GetTotalElapsedTime());
78   EXPECT_EQ(QuicTime::Delta::FromMilliseconds(50),
79             acc.GetTotalElapsedTime(clock.Now()));
80 }
81 
82 }  // namespace test
83 }  // namespace quic
84