]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/test/librados/aio.cc
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / test / librados / aio.cc
index 8e9662bff52e079ff7e987413c547fe35a850a43..68587fe87d1693ffd241d196d69dff05c78e3cdf 100644 (file)
@@ -4,6 +4,7 @@
 #include <sstream>
 #include <utility>
 #include <boost/scoped_ptr.hpp>
+#include <fmt/format.h>
 
 #include "include/err.h"
 #include "include/rados/librados.h"
@@ -16,6 +17,7 @@
 #include "gtest/gtest.h"
 
 #include "test.h"
+#include "crimson_utils.h"
 
 using std::ostringstream;
 
@@ -40,7 +42,8 @@ public:
   std::string init()
   {
     int ret;
-    m_pool_name = get_temp_pool_name();
+    auto pool_prefix = fmt::format("{}_", ::testing::UnitTest::GetInstance()->current_test_info()->name());
+    m_pool_name = get_temp_pool_name(pool_prefix);
     std::string err = create_one_pool(m_pool_name, &m_cluster);
     if (!err.empty()) {
       ostringstream oss;
@@ -773,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;
@@ -1006,7 +1071,8 @@ public:
   std::string init()
   {
     int ret;
-    m_pool_name = get_temp_pool_name();
+    auto pool_prefix = fmt::format("{}_", ::testing::UnitTest::GetInstance()->current_test_info()->name());
+    m_pool_name = get_temp_pool_name(pool_prefix);
     std::string err = create_one_ec_pool(m_pool_name, &m_cluster);
     if (!err.empty()) {
       ostringstream oss;
@@ -1031,6 +1097,7 @@ public:
 };
 
 TEST(LibRadosAioEC, SimpleWrite) {
+  SKIP_IF_CRIMSON();
   AioTestDataEC test_data;
   rados_completion_t my_completion;
   ASSERT_EQ("", test_data.init());
@@ -1062,6 +1129,7 @@ TEST(LibRadosAioEC, SimpleWrite) {
 }
 
 TEST(LibRadosAioEC, WaitForComplete) {
+  SKIP_IF_CRIMSON();
   AioTestDataEC test_data;
   rados_completion_t my_completion;
   ASSERT_EQ("", test_data.init());
@@ -1078,6 +1146,7 @@ TEST(LibRadosAioEC, WaitForComplete) {
 }
 
 TEST(LibRadosAioEC, RoundTrip) {
+  SKIP_IF_CRIMSON();
   AioTestDataEC test_data;
   rados_completion_t my_completion;
   ASSERT_EQ("", test_data.init());
@@ -1110,6 +1179,7 @@ TEST(LibRadosAioEC, RoundTrip) {
 }
 
 TEST(LibRadosAioEC, RoundTrip2) {
+  SKIP_IF_CRIMSON();
   AioTestDataEC test_data;
   rados_completion_t my_completion;
   ASSERT_EQ("", test_data.init());
@@ -1142,14 +1212,15 @@ TEST(LibRadosAioEC, RoundTrip2) {
 }
 
 TEST(LibRadosAioEC, RoundTripAppend) {
+  SKIP_IF_CRIMSON();
   AioTestDataEC test_data;
   rados_completion_t my_completion, my_completion2, my_completion3, my_completion4;
   ASSERT_EQ("", test_data.init());
   ASSERT_EQ(0, rados_aio_create_completion2(nullptr,
              nullptr, &my_completion));
-  int requires;
-  ASSERT_EQ(0, rados_ioctx_pool_requires_alignment2(test_data.m_ioctx, &requires));
-  ASSERT_NE(0, requires);
+  int req;
+  ASSERT_EQ(0, rados_ioctx_pool_requires_alignment2(test_data.m_ioctx, &req));
+  ASSERT_NE(0, req);
   uint64_t alignment;
   ASSERT_EQ(0, rados_ioctx_pool_required_alignment2(test_data.m_ioctx, &alignment));
   ASSERT_NE(0U, alignment);
@@ -1212,6 +1283,7 @@ TEST(LibRadosAioEC, RoundTripAppend) {
 }
 
 TEST(LibRadosAioEC, IsComplete) {
+  SKIP_IF_CRIMSON();
   AioTestDataEC test_data;
   rados_completion_t my_completion;
   ASSERT_EQ("", test_data.init());
@@ -1251,6 +1323,7 @@ TEST(LibRadosAioEC, IsComplete) {
 }
 
 TEST(LibRadosAioEC, IsSafe) {
+  SKIP_IF_CRIMSON();
   AioTestDataEC test_data;
   rados_completion_t my_completion;
   ASSERT_EQ("", test_data.init());
@@ -1290,6 +1363,7 @@ TEST(LibRadosAioEC, IsSafe) {
 }
 
 TEST(LibRadosAioEC, ReturnValue) {
+  SKIP_IF_CRIMSON();
   AioTestDataEC test_data;
   rados_completion_t my_completion;
   ASSERT_EQ("", test_data.init());
@@ -1308,6 +1382,7 @@ TEST(LibRadosAioEC, ReturnValue) {
 }
 
 TEST(LibRadosAioEC, Flush) {
+  SKIP_IF_CRIMSON();
   AioTestDataEC test_data;
   rados_completion_t my_completion;
   ASSERT_EQ("", test_data.init());
@@ -1337,6 +1412,7 @@ TEST(LibRadosAioEC, Flush) {
 }
 
 TEST(LibRadosAioEC, FlushAsync) {
+  SKIP_IF_CRIMSON();
   AioTestDataEC test_data;
   rados_completion_t my_completion;
   ASSERT_EQ("", test_data.init());
@@ -1375,6 +1451,7 @@ TEST(LibRadosAioEC, FlushAsync) {
 }
 
 TEST(LibRadosAioEC, RoundTripWriteFull) {
+  SKIP_IF_CRIMSON();
   AioTestDataEC test_data;
   rados_completion_t my_completion, my_completion2, my_completion3;
   ASSERT_EQ("", test_data.init());
@@ -1418,6 +1495,7 @@ TEST(LibRadosAioEC, RoundTripWriteFull) {
 }
 
 TEST(LibRadosAioEC, SimpleStat) {
+  SKIP_IF_CRIMSON();
   AioTestDataEC test_data;
   rados_completion_t my_completion;
   ASSERT_EQ("", test_data.init());
@@ -1451,6 +1529,7 @@ TEST(LibRadosAioEC, SimpleStat) {
 
 
 TEST(LibRadosAioEC, SimpleStatNS) {
+  SKIP_IF_CRIMSON();
   AioTestDataEC test_data;
   rados_completion_t my_completion;
   ASSERT_EQ("", test_data.init());
@@ -1511,6 +1590,7 @@ TEST(LibRadosAioEC, SimpleStatNS) {
 }
 
 TEST(LibRadosAioEC, StatRemove) {
+  SKIP_IF_CRIMSON();
   AioTestDataEC test_data;
   rados_completion_t my_completion;
   ASSERT_EQ("", test_data.init());
@@ -1566,6 +1646,7 @@ TEST(LibRadosAioEC, StatRemove) {
 }
 
 TEST(LibRadosAioEC, ExecuteClass) {
+  SKIP_IF_CRIMSON();
   AioTestDataEC test_data;
   rados_completion_t my_completion;
   ASSERT_EQ("", test_data.init());
@@ -1597,6 +1678,7 @@ TEST(LibRadosAioEC, ExecuteClass) {
 }
 
 TEST(LibRadosAioEC, MultiWrite) {
+  SKIP_IF_CRIMSON();
   AioTestDataEC test_data;
   rados_completion_t my_completion, my_completion2, my_completion3;
   ASSERT_EQ("", test_data.init());