From 5d94a84e3e2d1e7df018bfe98e13dcf46a1d8a83 Mon Sep 17 00:00:00 2001 From: Alex Ainscow Date: Tue, 21 Oct 2025 14:25:18 +0100 Subject: [PATCH] Move split ops tests to split_op_cxx.cc Signed-off-by: Alex Ainscow --- src/test/librados/CMakeLists.txt | 6 +++ src/test/librados/io_cxx.cc | 50 ------------------ src/test/librados/split_op_cxx.cc | 86 +++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+), 50 deletions(-) create mode 100644 src/test/librados/split_op_cxx.cc diff --git a/src/test/librados/CMakeLists.txt b/src/test/librados/CMakeLists.txt index 30893d1422d..45d152153f2 100644 --- a/src/test/librados/CMakeLists.txt +++ b/src/test/librados/CMakeLists.txt @@ -142,6 +142,11 @@ add_executable(ceph_test_rados_api_snapshots_stats_pp target_link_libraries(ceph_test_rados_api_snapshots_stats_pp librados ${UNITTEST_LIBS} radostest-cxx) +add_executable(ceph_test_rados_api_split_op_pp + split_op_cxx.cc) +target_link_libraries(ceph_test_rados_api_split_op_pp + librados ${UNITTEST_LIBS} radostest-cxx) + install(TARGETS ceph_test_rados_api_aio ceph_test_rados_api_aio_pp @@ -166,6 +171,7 @@ install(TARGETS ceph_test_rados_api_stat_pp ceph_test_rados_api_watch_notify ceph_test_rados_api_watch_notify_pp + ceph_test_rados_api_split_op_pp DESTINATION ${CMAKE_INSTALL_BINDIR}) # unittest_librados diff --git a/src/test/librados/io_cxx.cc b/src/test/librados/io_cxx.cc index 727a3a44176..0c99b5f9c2b 100644 --- a/src/test/librados/io_cxx.cc +++ b/src/test/librados/io_cxx.cc @@ -1048,54 +1048,4 @@ TEST_P(LibRadosIoECPP, CmpExtMismatchPP) { ASSERT_EQ(0, memcmp(bl.c_str(), "ceph", 4)); } -TEST_P(LibRadosIoECPP, ReadWithVersion) { - SKIP_IF_CRIMSON(); - bufferlist bl; - bl.append("ceph"); - ObjectWriteOperation write1; - write1.write(0, bl); - ASSERT_EQ(0, ioctx.operate("foo", &write1)); - - bufferlist new_bl; - new_bl.append("CEPH"); - ObjectWriteOperation write2; - write2.cmpext(0, new_bl, nullptr); - write2.write_full(new_bl); - ASSERT_EQ(-MAX_ERRNO, ioctx.operate("foo", &write2)); - - ObjectReadOperation read; - read.read(0, bl.length(), NULL, NULL); - - bufferlist exec_inbl, exec_outbl; - int exec_rval; - read.exec("version", "read", exec_inbl, &exec_outbl, &exec_rval); - ASSERT_EQ(0, ioctx.operate("foo", &read, &bl)); - ASSERT_EQ(0, memcmp(bl.c_str(), "ceph", 4)); - ASSERT_EQ(0, exec_rval); - cls_version_read_ret exec_version; - auto iter = exec_outbl.cbegin(); - decode(exec_version, iter); - ASSERT_EQ(0, exec_version.objv.ver); - ASSERT_EQ("", exec_version.objv.tag); -} - -TEST_P(LibRadosIoECPP, ReadWithIllegalClsOp) { - SKIP_IF_CRIMSON(); - bufferlist bl; - bl.append("ceph"); - ObjectWriteOperation write1; - write1.write(0, bl); - ASSERT_EQ(0, ioctx.operate("foo", &write1)); - - bufferlist new_bl; - new_bl.append("CEPH"); - ObjectWriteOperation write2; - bufferlist exec_inbl, exec_outbl; - int exec_rval; - rados::cls::fifo::op::init_part op; - encode(op, exec_inbl); - write2.exec("fifo", "init_part", exec_inbl, &exec_outbl, &exec_rval); - ASSERT_EQ(-EOPNOTSUPP, ioctx.operate("foo", &write2)); -} - INSTANTIATE_TEST_SUITE_P_EC(LibRadosIoECPP); \ No newline at end of file diff --git a/src/test/librados/split_op_cxx.cc b/src/test/librados/split_op_cxx.cc new file mode 100644 index 00000000000..656941f97fe --- /dev/null +++ b/src/test/librados/split_op_cxx.cc @@ -0,0 +1,86 @@ +#include + +#include "test/librados/test_cxx.h" +#include "test/librados/testcase_cxx.h" +#include "crimson_utils.h" +#include "cls/fifo/cls_fifo_ops.h" +#include "cls/version/cls_version_ops.h" + +using namespace std; +using namespace librados; + +typedef RadosTestPP LibRadosSplitOpPP; +typedef RadosTestECPP LibRadosSplitOpECPP; + +TEST_P(LibRadosSplitOpECPP, ReadWithVersion) { + SKIP_IF_CRIMSON(); + bufferlist bl; + bl.append("ceph"); + ObjectWriteOperation write1; + write1.write(0, bl); + ASSERT_TRUE(AssertOperateWithSplitOp(0, "foo", &write1)); + + ObjectReadOperation read; + read.read(0, bl.length(), NULL, NULL); + + bufferlist exec_inbl, exec_outbl; + int exec_rval; + read.exec("version", "read", exec_inbl, &exec_outbl, &exec_rval); + ASSERT_TRUE(AssertOperateWithSplitOp(0, "foo", &read, &bl)); + ASSERT_EQ(0, memcmp(bl.c_str(), "ceph", 4)); + ASSERT_EQ(0, exec_rval); + cls_version_read_ret exec_version; + auto iter = exec_outbl.cbegin(); + decode(exec_version, iter); + ASSERT_EQ(0, exec_version.objv.ver); + ASSERT_EQ("", exec_version.objv.tag); +} + +TEST_P(LibRadosSplitOpECPP, ReadWithIllegalClsOp) { + SKIP_IF_CRIMSON(); + bufferlist bl; + bl.append("ceph"); + ObjectWriteOperation write1; + write1.write(0, bl); + ASSERT_TRUE(AssertOperateWithSplitOp(0, "foo", &write1)); + + bufferlist new_bl; + new_bl.append("CEPH"); + ObjectWriteOperation write2; + bufferlist exec_inbl, exec_outbl; + int exec_rval; + rados::cls::fifo::op::init_part op; + encode(op, exec_inbl); + write2.exec("fifo", "init_part", exec_inbl, &exec_outbl, &exec_rval); + ASSERT_TRUE(AssertOperateWithSplitOp(-EOPNOTSUPP, "foo", &write2)); +} + +TEST_P(LibRadosSplitOpECPP, XattrReads) { + SKIP_IF_CRIMSON(); + bufferlist bl, attr_bl, attr_read_bl; + std::string attr_key = "my_key"; + std::string attr_value = "my_attr"; + + bl.append("ceph"); + ObjectWriteOperation write1; + write1.write(0, bl); + encode(attr_value, attr_bl); + write1.setxattr(attr_key.c_str(), attr_bl); + ASSERT_TRUE(AssertOperateWithSplitOp(0, "foo", &write1)); + + ObjectReadOperation read; + read.read(0, bl.length(), NULL, NULL); + + int getxattr_rval, getxattrs_rval; + read.getxattr(attr_key.c_str(), &attr_read_bl, &getxattr_rval); + std::map pattrs{ {"_", {}}, {attr_key, {}}}; + read.getxattrs(&pattrs, &getxattrs_rval); + read.cmpxattr(attr_key.c_str(), CEPH_OSD_CMPXATTR_OP_EQ, attr_bl); + + ASSERT_TRUE(AssertOperateWithSplitOp(1, "foo", &read, &bl)); + ASSERT_EQ(0, memcmp(bl.c_str(), "ceph", 4)); + ASSERT_EQ(0, getxattr_rval); + ASSERT_EQ(0, getxattrs_rval); +} + +INSTANTIATE_TEST_SUITE_P_EC(LibRadosSplitOpECPP); -- 2.39.5