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: v16.2.14~70^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5a92d5cdae4e917dfbeb9b5b48b0060ff33f09f5;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 pacific no test_data.m_oid, used "foo" for oids --- diff --git a/src/test/librados/aio.cc b/src/test/librados/aio.cc index 2ffff1c342db..40c8dc0a2e32 100644 --- a/src/test/librados/aio.cc +++ b/src/test/librados/aio.cc @@ -773,6 +773,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 5df248869f54..4f6784518e84 100644 --- a/src/test/librados/aio_cxx.cc +++ b/src/test/librados/aio_cxx.cc @@ -921,6 +921,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("foo", 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("foo", &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("foo", 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("foo", &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());