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