1 //
2 // Copyright 2021 the gRPC authors.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16
17 #include "src/core/lib/gprpp/time_util.h"
18
19 #include <algorithm>
20 #include <vector>
21
22 #include "absl/time/time.h"
23 #include "gtest/gtest.h"
24
25 #include <grpc/support/time.h>
26
TEST(TimeUtilTest,ToGprTimeSpecFromAbslDurationWithRegularValues)27 TEST(TimeUtilTest, ToGprTimeSpecFromAbslDurationWithRegularValues) {
28 std::vector<int> times = {-10, -1, 0, 1, 10};
29 for (int t : times) {
30 EXPECT_EQ(0, gpr_time_cmp(gpr_time_from_nanos(t, GPR_TIMESPAN),
31 grpc_core::ToGprTimeSpec(absl::Nanoseconds(t))));
32 EXPECT_EQ(0, gpr_time_cmp(gpr_time_from_micros(t, GPR_TIMESPAN),
33 grpc_core::ToGprTimeSpec(absl::Microseconds(t))));
34 EXPECT_EQ(0, gpr_time_cmp(gpr_time_from_millis(t, GPR_TIMESPAN),
35 grpc_core::ToGprTimeSpec(absl::Milliseconds(t))));
36 EXPECT_EQ(0, gpr_time_cmp(gpr_time_from_seconds(t, GPR_TIMESPAN),
37 grpc_core::ToGprTimeSpec(absl::Seconds(t))));
38 EXPECT_EQ(0, gpr_time_cmp(gpr_time_from_minutes(t, GPR_TIMESPAN),
39 grpc_core::ToGprTimeSpec(absl::Minutes(t))));
40 EXPECT_EQ(0, gpr_time_cmp(gpr_time_from_hours(t, GPR_TIMESPAN),
41 grpc_core::ToGprTimeSpec(absl::Hours(t))));
42 }
43 }
44
TEST(TimeUtilTest,ToGprTimeSpecFromAbslDurationWithInfinites)45 TEST(TimeUtilTest, ToGprTimeSpecFromAbslDurationWithInfinites) {
46 EXPECT_EQ(0,
47 gpr_time_cmp(gpr_inf_past(GPR_TIMESPAN),
48 grpc_core::ToGprTimeSpec(-absl::InfiniteDuration())));
49 EXPECT_EQ(0, gpr_time_cmp(gpr_time_0(GPR_TIMESPAN),
50 grpc_core::ToGprTimeSpec(absl::ZeroDuration())));
51 }
52
TEST(TimeUtilTest,ToGprTimeSpecFromAbslTimeWithRegularValues)53 TEST(TimeUtilTest, ToGprTimeSpecFromAbslTimeWithRegularValues) {
54 std::vector<int> times = {0, 10, 100000000};
55 for (int t : times) {
56 EXPECT_EQ(0,
57 gpr_time_cmp(gpr_time_from_nanos(t, GPR_CLOCK_REALTIME),
58 grpc_core::ToGprTimeSpec(absl::FromUnixNanos(t))));
59 EXPECT_EQ(0,
60 gpr_time_cmp(gpr_time_from_micros(t, GPR_CLOCK_REALTIME),
61 grpc_core::ToGprTimeSpec(absl::FromUnixMicros(t))));
62 EXPECT_EQ(0,
63 gpr_time_cmp(gpr_time_from_millis(t, GPR_CLOCK_REALTIME),
64 grpc_core::ToGprTimeSpec(absl::FromUnixMillis(t))));
65 EXPECT_EQ(0,
66 gpr_time_cmp(gpr_time_from_seconds(t, GPR_CLOCK_REALTIME),
67 grpc_core::ToGprTimeSpec(absl::FromUnixSeconds(t))));
68 }
69 }
70
TEST(TimeUtilTest,ToGprTimeSpecFromAbslTimeWithInfinites)71 TEST(TimeUtilTest, ToGprTimeSpecFromAbslTimeWithInfinites) {
72 EXPECT_EQ(0, gpr_time_cmp(gpr_inf_future(GPR_CLOCK_REALTIME),
73 grpc_core::ToGprTimeSpec(absl::InfiniteFuture())));
74 EXPECT_EQ(0, gpr_time_cmp(gpr_inf_past(GPR_CLOCK_REALTIME),
75 grpc_core::ToGprTimeSpec(absl::InfinitePast())));
76 }
77
TEST(TimeUtilTest,ToAbslDurationWithRegularValues)78 TEST(TimeUtilTest, ToAbslDurationWithRegularValues) {
79 std::vector<int> times = {-10, -1, 0, 1, 10};
80 for (int t : times) {
81 EXPECT_EQ(absl::Nanoseconds(t),
82 grpc_core::ToAbslDuration(gpr_time_from_nanos(t, GPR_TIMESPAN)));
83 EXPECT_EQ(absl::Microseconds(t),
84 grpc_core::ToAbslDuration(gpr_time_from_micros(t, GPR_TIMESPAN)));
85 EXPECT_EQ(absl::Milliseconds(t),
86 grpc_core::ToAbslDuration(gpr_time_from_millis(t, GPR_TIMESPAN)));
87 EXPECT_EQ(absl::Seconds(t), grpc_core::ToAbslDuration(
88 gpr_time_from_seconds(t, GPR_TIMESPAN)));
89 EXPECT_EQ(absl::Minutes(t), grpc_core::ToAbslDuration(
90 gpr_time_from_minutes(t, GPR_TIMESPAN)));
91 EXPECT_EQ(absl::Hours(t),
92 grpc_core::ToAbslDuration(gpr_time_from_hours(t, GPR_TIMESPAN)));
93 }
94 }
95
TEST(TimeUtilTest,ToAbslDurationWithInfinites)96 TEST(TimeUtilTest, ToAbslDurationWithInfinites) {
97 EXPECT_EQ(absl::InfiniteDuration(),
98 grpc_core::ToAbslDuration(gpr_inf_future(GPR_TIMESPAN)));
99 EXPECT_EQ(-absl::InfiniteDuration(),
100 grpc_core::ToAbslDuration(gpr_inf_past(GPR_TIMESPAN)));
101 }
102
TEST(TimeUtilTest,ToAbslTimeWithRegularValues)103 TEST(TimeUtilTest, ToAbslTimeWithRegularValues) {
104 std::vector<int> times = {0, 10, 100000000};
105 for (int t : times) {
106 EXPECT_EQ(absl::FromUnixNanos(t), grpc_core::ToAbslTime(gpr_time_from_nanos(
107 t, GPR_CLOCK_REALTIME)));
108 EXPECT_EQ(
109 absl::FromUnixMicros(t),
110 grpc_core::ToAbslTime(gpr_time_from_micros(t, GPR_CLOCK_REALTIME)));
111 EXPECT_EQ(
112 absl::FromUnixMillis(t),
113 grpc_core::ToAbslTime(gpr_time_from_millis(t, GPR_CLOCK_REALTIME)));
114 EXPECT_EQ(
115 absl::FromUnixSeconds(t),
116 grpc_core::ToAbslTime(gpr_time_from_seconds(t, GPR_CLOCK_REALTIME)));
117 }
118 }
119
TEST(TimeUtilTest,ToAbslTimeWithInfinites)120 TEST(TimeUtilTest, ToAbslTimeWithInfinites) {
121 EXPECT_EQ(absl::InfiniteFuture(),
122 grpc_core::ToAbslTime(gpr_inf_future(GPR_CLOCK_REALTIME)));
123 EXPECT_EQ(absl::InfinitePast(),
124 grpc_core::ToAbslTime(gpr_inf_past(GPR_CLOCK_REALTIME)));
125 EXPECT_EQ(absl::UnixEpoch(),
126 grpc_core::ToAbslTime(gpr_time_0(GPR_CLOCK_REALTIME)));
127 }
128
main(int argc,char ** argv)129 int main(int argc, char** argv) {
130 ::testing::InitGoogleTest(&argc, argv);
131 int ret = RUN_ALL_TESTS();
132 return ret;
133 }
134