]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
test/cls: add cls_log.trim_by_marker test
authorCasey Bodley <cbodley@redhat.com>
Sun, 21 May 2017 01:16:38 +0000 (21:16 -0400)
committerCasey Bodley <cbodley@redhat.com>
Tue, 6 Aug 2019 20:38:16 +0000 (16:38 -0400)
Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/test/cls_log/test_cls_log.cc

index 300e658cf751333e204a9fe876fb60a5c6474210..868afcaf65d8f54ee7c7de8a14845742999b794d 100644 (file)
@@ -131,6 +131,14 @@ static int log_list(librados::IoCtx& ioctx, const std::string& oid,
                   entries, &marker, truncated);
 }
 
+static int log_list(librados::IoCtx& ioctx, const std::string& oid,
+                    list<cls_log_entry>& entries)
+{
+  utime_t from, to;
+  bool truncated{false};
+  return log_list(ioctx, oid, from, to, 0, entries, &truncated);
+}
+
 TEST_F(cls_log, test_log_add_same_time)
 {
   /* add chains */
@@ -261,7 +269,23 @@ TEST_F(cls_log, test_log_add_different_time)
   ASSERT_EQ(10, i);
 }
 
-TEST_F(cls_log, test_log_trim)
+int do_log_trim(librados::IoCtx& ioctx, const std::string& oid,
+                const std::string& from_marker, const std::string& to_marker)
+{
+  librados::ObjectWriteOperation op;
+  cls_log_trim(op, {}, {}, from_marker, to_marker);
+  return ioctx.operate(oid, &op);
+}
+
+int do_log_trim(librados::IoCtx& ioctx, const std::string& oid,
+                const utime_t& from_time, const utime_t& to_time)
+{
+  librados::ObjectWriteOperation op;
+  cls_log_trim(op, from_time, to_time, "", "");
+  return ioctx.operate(oid, &op);
+}
+
+TEST_F(cls_log, trim_by_time)
 {
   /* add chains */
   string oid = "obj";
@@ -285,9 +309,9 @@ TEST_F(cls_log, test_log_trim)
     utime_t trim_time = get_time(start_time, i, true);
 
     utime_t zero_time;
-    string start_marker, end_marker;
 
-    ASSERT_EQ(0, cls_log_trim(ioctx, oid, zero_time, trim_time, start_marker, end_marker));
+    ASSERT_EQ(0, do_log_trim(ioctx, oid, zero_time, trim_time));
+    ASSERT_EQ(-ENODATA, do_log_trim(ioctx, oid, zero_time, trim_time));
 
     ASSERT_EQ(0, log_list(ioctx, oid, start_time, to_time, 0,
                           entries, &truncated));
@@ -295,3 +319,65 @@ TEST_F(cls_log, test_log_trim)
     ASSERT_FALSE(truncated);
   }
 }
+
+TEST_F(cls_log, trim_by_marker)
+{
+  string oid = "obj";
+  ASSERT_EQ(0, ioctx.create(oid, true));
+
+  utime_t start_time = ceph_clock_now();
+  generate_log(ioctx, oid, 10, start_time, true);
+
+  utime_t zero_time;
+  std::vector<cls_log_entry> log1;
+  {
+    list<cls_log_entry> entries;
+    ASSERT_EQ(0, log_list(ioctx, oid, entries));
+    ASSERT_EQ(10u, entries.size());
+
+    log1.assign(std::make_move_iterator(entries.begin()),
+                std::make_move_iterator(entries.end()));
+  }
+  // trim front of log
+  {
+    const std::string from = "";
+    const std::string to = log1[0].id;
+    ASSERT_EQ(0, do_log_trim(ioctx, oid, from, to));
+    list<cls_log_entry> entries;
+    ASSERT_EQ(0, log_list(ioctx, oid, entries));
+    ASSERT_EQ(9u, entries.size());
+    EXPECT_EQ(log1[1].id, entries.begin()->id);
+    ASSERT_EQ(-ENODATA, do_log_trim(ioctx, oid, from, to));
+  }
+  // trim back of log
+  {
+    const std::string from = log1[8].id;
+    const std::string to = "9";
+    ASSERT_EQ(0, do_log_trim(ioctx, oid, from, to));
+    list<cls_log_entry> entries;
+    ASSERT_EQ(0, log_list(ioctx, oid, entries));
+    ASSERT_EQ(8u, entries.size());
+    EXPECT_EQ(log1[8].id, entries.rbegin()->id);
+    ASSERT_EQ(-ENODATA, do_log_trim(ioctx, oid, from, to));
+  }
+  // trim a key from the middle
+  {
+    const std::string from = log1[3].id;
+    const std::string to = log1[4].id;
+    ASSERT_EQ(0, do_log_trim(ioctx, oid, from, to));
+    list<cls_log_entry> entries;
+    ASSERT_EQ(0, log_list(ioctx, oid, entries));
+    ASSERT_EQ(7u, entries.size());
+    ASSERT_EQ(-ENODATA, do_log_trim(ioctx, oid, from, to));
+  }
+  // trim full log
+  {
+    const std::string from = "";
+    const std::string to = "9";
+    ASSERT_EQ(0, do_log_trim(ioctx, oid, from, to));
+    list<cls_log_entry> entries;
+    ASSERT_EQ(0, log_list(ioctx, oid, entries));
+    ASSERT_EQ(0u, entries.size());
+    ASSERT_EQ(-ENODATA, do_log_trim(ioctx, oid, from, to));
+  }
+}