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