xref: /aosp_15_r20/external/grpc-grpc/test/core/gprpp/time_util_test.cc (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
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