15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/quic/quic_time.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/quic/test_tools/mock_clock.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace test {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST(QuicTimeDeltaTest, Zero) {
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(QuicTime::Delta::Zero().IsZero());
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(QuicTime::Delta::Zero().IsInfinite());
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(QuicTime::Delta::FromMilliseconds(1).IsZero());
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST(QuicTimeDeltaTest, Infinite) {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(QuicTime::Delta::Infinite().IsInfinite());
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(QuicTime::Delta::Zero().IsInfinite());
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(QuicTime::Delta::FromMilliseconds(1).IsInfinite());
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST(QuicTimeDeltaTest, FromTo) {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(QuicTime::Delta::FromMilliseconds(1),
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            QuicTime::Delta::FromMicroseconds(1000));
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(QuicTime::Delta::FromSeconds(1),
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            QuicTime::Delta::FromMilliseconds(1000));
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(QuicTime::Delta::FromSeconds(1),
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            QuicTime::Delta::FromMicroseconds(1000000));
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1, QuicTime::Delta::FromMicroseconds(1000).ToMilliseconds());
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(2, QuicTime::Delta::FromMilliseconds(2000).ToSeconds());
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1000, QuicTime::Delta::FromMilliseconds(1).ToMicroseconds());
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, QuicTime::Delta::FromMicroseconds(1000).ToMilliseconds());
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(QuicTime::Delta::FromMilliseconds(2000).ToMicroseconds(),
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            QuicTime::Delta::FromSeconds(2).ToMicroseconds());
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST(QuicTimeDeltaTest, Add) {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(QuicTime::Delta::FromMicroseconds(2000),
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            QuicTime::Delta::Zero().Add(QuicTime::Delta::FromMilliseconds(2)));
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST(QuicTimeDeltaTest, Subtract) {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(QuicTime::Delta::FromMicroseconds(1000),
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            QuicTime::Delta::FromMilliseconds(2).Subtract(
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                QuicTime::Delta::FromMilliseconds(1)));
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST(QuicTimeDeltaTest, Multiply) {
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  int i = 2;
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(QuicTime::Delta::FromMicroseconds(4000),
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            QuicTime::Delta::FromMilliseconds(2).Multiply(i));
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  double d = 2;
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(QuicTime::Delta::FromMicroseconds(4000),
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            QuicTime::Delta::FromMilliseconds(2).Multiply(d));
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST(QuicTimeDeltaTest, Max) {
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(QuicTime::Delta::FromMicroseconds(2000),
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            QuicTime::Delta::Max(QuicTime::Delta::FromMicroseconds(1000),
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                 QuicTime::Delta::FromMicroseconds(2000)));
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST(QuicTimeDeltaTest, NotEqual) {
673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(QuicTime::Delta::FromSeconds(0) !=
683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)              QuicTime::Delta::FromSeconds(1));
693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_FALSE(QuicTime::Delta::FromSeconds(0) !=
703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)               QuicTime::Delta::FromSeconds(0));
713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class QuicTimeTest : public ::testing::Test {
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockClock clock_;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuicTimeTest, Initialized) {
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(QuicTime::Zero().IsInitialized());
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(QuicTime::Zero().Add(
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      QuicTime::Delta::FromMicroseconds(1)).IsInitialized());
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuicTimeTest, Add) {
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  QuicTime time_1 = QuicTime::Zero().Add(
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      QuicTime::Delta::FromMilliseconds(1));
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  QuicTime time_2 = QuicTime::Zero().Add(
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      QuicTime::Delta::FromMilliseconds(2));
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  QuicTime::Delta diff = time_2.Subtract(time_1);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(QuicTime::Delta::FromMilliseconds(1), diff);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1000, diff.ToMicroseconds());
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1, diff.ToMilliseconds());
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuicTimeTest, Subtract) {
98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  QuicTime time_1 = QuicTime::Zero().Add(
99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      QuicTime::Delta::FromMilliseconds(1));
100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  QuicTime time_2 = QuicTime::Zero().Add(
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      QuicTime::Delta::FromMilliseconds(2));
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(QuicTime::Delta::FromMilliseconds(1), time_2.Subtract(time_1));
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuicTimeTest, SubtractDelta) {
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  QuicTime time = QuicTime::Zero().Add(
108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      QuicTime::Delta::FromMilliseconds(2));
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(QuicTime::Zero().Add(QuicTime::Delta::FromMilliseconds(1)),
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            time.Subtract(QuicTime::Delta::FromMilliseconds(1)));
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(QuicTimeTest, Max) {
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  QuicTime time_1 = QuicTime::Zero().Add(
1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      QuicTime::Delta::FromMilliseconds(1));
1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  QuicTime time_2 = QuicTime::Zero().Add(
1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      QuicTime::Delta::FromMilliseconds(2));
1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(time_2, QuicTime::Max(time_1, time_2));
1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuicTimeTest, MockClock) {
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1));
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  QuicTime now = clock_.ApproximateNow();
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  QuicTime time = QuicTime::Zero().Add(QuicTime::Delta::FromMicroseconds(1000));
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(now, time);
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1));
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  now = clock_.ApproximateNow();
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_NE(now, time);
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  time = time.Add(QuicTime::Delta::FromMilliseconds(1));
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(now, time);
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST_F(QuicTimeTest, LE) {
1403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const QuicTime zero = QuicTime::Zero();
1413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const QuicTime one  = zero.Add(QuicTime::Delta::FromSeconds(1));
1423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(zero <= zero);
1433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(zero <= one);
1443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_TRUE(one <= one);
1453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  EXPECT_FALSE(one <= zero);
1463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace test
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace net
150