protobuf/src/google/protobuf/stubs/status_test.cc
Go to the documentation of this file.
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 // * Redistributions in binary form must reproduce the above
12 // copyright notice, this list of conditions and the following disclaimer
13 // in the documentation and/or other materials provided with the
14 // distribution.
15 // * Neither the name of Google Inc. nor the names of its
16 // contributors may be used to endorse or promote products derived from
17 // this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 #include <google/protobuf/stubs/status.h>
31 
32 #include <stdio.h>
33 
34 #include <google/protobuf/testing/googletest.h>
35 #include <gtest/gtest.h>
36 
37 namespace google {
38 namespace protobuf {
39 namespace {
40 
41 TEST(Status, Constructor) {
42  EXPECT_EQ(util::StatusCode::kOk,
43  util::Status(util::StatusCode::kOk, "").code());
44  EXPECT_EQ(util::StatusCode::kCancelled,
45  util::Status(util::StatusCode::kCancelled, "").code());
46  EXPECT_EQ(util::StatusCode::kUnknown,
47  util::Status(util::StatusCode::kUnknown, "").code());
48  EXPECT_EQ(util::StatusCode::kInvalidArgument,
49  util::Status(util::StatusCode::kInvalidArgument, "").code());
50  EXPECT_EQ(util::StatusCode::kDeadlineExceeded,
51  util::Status(util::StatusCode::kDeadlineExceeded, "").code());
52  EXPECT_EQ(util::StatusCode::kNotFound,
53  util::Status(util::StatusCode::kNotFound, "").code());
54  EXPECT_EQ(util::StatusCode::kAlreadyExists,
55  util::Status(util::StatusCode::kAlreadyExists, "").code());
56  EXPECT_EQ(util::StatusCode::kPermissionDenied,
57  util::Status(util::StatusCode::kPermissionDenied, "").code());
58  EXPECT_EQ(util::StatusCode::kUnauthenticated,
59  util::Status(util::StatusCode::kUnauthenticated, "").code());
60  EXPECT_EQ(util::StatusCode::kResourceExhausted,
61  util::Status(util::StatusCode::kResourceExhausted, "").code());
62  EXPECT_EQ(util::StatusCode::kFailedPrecondition,
63  util::Status(util::StatusCode::kFailedPrecondition, "").code());
64  EXPECT_EQ(util::StatusCode::kAborted,
65  util::Status(util::StatusCode::kAborted, "").code());
66  EXPECT_EQ(util::StatusCode::kOutOfRange,
67  util::Status(util::StatusCode::kOutOfRange, "").code());
68  EXPECT_EQ(util::StatusCode::kUnimplemented,
69  util::Status(util::StatusCode::kUnimplemented, "").code());
70  EXPECT_EQ(util::StatusCode::kInternal,
71  util::Status(util::StatusCode::kInternal, "").code());
72  EXPECT_EQ(util::StatusCode::kUnavailable,
73  util::Status(util::StatusCode::kUnavailable, "").code());
74  EXPECT_EQ(util::StatusCode::kDataLoss,
75  util::Status(util::StatusCode::kDataLoss, "").code());
76 }
77 
78 TEST(Status, ConstructorZero) {
79  util::Status status(util::StatusCode::kOk, "msg");
81  EXPECT_EQ("OK", status.ToString());
83 }
84 
85 TEST(Status, ConvenienceConstructors) {
86  EXPECT_EQ(util::StatusCode::kOk, util::OkStatus().code());
88 
89  EXPECT_EQ(util::StatusCode::kCancelled, util::CancelledError("").code());
91  EXPECT_EQ("foo", util::CancelledError("foo").message());
92  EXPECT_EQ("bar", util::CancelledError("bar").message());
93 
94  EXPECT_EQ(util::StatusCode::kUnknown, util::UnknownError("").code());
96  EXPECT_EQ("foo", util::UnknownError("foo").message());
97  EXPECT_EQ("bar", util::UnknownError("bar").message());
98 
99  EXPECT_EQ(util::StatusCode::kInvalidArgument,
104 
105  EXPECT_EQ(util::StatusCode::kDeadlineExceeded,
110 
111  EXPECT_EQ(util::StatusCode::kNotFound, util::NotFoundError("").code());
113  EXPECT_EQ("foo", util::NotFoundError("foo").message());
114  EXPECT_EQ("bar", util::NotFoundError("bar").message());
115 
116  EXPECT_EQ(util::StatusCode::kAlreadyExists,
119  EXPECT_EQ("foo", util::AlreadyExistsError("foo").message());
120  EXPECT_EQ("bar", util::AlreadyExistsError("bar").message());
121 
122  EXPECT_EQ(util::StatusCode::kPermissionDenied,
127 
128  EXPECT_EQ(util::StatusCode::kUnauthenticated,
133 
134  EXPECT_EQ(util::StatusCode::kResourceExhausted,
139 
140  EXPECT_EQ(util::StatusCode::kFailedPrecondition,
145 
146  EXPECT_EQ(util::StatusCode::kAborted, util::AbortedError("").code());
148  EXPECT_EQ("foo", util::AbortedError("foo").message());
149  EXPECT_EQ("bar", util::AbortedError("bar").message());
150 
151  EXPECT_EQ(util::StatusCode::kOutOfRange, util::OutOfRangeError("").code());
153  EXPECT_EQ("foo", util::OutOfRangeError("foo").message());
154  EXPECT_EQ("bar", util::OutOfRangeError("bar").message());
155 
156  EXPECT_EQ(util::StatusCode::kUnimplemented,
159  EXPECT_EQ("foo", util::UnimplementedError("foo").message());
160  EXPECT_EQ("bar", util::UnimplementedError("bar").message());
161 
162  EXPECT_EQ(util::StatusCode::kInternal, util::InternalError("").code());
164  EXPECT_EQ("foo", util::InternalError("foo").message());
165  EXPECT_EQ("bar", util::InternalError("bar").message());
166 
167  EXPECT_EQ(util::StatusCode::kUnavailable, util::UnavailableError("").code());
169  EXPECT_EQ("foo", util::UnavailableError("foo").message());
170  EXPECT_EQ("bar", util::UnavailableError("bar").message());
171 
172  EXPECT_EQ(util::StatusCode::kDataLoss, util::DataLossError("").code());
174  EXPECT_EQ("foo", util::DataLossError("foo").message());
175  EXPECT_EQ("bar", util::DataLossError("bar").message());
176 }
177 
178 TEST(Status, ConvenienceTests) {
196 }
197 
198 TEST(Status, Empty) {
200  EXPECT_TRUE(status.ok());
202  EXPECT_EQ(util::StatusCode::kOk, status.code());
203  EXPECT_EQ("OK", status.ToString());
204 }
205 
206 TEST(Status, CheckOK) {
209  GOOGLE_CHECK_OK(status) << "Failed";
210  GOOGLE_DCHECK_OK(status) << "Failed";
211 }
212 
213 TEST(Status, ErrorMessage) {
216  EXPECT_EQ("", status.message().ToString());
217  EXPECT_EQ("INVALID_ARGUMENT", status.ToString());
220  EXPECT_EQ("msg", status.message().ToString());
221  EXPECT_EQ("INVALID_ARGUMENT:msg", status.ToString());
222  status = util::Status(util::StatusCode::kOk, "msg");
223  EXPECT_TRUE(status.ok());
224  EXPECT_EQ("", status.message().ToString());
225  EXPECT_EQ("OK", status.ToString());
226 }
227 
228 TEST(Status, Copy) {
229  util::Status a = util::UnknownError("message");
230  util::Status b(a);
231  ASSERT_EQ(a.ToString(), b.ToString());
232 }
233 
234 TEST(Status, Assign) {
235  util::Status a = util::UnknownError("message");
236  util::Status b;
237  b = a;
238  ASSERT_EQ(a.ToString(), b.ToString());
239 }
240 
241 TEST(Status, AssignEmpty) {
242  util::Status a = util::UnknownError("message");
243  util::Status b;
244  a = b;
245  ASSERT_EQ(std::string("OK"), a.ToString());
246  ASSERT_TRUE(b.ok());
247  ASSERT_TRUE(a.ok());
248 }
249 
250 TEST(Status, EqualsOK) { ASSERT_EQ(util::OkStatus(), util::Status()); }
251 
252 TEST(Status, EqualsSame) {
253  const util::Status a = util::CancelledError("message");
254  const util::Status b = util::CancelledError("message");
255  ASSERT_EQ(a, b);
256 }
257 
258 TEST(Status, EqualsCopy) {
259  const util::Status a = util::CancelledError("message");
260  const util::Status b = a;
261  ASSERT_EQ(a, b);
262 }
263 
264 TEST(Status, EqualsDifferentCode) {
265  const util::Status a = util::CancelledError("message");
266  const util::Status b = util::UnknownError("message");
267  ASSERT_NE(a, b);
268 }
269 
270 TEST(Status, EqualsDifferentMessage) {
271  const util::Status a = util::CancelledError("message");
272  const util::Status b = util::CancelledError("another");
273  ASSERT_NE(a, b);
274 }
275 
276 } // namespace
277 } // namespace protobuf
278 } // namespace google
EXPECT_FALSE
#define EXPECT_FALSE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1970
absl::InvalidArgumentError
Status InvalidArgumentError(absl::string_view message)
Definition: third_party/abseil-cpp/absl/status/status.cc:351
ASSERT_NE
#define ASSERT_NE(val1, val2)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2060
absl::AbortedError
Status AbortedError(absl::string_view message)
Definition: third_party/abseil-cpp/absl/status/status.cc:323
absl::Status::ToString
std::string ToString(StatusToStringMode mode=StatusToStringMode::kDefault) const
Definition: third_party/abseil-cpp/absl/status/status.h:821
absl::IsDeadlineExceeded
bool IsDeadlineExceeded(const Status &status)
Definition: third_party/abseil-cpp/absl/status/status.cc:403
absl::IsUnavailable
bool IsUnavailable(const Status &status)
Definition: third_party/abseil-cpp/absl/status/status.cc:439
absl::IsInternal
bool IsInternal(const Status &status)
Definition: third_party/abseil-cpp/absl/status/status.cc:411
absl::CancelledError
Status CancelledError(absl::string_view message)
Definition: third_party/abseil-cpp/absl/status/status.cc:331
absl::IsOutOfRange
bool IsOutOfRange(const Status &status)
Definition: third_party/abseil-cpp/absl/status/status.cc:423
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
absl::OkStatus
Status OkStatus()
Definition: third_party/abseil-cpp/absl/status/status.h:882
google::protobuf
Definition: bloaty/third_party/protobuf/benchmarks/util/data_proto2_to_proto3_util.h:12
status
absl::Status status
Definition: rls.cc:251
a
int a
Definition: abseil-cpp/absl/container/internal/hash_policy_traits_test.cc:88
absl::InternalError
Status InternalError(absl::string_view message)
Definition: third_party/abseil-cpp/absl/status/status.cc:347
absl::IsDataLoss
bool IsDataLoss(const Status &status)
Definition: third_party/abseil-cpp/absl/status/status.cc:399
message
char * message
Definition: libuv/docs/code/tty-gravity/main.c:12
grpc_status._async.code
code
Definition: grpcio_status/grpc_status/_async.py:34
absl::PermissionDeniedError
Status PermissionDeniedError(absl::string_view message)
Definition: third_party/abseil-cpp/absl/status/status.cc:363
EXPECT_EQ
#define EXPECT_EQ(a, b)
Definition: iomgr/time_averaged_stats_test.cc:27
absl::UnauthenticatedError
Status UnauthenticatedError(absl::string_view message)
Definition: third_party/abseil-cpp/absl/status/status.cc:371
absl::IsUnknown
bool IsUnknown(const Status &status)
Definition: third_party/abseil-cpp/absl/status/status.cc:447
absl::FailedPreconditionError
Status FailedPreconditionError(absl::string_view message)
Definition: third_party/abseil-cpp/absl/status/status.cc:343
absl::IsCancelled
bool IsCancelled(const Status &status)
Definition: third_party/abseil-cpp/absl/status/status.cc:395
absl::IsUnauthenticated
bool IsUnauthenticated(const Status &status)
Definition: third_party/abseil-cpp/absl/status/status.cc:435
absl::UnknownError
Status UnknownError(absl::string_view message)
Definition: third_party/abseil-cpp/absl/status/status.cc:383
absl::Status::message
absl::string_view message() const
Definition: third_party/abseil-cpp/absl/status/status.h:806
absl::IsNotFound
bool IsNotFound(const Status &status)
Definition: third_party/abseil-cpp/absl/status/status.cc:419
absl::DataLossError
Status DataLossError(absl::string_view message)
Definition: third_party/abseil-cpp/absl/status/status.cc:335
absl::IsInvalidArgument
bool IsInvalidArgument(const Status &status)
Definition: third_party/abseil-cpp/absl/status/status.cc:415
google::protobuf::TEST
TEST(ArenaTest, ArenaConstructable)
Definition: bloaty/third_party/protobuf/src/google/protobuf/arena_unittest.cc:156
absl::OutOfRangeError
Status OutOfRangeError(absl::string_view message)
Definition: third_party/abseil-cpp/absl/status/status.cc:359
b
uint64_t b
Definition: abseil-cpp/absl/container/internal/layout_test.cc:53
Empty
Definition: abseil-cpp/absl/container/internal/compressed_tuple_test.cc:33
absl::ResourceExhaustedError
Status ResourceExhaustedError(absl::string_view message)
Definition: third_party/abseil-cpp/absl/status/status.cc:367
absl::IsFailedPrecondition
bool IsFailedPrecondition(const Status &status)
Definition: third_party/abseil-cpp/absl/status/status.cc:407
absl::IsResourceExhausted
bool IsResourceExhausted(const Status &status)
Definition: third_party/abseil-cpp/absl/status/status.cc:431
Copy
@ Copy
Definition: upb/benchmarks/benchmark.cc:200
absl::DeadlineExceededError
Status DeadlineExceededError(absl::string_view message)
Definition: third_party/abseil-cpp/absl/status/status.cc:339
grpc::protobuf::util::Status
GRPC_CUSTOM_UTIL_STATUS Status
Definition: include/grpcpp/impl/codegen/config_protobuf.h:93
ASSERT_TRUE
#define ASSERT_TRUE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1973
ok
bool ok
Definition: async_end2end_test.cc:197
absl::IsUnimplemented
bool IsUnimplemented(const Status &status)
Definition: third_party/abseil-cpp/absl/status/status.cc:443
absl::NotFoundError
Status NotFoundError(absl::string_view message)
Definition: third_party/abseil-cpp/absl/status/status.cc:355
absl::Status::ok
ABSL_MUST_USE_RESULT bool ok() const
Definition: third_party/abseil-cpp/absl/status/status.h:802
absl::UnavailableError
Status UnavailableError(absl::string_view message)
Definition: third_party/abseil-cpp/absl/status/status.cc:375
EXPECT_TRUE
#define EXPECT_TRUE(condition)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1967
absl::UnimplementedError
Status UnimplementedError(absl::string_view message)
Definition: third_party/abseil-cpp/absl/status/status.cc:379
absl::IsPermissionDenied
bool IsPermissionDenied(const Status &status)
Definition: third_party/abseil-cpp/absl/status/status.cc:427
absl::IsAborted
bool IsAborted(const Status &status)
Definition: third_party/abseil-cpp/absl/status/status.cc:387
absl::Status::code
absl::StatusCode code() const
Definition: third_party/abseil-cpp/absl/status/status.cc:233
testing::Assign
PolymorphicAction< internal::AssignAction< T1, T2 > > Assign(T1 *ptr, T2 val)
Definition: bloaty/third_party/googletest/googlemock/include/gmock/gmock-actions.h:1061
absl::IsAlreadyExists
bool IsAlreadyExists(const Status &status)
Definition: third_party/abseil-cpp/absl/status/status.cc:391
google
Definition: bloaty/third_party/protobuf/benchmarks/util/data_proto2_to_proto3_util.h:11
GOOGLE_DCHECK_OK
#define GOOGLE_DCHECK_OK
Definition: bloaty/third_party/protobuf/src/google/protobuf/stubs/logging.h:195
GOOGLE_CHECK_OK
#define GOOGLE_CHECK_OK(A)
Definition: bloaty/third_party/protobuf/src/google/protobuf/stubs/logging.h:155
absl::AlreadyExistsError
Status AlreadyExistsError(absl::string_view message)
Definition: third_party/abseil-cpp/absl/status/status.cc:327
ASSERT_EQ
#define ASSERT_EQ(val1, val2)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2056


grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:18