From: Casey Bodley Date: Tue, 23 May 2023 17:53:32 +0000 (-0400) Subject: test/librados: test ability to set mtimes with aio_operate X-Git-Tag: v17.2.7~278^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=855697da5a7c22434f54964268eeb1115eddcdda;p=ceph.git test/librados: test ability to set mtimes with aio_operate Signed-off-by: Casey Bodley (cherry picked from commit ec2923453766ddfee2b3dd330610179022b7d3cb) Conflicts: src/test/librados/aio.cc: removed test case for rados_aio_write_op_operate2() which wasn't backported test case for rados_aio_write_op_operate() uses rados_stat() instead of rados_stat2() which doesn't exist on quincy --- diff --git a/src/test/librados/aio.cc b/src/test/librados/aio.cc index 0f924a6e38d9..c57e1e23031d 100644 --- a/src/test/librados/aio.cc +++ b/src/test/librados/aio.cc @@ -775,6 +775,36 @@ TEST(LibRadosAio, SimpleStat) { rados_aio_release(my_completion2); } +TEST(LibRadosAio, OperateMtime) +{ + AioTestData test_data; + ASSERT_EQ("", test_data.init()); + + time_t set_mtime = 1457129052; + { + rados_write_op_t op = rados_create_write_op(); + rados_write_op_create(op, LIBRADOS_CREATE_IDEMPOTENT, nullptr); + rados_completion_t completion; + ASSERT_EQ(0, rados_aio_create_completion2(nullptr, nullptr, &completion)); + ASSERT_EQ(0, rados_aio_write_op_operate(op, test_data.m_ioctx, completion, + "foo", &set_mtime, 0)); + { + TestAlarm alarm; + ASSERT_EQ(0, rados_aio_wait_for_complete(completion)); + } + ASSERT_EQ(0, rados_aio_get_return_value(completion)); + rados_aio_release(completion); + rados_release_write_op(op); + } + { + uint64_t size; + time_t mtime; + ASSERT_EQ(0, rados_stat(test_data.m_ioctx, "foo", &size, &mtime)); + EXPECT_EQ(0, size); + EXPECT_EQ(set_mtime, mtime); + } +} + TEST(LibRadosAio, SimpleStatNS) { AioTestData test_data; rados_completion_t my_completion; diff --git a/src/test/librados/aio_cxx.cc b/src/test/librados/aio_cxx.cc index 71c0a4edb0db..06dd85de7473 100644 --- a/src/test/librados/aio_cxx.cc +++ b/src/test/librados/aio_cxx.cc @@ -929,6 +929,62 @@ TEST(LibRadosAio, SimpleStatPP) { ASSERT_EQ(sizeof(buf), psize); } +TEST(LibRadosAio, OperateMtime) +{ + AioTestDataPP test_data; + ASSERT_EQ("", test_data.init()); + + time_t set_mtime = 1457129052; + { + auto c = std::unique_ptr{Rados::aio_create_completion()}; + librados::ObjectWriteOperation op; + op.mtime(&set_mtime); + op.create(false); + ASSERT_EQ(0, test_data.m_ioctx.aio_operate(test_data.m_oid, c.get(), &op)); + { + TestAlarm alarm; + ASSERT_EQ(0, c->wait_for_complete()); + } + ASSERT_EQ(0, c->get_return_value()); + } + { + uint64_t size; + timespec mtime; + ASSERT_EQ(0, test_data.m_ioctx.stat2(test_data.m_oid, &size, &mtime)); + EXPECT_EQ(0, size); + EXPECT_EQ(set_mtime, mtime.tv_sec); + EXPECT_EQ(0, mtime.tv_nsec); + } +} + +TEST(LibRadosAio, OperateMtime2) +{ + AioTestDataPP test_data; + ASSERT_EQ("", test_data.init()); + + timespec set_mtime{1457129052, 123456789}; + { + auto c = std::unique_ptr{Rados::aio_create_completion()}; + librados::ObjectWriteOperation op; + op.mtime2(&set_mtime); + op.create(false); + ASSERT_EQ(0, test_data.m_ioctx.aio_operate(test_data.m_oid, c.get(), &op)); + { + TestAlarm alarm; + ASSERT_EQ(0, c->wait_for_complete()); + } + ASSERT_EQ(0, c->get_return_value()); + } + { + uint64_t size; + timespec mtime; + ASSERT_EQ(0, test_data.m_ioctx.stat2(test_data.m_oid, &size, &mtime)); + EXPECT_EQ(0, size); + EXPECT_EQ(set_mtime.tv_sec, mtime.tv_sec); + EXPECT_EQ(set_mtime.tv_nsec, mtime.tv_nsec); + } +} + TEST(LibRadosAio, StatRemovePP) { AioTestDataPP test_data; ASSERT_EQ("", test_data.init());