timeout_encoding_test.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2015 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
20 
21 #include <stdio.h>
22 #include <string.h>
23 
24 #include <string>
25 
26 #include <gtest/gtest.h>
27 
28 #include "absl/strings/str_format.h"
29 
30 #include <grpc/support/alloc.h>
31 #include <grpc/support/log.h>
32 
38 
39 namespace grpc_core {
40 namespace {
41 
42 void assert_encodes_as(Duration ts, const char* s) {
44  Timeout::FromDuration(ts).Encode().as_string_view())
45  << " ts=" << ts.ToString();
46 }
47 
48 TEST(TimeoutTest, Encoding) {
49  assert_encodes_as(Duration::Milliseconds(-1), "1n");
50  assert_encodes_as(Duration::Milliseconds(-10), "1n");
51  assert_encodes_as(Duration::Milliseconds(1), "1m");
52  assert_encodes_as(Duration::Milliseconds(10), "10m");
53  assert_encodes_as(Duration::Milliseconds(100), "100m");
54  assert_encodes_as(Duration::Milliseconds(890), "890m");
55  assert_encodes_as(Duration::Milliseconds(900), "900m");
56  assert_encodes_as(Duration::Milliseconds(901), "901m");
57  assert_encodes_as(Duration::Milliseconds(1000), "1S");
58  assert_encodes_as(Duration::Milliseconds(2000), "2S");
59  assert_encodes_as(Duration::Milliseconds(2500), "2500m");
60  assert_encodes_as(Duration::Milliseconds(59900), "59900m");
61  assert_encodes_as(Duration::Seconds(50), "50S");
62  assert_encodes_as(Duration::Seconds(59), "59S");
63  assert_encodes_as(Duration::Seconds(60), "1M");
64  assert_encodes_as(Duration::Seconds(80), "80S");
65  assert_encodes_as(Duration::Seconds(90), "90S");
66  assert_encodes_as(Duration::Seconds(120), "2M");
67  assert_encodes_as(Duration::Minutes(20), "20M");
68  assert_encodes_as(Duration::Hours(1), "1H");
69  assert_encodes_as(Duration::Hours(10), "10H");
70  assert_encodes_as(Duration::Hours(1) - Duration::Milliseconds(100), "1H");
71  assert_encodes_as(Duration::Hours(100), "100H");
72  assert_encodes_as(Duration::Hours(100000), "27000H");
73 }
74 
75 void assert_decodes_as(const char* buffer, Duration expected) {
77 }
78 
79 void decode_suite(char ext, Duration (*answer)(int64_t x)) {
80  long test_vals[] = {1, 12, 123, 1234, 12345, 123456,
81  1234567, 12345678, 123456789, 98765432, 9876543, 987654,
82  98765, 9876, 987, 98, 9};
83  for (unsigned i = 0; i < GPR_ARRAY_SIZE(test_vals); i++) {
84  std::string input = absl::StrFormat("%ld%c", test_vals[i], ext);
85  assert_decodes_as(input.c_str(), answer(test_vals[i]));
86 
87  input = absl::StrFormat(" %ld%c", test_vals[i], ext);
88  assert_decodes_as(input.c_str(), answer(test_vals[i]));
89 
90  input = absl::StrFormat("%ld %c", test_vals[i], ext);
91  assert_decodes_as(input.c_str(), answer(test_vals[i]));
92 
93  input = absl::StrFormat("%ld %c ", test_vals[i], ext);
94  assert_decodes_as(input.c_str(), answer(test_vals[i]));
95  }
96 }
97 
98 TEST(TimeoutTest, DecodingSucceeds) {
99  decode_suite('n', Duration::NanosecondsRoundUp);
100  decode_suite('u', Duration::MicrosecondsRoundUp);
101  decode_suite('m', Duration::Milliseconds);
102  decode_suite('S', Duration::Seconds);
103  decode_suite('M', Duration::Minutes);
104  decode_suite('H', Duration::Hours);
105  assert_decodes_as("1000000000S", Duration::Seconds(1000 * 1000 * 1000));
106  assert_decodes_as("1000000000000000000000u", Duration::Infinity());
107  assert_decodes_as("1000000001S", Duration::Infinity());
108  assert_decodes_as("2000000001S", Duration::Infinity());
109  assert_decodes_as("9999999999S", Duration::Infinity());
110 }
111 
112 void assert_decoding_fails(const char* s) {
114  << " s=" << s;
115 }
116 
117 TEST(TimeoutTest, DecodingFails) {
118  assert_decoding_fails("");
119  assert_decoding_fails(" ");
120  assert_decoding_fails("x");
121  assert_decoding_fails("1");
122  assert_decoding_fails("1x");
123  assert_decoding_fails("1ux");
124  assert_decoding_fails("!");
125  assert_decoding_fails("n1");
126  assert_decoding_fails("-1u");
127 }
128 
129 } // namespace
130 } // namespace grpc_core
131 
132 int main(int argc, char** argv) {
133  ::testing::InitGoogleTest(&argc, argv);
134  return RUN_ALL_TESTS();
135 }
grpc_core::Duration::Hours
static constexpr Duration Hours(int64_t hours)
Definition: src/core/lib/gprpp/time.h:143
log.h
grpc_core::ParseTimeout
absl::optional< Duration > ParseTimeout(const Slice &text)
Definition: timeout_encoding.cc:228
absl::StrFormat
ABSL_MUST_USE_RESULT std::string StrFormat(const FormatSpec< Args... > &format, const Args &... args)
Definition: abseil-cpp/absl/strings/str_format.h:338
grpc_core
Definition: call_metric_recorder.h:31
ext
void * ext
Definition: x509v3.h:87
string.h
absl::string_view
Definition: abseil-cpp/absl/strings/string_view.h:167
useful.h
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
grpc_core::TEST
TEST(AvlTest, NoOp)
Definition: avl_test.cc:21
absl::FormatConversionChar::s
@ s
grpc_core::Timeout::FromDuration
static Timeout FromDuration(Duration duration)
Definition: timeout_encoding.cc:47
EXPECT_EQ
#define EXPECT_EQ(a, b)
Definition: iomgr/time_averaged_stats_test.cc:27
timeout_encoding.h
re2::Encoding
Encoding
Definition: bloaty/third_party/re2/re2/compile.cc:122
grpc_core::slice_detail::CopyConstructors< Slice >::FromCopiedString
static Slice FromCopiedString(const char *s)
Definition: src/core/lib/slice/slice.h:173
int64_t
signed __int64 int64_t
Definition: stdint-msvc2008.h:89
main
int main(int argc, char **argv)
Definition: timeout_encoding_test.cc:132
time.h
buffer
char buffer[1024]
Definition: libuv/docs/code/idle-compute/main.c:8
RUN_ALL_TESTS
int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2471
grpc_core::Duration::MicrosecondsRoundUp
static constexpr Duration MicrosecondsRoundUp(int64_t micros)
Definition: src/core/lib/gprpp/time.h:167
test_config.h
grpc_core::Duration::Milliseconds
static constexpr Duration Milliseconds(int64_t millis)
Definition: src/core/lib/gprpp/time.h:155
GPR_ARRAY_SIZE
#define GPR_ARRAY_SIZE(array)
Definition: useful.h:129
testing::InitGoogleTest
GTEST_API_ void InitGoogleTest(int *argc, char **argv)
Definition: bloaty/third_party/googletest/googletest/src/gtest.cc:6106
alloc.h
grpc_core::Duration::Seconds
static constexpr Duration Seconds(int64_t seconds)
Definition: src/core/lib/gprpp/time.h:151
grpc_core::Duration::NanosecondsRoundUp
static constexpr Duration NanosecondsRoundUp(int64_t nanos)
Definition: src/core/lib/gprpp/time.h:171
input
std::string input
Definition: bloaty/third_party/protobuf/src/google/protobuf/io/tokenizer_unittest.cc:197
murmur_hash.h
Duration
Definition: bloaty/third_party/protobuf/src/google/protobuf/duration.pb.h:69
grpc_core::Duration::Infinity
static constexpr Duration Infinity()
Definition: src/core/lib/gprpp/time.h:139
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
grpc_core::Duration::Minutes
static constexpr Duration Minutes(int64_t minutes)
Definition: src/core/lib/gprpp/time.h:147


grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:39