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: v18.1.2~11^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F52116%2Fhead;p=ceph.git test/librados: test ability to set mtimes with aio_operate Signed-off-by: Casey Bodley (cherry picked from commit ec2923453766ddfee2b3dd330610179022b7d3cb) --- diff --git a/src/test/librados/aio.cc b/src/test/librados/aio.cc index 5a50bf9a2ced..68587fe87d16 100644 --- a/src/test/librados/aio.cc +++ b/src/test/librados/aio.cc @@ -776,6 +776,68 @@ 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; + timespec mtime; + ASSERT_EQ(0, rados_stat2(test_data.m_ioctx, "foo", &size, &mtime)); + EXPECT_EQ(0, size); + EXPECT_EQ(set_mtime, mtime.tv_sec); + EXPECT_EQ(0, mtime.tv_nsec); + } +} + +TEST(LibRadosAio, Operate2Mtime) +{ + AioTestData test_data; + ASSERT_EQ("", test_data.init()); + + timespec set_mtime{1457129052, 123456789}; + { + 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_operate2(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; + timespec mtime; + ASSERT_EQ(0, rados_stat2(test_data.m_ioctx, "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, 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 27ff76b1e5be..5647bd9c0f1d 100644 --- a/src/test/librados/aio_cxx.cc +++ b/src/test/librados/aio_cxx.cc @@ -931,6 +931,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());