blob: e7bc43a0459fefc001bbaa68eb87f0fa650323a2 [file] [log] [blame]
// Copyright (c) 2019 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 "net/third_party/quiche/src/quic/core/quic_time_accumulator.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
#include "net/third_party/quiche/src/quic/test_tools/mock_clock.h"
namespace quic {
namespace test {
TEST(QuicTimeAccumulator, DefaultConstruct) {
MockClock clock;
clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(1));
QuicTimeAccumulator acc;
EXPECT_FALSE(acc.IsRunning());
clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(1));
EXPECT_EQ(QuicTime::Delta::Zero(), acc.GetTotalElapsedTime());
EXPECT_EQ(QuicTime::Delta::Zero(), acc.GetTotalElapsedTime(clock.Now()));
}
TEST(QuicTimeAccumulator, StartStop) {
MockClock clock;
clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(1));
QuicTimeAccumulator acc;
acc.Start(clock.Now());
EXPECT_TRUE(acc.IsRunning());
clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(10));
acc.Stop(clock.Now());
EXPECT_FALSE(acc.IsRunning());
clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(5));
EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), acc.GetTotalElapsedTime());
EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10),
acc.GetTotalElapsedTime(clock.Now()));
acc.Start(clock.Now());
clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(5));
EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), acc.GetTotalElapsedTime());
EXPECT_EQ(QuicTime::Delta::FromMilliseconds(15),
acc.GetTotalElapsedTime(clock.Now()));
clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(5));
EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), acc.GetTotalElapsedTime());
EXPECT_EQ(QuicTime::Delta::FromMilliseconds(20),
acc.GetTotalElapsedTime(clock.Now()));
acc.Stop(clock.Now());
EXPECT_EQ(QuicTime::Delta::FromMilliseconds(20), acc.GetTotalElapsedTime());
EXPECT_EQ(QuicTime::Delta::FromMilliseconds(20),
acc.GetTotalElapsedTime(clock.Now()));
}
TEST(QuicTimeAccumulator, ClockStepBackwards) {
MockClock clock;
clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(100));
QuicTimeAccumulator acc;
acc.Start(clock.Now());
clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(-10));
acc.Stop(clock.Now());
EXPECT_EQ(QuicTime::Delta::Zero(), acc.GetTotalElapsedTime());
EXPECT_EQ(QuicTime::Delta::Zero(), acc.GetTotalElapsedTime(clock.Now()));
acc.Start(clock.Now());
clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(50));
acc.Stop(clock.Now());
acc.Start(clock.Now());
clock.AdvanceTime(QuicTime::Delta::FromMilliseconds(-80));
EXPECT_EQ(QuicTime::Delta::FromMilliseconds(50), acc.GetTotalElapsedTime());
EXPECT_EQ(QuicTime::Delta::FromMilliseconds(50),
acc.GetTotalElapsedTime(clock.Now()));
}
} // namespace test
} // namespace quic