1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/tools/quic/quic_epoll_clock.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/tools/quic/test_tools/mock_epoll_server.h" 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace net { 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace tools { 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace test { 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(QuicEpollClockTest, ApproximateNowInUsec) { 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockEpollServer epoll_server; 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QuicEpollClock clock(&epoll_server); 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) epoll_server.set_now_in_usec(1000000); 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(1000000, 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) clock.ApproximateNow().Subtract(QuicTime::Zero()).ToMicroseconds()); 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) epoll_server.AdvanceBy(5); 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(1000005, 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) clock.ApproximateNow().Subtract(QuicTime::Zero()).ToMicroseconds()); 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(QuicEpollClockTest, NowInUsec) { 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockEpollServer epoll_server; 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QuicEpollClock clock(&epoll_server); 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) epoll_server.set_now_in_usec(1000000); 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(1000000, 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) clock.Now().Subtract(QuicTime::Zero()).ToMicroseconds()); 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) epoll_server.AdvanceBy(5); 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(1000005, 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) clock.Now().Subtract(QuicTime::Zero()).ToMicroseconds()); 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)TEST(QuicEpollClockTest, WallNow) { 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) MockEpollServer epoll_server; 42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) QuicEpollClock clock(&epoll_server); 43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Time start = base::Time::Now(); 45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) QuicWallTime now = clock.WallNow(); 46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Time end = base::Time::Now(); 47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // If end > start, then we can check now is between start and end. 49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (end > start) { 50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_LE(static_cast<uint64>(start.ToTimeT()), now.ToUNIXSeconds()); 51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_LE(now.ToUNIXSeconds(), static_cast<uint64>(end.ToTimeT())); 52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace test 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace tools 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace net 58