1 /*
2  * Copyright (c) Facebook, Inc. and its affiliates.
3  * All rights reserved.
4  *
5  * This source code is licensed under the BSD-style license found in the
6  * LICENSE file in the root directory of this source tree.
7  */
8 
9 #include <proxygen/lib/utils/Time.h>
10 #include <proxygen/lib/utils/test/MockTime.h>
11 
12 #include <folly/portability/GTest.h>
13 
14 using namespace proxygen;
15 
TEST(TimeTest,GetDateTimeStr)16 TEST(TimeTest, GetDateTimeStr) {
17   ASSERT_FALSE(getDateTimeStr(getCurrentTime()).empty());
18 
19   SystemClock::time_point sys_tp{}; // epoch timepoint
20   SteadyClock::time_point tp =
21       SteadyClock::now() + std::chrono::duration_cast<SteadyClock::duration>(
22                                sys_tp - SystemClock::now());
23   ASSERT_EQ("1970-01-01T00:00:00 +0000", getDateTimeStr(tp));
24 }
25 
TEST(StopWatchTest,StartStopReset)26 TEST(StopWatchTest, StartStopReset) {
27   auto mockTime = std::make_shared<MockTimeUtil>();
28   StopWatch<std::chrono::microseconds> stopWatch(mockTime);
29 
30   stopWatch.start();
31   mockTime->advance(std::chrono::milliseconds(1));
32   stopWatch.stop();
33 
34   EXPECT_EQ(stopWatch.getElapsedTime().count(),
35             std::chrono::microseconds(1000).count());
36 
37   stopWatch.reset();
38   EXPECT_EQ(stopWatch.getElapsedTime().count(),
39             std::chrono::microseconds(0).count());
40 }
41 
TEST(StopWatchTest,StartTwiceReset)42 TEST(StopWatchTest, StartTwiceReset) {
43   auto mockTime = std::make_shared<MockTimeUtil>();
44   StopWatch<std::chrono::microseconds> stopWatch(mockTime);
45 
46   stopWatch.start();
47   mockTime->advance(std::chrono::milliseconds(1));
48   stopWatch.start();
49   stopWatch.stop();
50 
51   EXPECT_EQ(stopWatch.getElapsedTime().count(),
52             std::chrono::microseconds(0).count());
53 }
54 
TEST(StopWatchTest,ContinueWithoutReset)55 TEST(StopWatchTest, ContinueWithoutReset) {
56   auto mockTime = std::make_shared<MockTimeUtil>();
57   StopWatch<std::chrono::microseconds> stopWatch(mockTime);
58 
59   stopWatch.start();
60   mockTime->advance(std::chrono::milliseconds(1));
61   stopWatch.stop();
62 
63   mockTime->advance(std::chrono::milliseconds(1));
64 
65   stopWatch.start();
66   mockTime->advance(std::chrono::milliseconds(1));
67   stopWatch.stop();
68 
69   EXPECT_EQ(stopWatch.getElapsedTime().count(),
70             std::chrono::microseconds(2000).count());
71 }
72 
TEST(StopWatchTest,StopWatchTimedScope)73 TEST(StopWatchTest, StopWatchTimedScope) {
74   auto mockTime = std::make_shared<MockTimeUtil>();
75   StopWatch<std::chrono::microseconds> stopWatch(mockTime);
76 
77   {
78     auto timedScope = stopWatch.createTimedScope();
79     mockTime->advance(std::chrono::milliseconds(1));
80   }
81 
82   EXPECT_EQ(stopWatch.getElapsedTime().count(),
83             std::chrono::microseconds(1000).count());
84 }
85