2020#include " google/cloud/storage/mocks/mock_async_connection.h"
2121#include " google/cloud/storage/mocks/mock_async_object_descriptor_connection.h"
2222#include " google/cloud/storage/mocks/mock_async_reader_connection.h"
23+ #include " google/cloud/storage/mocks/mock_async_rewriter_connection.h"
24+ #include " google/cloud/storage/mocks/mock_async_writer_connection.h"
2325#include " google/cloud/storage/testing/canonical_errors.h"
2426#include " google/cloud/common_options.h"
2527#include " google/cloud/log.h"
@@ -35,12 +37,17 @@ namespace {
3537
3638using ::google::cloud::storage::testing::canonical_errors::PermanentError;
3739using ::google::cloud::storage_experimental::AsyncReaderConnection;
40+ using ::google::cloud::storage_experimental::AsyncWriterConnection;
3841using ::google::cloud::storage_mocks::MockAsyncConnection;
3942using ::google::cloud::storage_mocks::MockAsyncReaderConnection;
43+ using ::google::cloud::storage_mocks::MockAsyncRewriterConnection;
44+ using ::google::cloud::storage_mocks::MockAsyncWriterConnection;
4045using ::google::cloud::testing_util::ScopedLog;
4146using ::google::cloud::testing_util::StatusIs;
4247using ::testing::Contains;
4348using ::testing::HasSubstr;
49+ using ::testing::IsEmpty;
50+ using ::testing::NotNull;
4451using ::testing::Return;
4552
4653Options LoggingEnabled () {
@@ -144,6 +151,157 @@ TEST(ConnectionLogging, ReadObjectRangeError) {
144151 EXPECT_THAT (log_lines, Contains (HasSubstr (" ReadObjectRange failed" )));
145152}
146153
154+ TEST (ConnectionLogging, ReadObjectRangeNotReady) {
155+ ScopedLog log;
156+ promise<StatusOr<storage_experimental::ReadPayload>> p;
157+
158+ auto mock = std::make_shared<MockAsyncConnection>();
159+ EXPECT_CALL (*mock, ReadObjectRange).WillOnce (Return (p.get_future ()));
160+ EXPECT_CALL (*mock, options).WillRepeatedly (Return (LoggingEnabled ()));
161+
162+ auto conn = MakeLoggingAsyncConnection (mock);
163+ auto fut = conn->ReadObjectRange ({});
164+ EXPECT_FALSE (fut.is_ready ());
165+ p.set_value (storage_experimental::ReadPayload{});
166+ (void )fut.get ();
167+
168+ auto const log_lines = log.ExtractLines ();
169+ EXPECT_THAT (log_lines,
170+ Contains (HasSubstr (" ReadObjectRange(bucket=, object=)" )));
171+ EXPECT_THAT (log_lines, Contains (HasSubstr (" ReadObjectRange succeeded" )));
172+ }
173+
174+ TEST (ConnectionLogging, StartAppendableObjectUpload) {
175+ ScopedLog log;
176+ auto mock = std::make_shared<MockAsyncConnection>();
177+ EXPECT_CALL (*mock, options).WillRepeatedly (Return (LoggingEnabled ()));
178+ EXPECT_CALL (*mock, StartAppendableObjectUpload).WillOnce ([] {
179+ return make_ready_future (StatusOr<std::unique_ptr<AsyncWriterConnection>>(
180+ std::make_unique<MockAsyncWriterConnection>()));
181+ });
182+
183+ auto conn = MakeLoggingAsyncConnection (mock);
184+ auto result = conn->StartAppendableObjectUpload ({{}, LoggingEnabled ()}).get ();
185+ ASSERT_STATUS_OK (result);
186+ EXPECT_THAT (log.ExtractLines (), IsEmpty ());
187+ }
188+
189+ TEST (ConnectionLogging, ResumeAppendableObjectUpload) {
190+ ScopedLog log;
191+ auto mock = std::make_shared<MockAsyncConnection>();
192+ EXPECT_CALL (*mock, options).WillRepeatedly (Return (LoggingEnabled ()));
193+ EXPECT_CALL (*mock, ResumeAppendableObjectUpload).WillOnce ([] {
194+ return make_ready_future (StatusOr<std::unique_ptr<AsyncWriterConnection>>(
195+ std::make_unique<MockAsyncWriterConnection>()));
196+ });
197+
198+ auto conn = MakeLoggingAsyncConnection (mock);
199+ auto result =
200+ conn->ResumeAppendableObjectUpload ({{}, LoggingEnabled ()}).get ();
201+ ASSERT_STATUS_OK (result);
202+ EXPECT_THAT (log.ExtractLines (), IsEmpty ());
203+ }
204+
205+ TEST (ConnectionLogging, StartUnbufferedUpload) {
206+ ScopedLog log;
207+ auto mock = std::make_shared<MockAsyncConnection>();
208+ EXPECT_CALL (*mock, options).WillRepeatedly (Return (LoggingEnabled ()));
209+ EXPECT_CALL (*mock, StartUnbufferedUpload).WillOnce ([] {
210+ return make_ready_future (StatusOr<std::unique_ptr<AsyncWriterConnection>>(
211+ std::make_unique<MockAsyncWriterConnection>()));
212+ });
213+
214+ auto conn = MakeLoggingAsyncConnection (mock);
215+ auto result = conn->StartUnbufferedUpload ({{}, LoggingEnabled ()}).get ();
216+ ASSERT_STATUS_OK (result);
217+ EXPECT_THAT (log.ExtractLines (), IsEmpty ());
218+ }
219+
220+ TEST (ConnectionLogging, StartBufferedUpload) {
221+ ScopedLog log;
222+ auto mock = std::make_shared<MockAsyncConnection>();
223+ EXPECT_CALL (*mock, options).WillRepeatedly (Return (LoggingEnabled ()));
224+ EXPECT_CALL (*mock, StartBufferedUpload).WillOnce ([] {
225+ return make_ready_future (StatusOr<std::unique_ptr<AsyncWriterConnection>>(
226+ std::make_unique<MockAsyncWriterConnection>()));
227+ });
228+
229+ auto conn = MakeLoggingAsyncConnection (mock);
230+ auto result = conn->StartBufferedUpload ({{}, LoggingEnabled ()}).get ();
231+ ASSERT_STATUS_OK (result);
232+ EXPECT_THAT (log.ExtractLines (), IsEmpty ());
233+ }
234+
235+ TEST (ConnectionLogging, ResumeUnbufferedUpload) {
236+ ScopedLog log;
237+ auto mock = std::make_shared<MockAsyncConnection>();
238+ EXPECT_CALL (*mock, options).WillRepeatedly (Return (LoggingEnabled ()));
239+ EXPECT_CALL (*mock, ResumeUnbufferedUpload).WillOnce ([] {
240+ return make_ready_future (StatusOr<std::unique_ptr<AsyncWriterConnection>>(
241+ std::make_unique<MockAsyncWriterConnection>()));
242+ });
243+
244+ auto conn = MakeLoggingAsyncConnection (mock);
245+ auto result = conn->ResumeUnbufferedUpload ({{}, LoggingEnabled ()}).get ();
246+ ASSERT_STATUS_OK (result);
247+ EXPECT_THAT (log.ExtractLines (), IsEmpty ());
248+ }
249+
250+ TEST (ConnectionLogging, ResumeBufferedUpload) {
251+ ScopedLog log;
252+ auto mock = std::make_shared<MockAsyncConnection>();
253+ EXPECT_CALL (*mock, options).WillRepeatedly (Return (LoggingEnabled ()));
254+ EXPECT_CALL (*mock, ResumeBufferedUpload).WillOnce ([] {
255+ return make_ready_future (StatusOr<std::unique_ptr<AsyncWriterConnection>>(
256+ std::make_unique<MockAsyncWriterConnection>()));
257+ });
258+
259+ auto conn = MakeLoggingAsyncConnection (mock);
260+ auto result = conn->ResumeBufferedUpload ({{}, LoggingEnabled ()}).get ();
261+ ASSERT_STATUS_OK (result);
262+ EXPECT_THAT (log.ExtractLines (), IsEmpty ());
263+ }
264+
265+ TEST (ConnectionLogging, ComposeObject) {
266+ ScopedLog log;
267+ auto mock = std::make_shared<MockAsyncConnection>();
268+ EXPECT_CALL (*mock, options).WillRepeatedly (Return (LoggingEnabled ()));
269+ EXPECT_CALL (*mock, ComposeObject)
270+ .WillOnce (Return (
271+ make_ready_future (make_status_or (google::storage::v2::Object{}))));
272+
273+ auto conn = MakeLoggingAsyncConnection (mock);
274+ auto result = conn->ComposeObject ({{}, LoggingEnabled ()}).get ();
275+ ASSERT_STATUS_OK (result);
276+ EXPECT_THAT (log.ExtractLines (), IsEmpty ());
277+ }
278+
279+ TEST (ConnectionLogging, DeleteObject) {
280+ ScopedLog log;
281+ auto mock = std::make_shared<MockAsyncConnection>();
282+ EXPECT_CALL (*mock, options).WillRepeatedly (Return (LoggingEnabled ()));
283+ EXPECT_CALL (*mock, DeleteObject)
284+ .WillOnce (Return (make_ready_future (Status{})));
285+
286+ auto conn = MakeLoggingAsyncConnection (mock);
287+ auto result = conn->DeleteObject ({{}, LoggingEnabled ()}).get ();
288+ ASSERT_STATUS_OK (result);
289+ EXPECT_THAT (log.ExtractLines (), IsEmpty ());
290+ }
291+
292+ TEST (ConnectionLogging, RewriteObject) {
293+ ScopedLog log;
294+ auto mock = std::make_shared<MockAsyncConnection>();
295+ EXPECT_CALL (*mock, options).WillRepeatedly (Return (LoggingEnabled ()));
296+ EXPECT_CALL (*mock, RewriteObject)
297+ .WillOnce (Return (std::make_shared<MockAsyncRewriterConnection>()));
298+
299+ auto conn = MakeLoggingAsyncConnection (mock);
300+ auto result = conn->RewriteObject ({{}, LoggingEnabled ()});
301+ ASSERT_THAT (result, NotNull ());
302+ EXPECT_THAT (log.ExtractLines (), IsEmpty ());
303+ }
304+
147305} // namespace
148306GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
149307} // namespace storage_internal
0 commit comments