@@ -22,6 +22,9 @@ GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN
2222namespace internal {
2323
2424using ::google::cloud::testing_util::StatusIs;
25+ using ::testing::_;
26+ using ::testing::Contains;
27+ using ::testing::Pair;
2528
2629TEST (MakeStatus, Basic) {
2730 auto error_info = ErrorInfo (" REASON" , " domain" , {{" key" , " value" }});
@@ -60,6 +63,123 @@ TEST(MakeStatus, Basic) {
6063 }
6164}
6265
66+ TEST (MakeStatus, ErrorInfoBuilderDefault) {
67+ auto const code = StatusCode::kInvalidArgument ;
68+ auto const actual = GCP_ERROR_INFO ().Build (code);
69+ EXPECT_EQ (actual.reason (), StatusCodeToString (code));
70+ EXPECT_EQ (actual.domain (), " gcloud-cpp" );
71+ EXPECT_THAT (actual.metadata (),
72+ Contains (Pair (" gcloud-cpp.version" , version_string ())));
73+ EXPECT_THAT (actual.metadata (),
74+ Contains (Pair (" gcloud-cpp.source.filename" , __FILE__)));
75+ EXPECT_THAT (actual.metadata (), Contains (Pair (" gcloud-cpp.source.line" , _)));
76+ EXPECT_THAT (actual.metadata (),
77+ Contains (Pair (" gcloud-cpp.source.function" , _)));
78+ }
79+
80+ TEST (MakeStatus, ErrorInfoBuilderWithReason) {
81+ auto const code = StatusCode::kInvalidArgument ;
82+ auto const actual = GCP_ERROR_INFO ().WithReason (" TEST_REASON" ).Build (code);
83+ EXPECT_EQ (actual.reason (), " TEST_REASON" );
84+ EXPECT_EQ (actual.domain (), " gcloud-cpp" );
85+ EXPECT_THAT (actual.metadata (),
86+ Contains (Pair (" gcloud-cpp.version" , version_string ())));
87+ EXPECT_THAT (actual.metadata (),
88+ Contains (Pair (" gcloud-cpp.source.filename" , __FILE__)));
89+ EXPECT_THAT (actual.metadata (), Contains (Pair (" gcloud-cpp.source.line" , _)));
90+ EXPECT_THAT (actual.metadata (),
91+ Contains (Pair (" gcloud-cpp.source.function" , _)));
92+ }
93+
94+ TEST (MakeStatus, ErrorInfoBuilderWithErrorContext) {
95+ auto ec1 = ErrorContext ({{" k0" , " v0" }, {" k1" , " v1" }});
96+ auto ec2 = ErrorContext ({{" k0" , " not-used" }, {" k2" , " v2" }});
97+
98+ auto const code = StatusCode::kInvalidArgument ;
99+ auto const actual =
100+ GCP_ERROR_INFO ().WithContext (ec1).WithContext (ec2).Build (code);
101+ EXPECT_THAT (actual.metadata (), Contains (Pair (" k0" , " v0" )));
102+ EXPECT_THAT (actual.metadata (), Contains (Pair (" k1" , " v1" )));
103+ EXPECT_THAT (actual.metadata (), Contains (Pair (" k2" , " v2" )));
104+ EXPECT_EQ (actual.reason (), StatusCodeToString (code));
105+ EXPECT_EQ (actual.domain (), " gcloud-cpp" );
106+ EXPECT_THAT (actual.metadata (),
107+ Contains (Pair (" gcloud-cpp.version" , version_string ())));
108+ EXPECT_THAT (actual.metadata (),
109+ Contains (Pair (" gcloud-cpp.source.filename" , __FILE__)));
110+ EXPECT_THAT (actual.metadata (), Contains (Pair (" gcloud-cpp.source.line" , _)));
111+ EXPECT_THAT (actual.metadata (),
112+ Contains (Pair (" gcloud-cpp.source.function" , _)));
113+ }
114+
115+ TEST (MakeStatus, ErrorInfoBuilderWithMetadata) {
116+ auto const code = StatusCode::kInvalidArgument ;
117+ auto const actual = GCP_ERROR_INFO ()
118+ .WithMetadata (" k0" , " v0" )
119+ .WithMetadata (" k1" , " v1" )
120+ .WithMetadata (" k0" , " not-used" )
121+ .Build (code);
122+ EXPECT_THAT (actual.metadata (), Contains (Pair (" k0" , " v0" )));
123+ EXPECT_THAT (actual.metadata (), Contains (Pair (" k1" , " v1" )));
124+ EXPECT_EQ (actual.reason (), StatusCodeToString (code));
125+ EXPECT_EQ (actual.domain (), " gcloud-cpp" );
126+ EXPECT_THAT (actual.metadata (),
127+ Contains (Pair (" gcloud-cpp.version" , version_string ())));
128+ EXPECT_THAT (actual.metadata (),
129+ Contains (Pair (" gcloud-cpp.source.filename" , __FILE__)));
130+ EXPECT_THAT (actual.metadata (), Contains (Pair (" gcloud-cpp.source.line" , _)));
131+ EXPECT_THAT (actual.metadata (),
132+ Contains (Pair (" gcloud-cpp.source.function" , _)));
133+ }
134+
135+ TEST (MakeStatus, WithErrorInfo) {
136+ struct TestCase {
137+ StatusCode code;
138+ Status status;
139+ } cases[] = {
140+ {StatusCode::kCancelled , CancelledError (" test" , GCP_ERROR_INFO ())},
141+ {StatusCode::kUnknown , UnknownError (" test" , GCP_ERROR_INFO ())},
142+ {StatusCode::kInvalidArgument ,
143+ InvalidArgumentError (" test" , GCP_ERROR_INFO ())},
144+ {StatusCode::kDeadlineExceeded ,
145+ DeadlineExceededError (" test" , GCP_ERROR_INFO ())},
146+ {StatusCode::kNotFound , NotFoundError (" test" , GCP_ERROR_INFO ())},
147+ {StatusCode::kAlreadyExists ,
148+ AlreadyExistsError (" test" , GCP_ERROR_INFO ())},
149+ {StatusCode::kPermissionDenied ,
150+ PermissionDeniedError (" test" , GCP_ERROR_INFO ())},
151+ {StatusCode::kUnauthenticated ,
152+ UnauthenticatedError (" test" , GCP_ERROR_INFO ())},
153+ {StatusCode::kResourceExhausted ,
154+ ResourceExhaustedError (" test" , GCP_ERROR_INFO ())},
155+ {StatusCode::kFailedPrecondition ,
156+ FailedPreconditionError (" test" , GCP_ERROR_INFO ())},
157+ {StatusCode::kAborted , AbortedError (" test" , GCP_ERROR_INFO ())},
158+ {StatusCode::kOutOfRange , OutOfRangeError (" test" , GCP_ERROR_INFO ())},
159+ {StatusCode::kUnimplemented ,
160+ UnimplementedError (" test" , GCP_ERROR_INFO ())},
161+ {StatusCode::kInternal , InternalError (" test" , GCP_ERROR_INFO ())},
162+ {StatusCode::kUnavailable , UnavailableError (" test" , GCP_ERROR_INFO ())},
163+ {StatusCode::kDataLoss , DataLossError (" test" , GCP_ERROR_INFO ())},
164+ };
165+
166+ for (auto const & test : cases) {
167+ SCOPED_TRACE (" Testing for " + StatusCodeToString (test.code ));
168+ EXPECT_THAT (test.status , StatusIs (test.code ));
169+ EXPECT_EQ (test.status .message (), " test" );
170+ EXPECT_EQ (test.status .error_info ().reason (), StatusCodeToString (test.code ));
171+ EXPECT_EQ (test.status .error_info ().domain (), " gcloud-cpp" );
172+ EXPECT_THAT (test.status .error_info ().metadata (),
173+ Contains (Pair (" gcloud-cpp.version" , _)));
174+ EXPECT_THAT (test.status .error_info ().metadata (),
175+ Contains (Pair (" gcloud-cpp.source.filename" , __FILE__)));
176+ EXPECT_THAT (test.status .error_info ().metadata (),
177+ Contains (Pair (" gcloud-cpp.source.line" , _)));
178+ EXPECT_THAT (test.status .error_info ().metadata (),
179+ Contains (Pair (" gcloud-cpp.source.function" , _)));
180+ }
181+ }
182+
63183} // namespace internal
64184GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
65185} // namespace cloud
0 commit comments