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