From cece372e34c7b42fb885324cd90e01b676d53938 Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Sat, 20 May 2017 21:16:38 -0400 Subject: [PATCH] test/cls: add cls_log.trim_by_marker test Signed-off-by: Casey Bodley --- src/test/cls_log/test_cls_log.cc | 92 ++++++++++++++++++++++++++++++-- 1 file changed, 89 insertions(+), 3 deletions(-) diff --git a/src/test/cls_log/test_cls_log.cc b/src/test/cls_log/test_cls_log.cc index 300e658cf7513..868afcaf65d8f 100644 --- a/src/test/cls_log/test_cls_log.cc +++ b/src/test/cls_log/test_cls_log.cc @@ -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& 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 log1; + { + list 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 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 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 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 entries; + ASSERT_EQ(0, log_list(ioctx, oid, entries)); + ASSERT_EQ(0u, entries.size()); + ASSERT_EQ(-ENODATA, do_log_trim(ioctx, oid, from, to)); + } +} -- 2.39.5