From ceb66a4996cf8bf642cc0adffdc99df4026485ed Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 4 Mar 2019 12:52:42 -0600 Subject: [PATCH] ceph_test_rados_[a]io_pp: add test verifying read-into-bufferlist behavior libradosstriper relies on this, and other callers may too. Signed-off-by: Sage Weil --- src/test/librados/aio_cxx.cc | 42 ++++++++++++++++++++++++++++++++++++ src/test/librados/io_cxx.cc | 20 +++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/src/test/librados/aio_cxx.cc b/src/test/librados/aio_cxx.cc index b812930766b28..cf3750ea7798e 100644 --- a/src/test/librados/aio_cxx.cc +++ b/src/test/librados/aio_cxx.cc @@ -356,6 +356,48 @@ TEST(LibRadosAio, RoundTripSparseReadPP) { delete my_completion2; } +TEST(LibRadosAioPP, ReadIntoBufferlist) { + + // here we test reading into a non-empty bufferlist referencing existing + // buffers + + AioTestDataPP test_data; + ASSERT_EQ("", test_data.init()); + AioCompletion *my_completion = test_data.m_cluster.aio_create_completion( + nullptr, nullptr, nullptr); + AioCompletion *my_completion_null = NULL; + ASSERT_NE(my_completion, my_completion_null); + char buf[128]; + memset(buf, 0xcc, sizeof(buf)); + bufferlist bl1; + bl1.append(buf, sizeof(buf)); + ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion, + bl1, sizeof(buf), 0)); + { + TestAlarm alarm; + ASSERT_EQ(0, my_completion->wait_for_complete()); + } + ASSERT_EQ(0, my_completion->get_return_value()); + + bufferlist bl2; + char buf2[sizeof(buf)]; + memset(buf2, 0xbb, sizeof(buf2)); + bl2.append(buffer::create_static(sizeof(buf2), buf2)); + AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion( + nullptr, nullptr, nullptr); + ASSERT_NE(my_completion2, my_completion_null); + ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2, + &bl2, sizeof(buf), 0)); + { + TestAlarm alarm; + ASSERT_EQ(0, my_completion2->wait_for_complete()); + } + ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value()); + ASSERT_EQ(0, memcmp(buf, buf2, sizeof(buf))); + delete my_completion; + delete my_completion2; +} + TEST(LibRadosAioPP, XattrsRoundTripPP) { char buf[128]; char attr1[] = "attr1"; diff --git a/src/test/librados/io_cxx.cc b/src/test/librados/io_cxx.cc index c5a01215fc16d..64d03380b765d 100644 --- a/src/test/librados/io_cxx.cc +++ b/src/test/librados/io_cxx.cc @@ -252,6 +252,26 @@ TEST_F(LibRadosIoPP, Checksum) { ASSERT_EQ(bl.crc32c(-1), csum); } +TEST_F(LibRadosIoPP, ReadIntoBufferlist) { + + // here we test reading into a non-empty bufferlist referencing existing + // buffers + + char buf[128]; + Rados cluster; + memset(buf, 0xcc, sizeof(buf)); + bufferlist bl; + bl.append(buf, sizeof(buf)); + ASSERT_EQ(0, ioctx.write("foo", bl, sizeof(buf), 0)); + bufferlist bl2; + char buf2[sizeof(buf)]; + memset(buf2, 0xbb, sizeof(buf2)); + bl2.append(buffer::create_static(sizeof(buf2), buf2)); + ASSERT_EQ((int)sizeof(buf), ioctx.read("foo", bl2, sizeof(buf), 0)); + ASSERT_EQ(0, memcmp(buf, buf2, sizeof(buf))); + ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf))); +} + TEST_F(LibRadosIoPP, OverlappingWriteRoundTripPP) { char buf[128]; char buf2[64]; -- 2.39.5