From bca3a2fd37bbb8e44b61ca6922f2ff324b2f0afa Mon Sep 17 00:00:00 2001 From: Ilya Dryomov Date: Tue, 11 Jun 2024 19:02:23 +0200 Subject: [PATCH] test/librbd: cover empty and invalid snap id ranges for diff-iterate Signed-off-by: Ilya Dryomov (cherry picked from commit 4f8aca21960088e80c4917ac2bb8df49ea16c28a) --- src/test/librbd/test_librbd.cc | 80 +++++++++++++++++++++++++++++++--- 1 file changed, 74 insertions(+), 6 deletions(-) diff --git a/src/test/librbd/test_librbd.cc b/src/test/librbd/test_librbd.cc index 8d138cdec3432..6bf36e4de891f 100644 --- a/src/test/librbd/test_librbd.cc +++ b/src/test/librbd/test_librbd.cc @@ -6087,6 +6087,10 @@ TYPED_TEST(DiffIterateTest, DiffIterateDeterministic) vector_iterate_cb, &extents)); ASSERT_EQ(0u, extents.size()); + ASSERT_EQ(-ENOENT, rbd_diff_iterate2(image, "snap1", 0, size, true, + this->whole_object, vector_iterate_cb, + &extents)); + ASSERT_EQ(0, rbd_snap_create(image, "snap1")); std::string buf(256, '1'); @@ -6163,31 +6167,61 @@ TYPED_TEST(DiffIterateTest, DiffIterateDeterministic) ASSERT_EQ(diff_extent(1 << order, 256, true, object_size), extents[0]); extents.clear(); + // 8. snap3 -> snap3 + ASSERT_EQ(0, rbd_diff_iterate2(image, "snap3", 0, size, true, this->whole_object, + vector_iterate_cb, &extents)); + ASSERT_EQ(0u, extents.size()); + ASSERT_PASSED(this->validate_object_map, image); ASSERT_EQ(0, rbd_snap_set(image, "snap2")); - // 8. beginning of time -> snap2 + // 9. beginning of time -> snap2 ASSERT_EQ(0, rbd_diff_iterate2(image, NULL, 0, size, true, this->whole_object, vector_iterate_cb, &extents)); ASSERT_EQ(1u, extents.size()); ASSERT_EQ(diff_extent(0, 256, true, object_size), extents[0]); extents.clear(); - // 9. snap1 -> snap2 + // 10. snap1 -> snap2 ASSERT_EQ(0, rbd_diff_iterate2(image, "snap1", 0, size, true, this->whole_object, vector_iterate_cb, &extents)); ASSERT_EQ(1u, extents.size()); ASSERT_EQ(diff_extent(0, 256, true, object_size), extents[0]); extents.clear(); + // 11. snap2 -> snap2 + ASSERT_EQ(0, rbd_diff_iterate2(image, "snap2", 0, size, true, this->whole_object, + vector_iterate_cb, &extents)); + ASSERT_EQ(0u, extents.size()); + + // 12. snap3 -> snap2 + ASSERT_EQ(-EINVAL, rbd_diff_iterate2(image, "snap3", 0, size, true, + this->whole_object, vector_iterate_cb, + &extents)); + ASSERT_PASSED(this->validate_object_map, image); ASSERT_EQ(0, rbd_snap_set(image, "snap1")); - // 10. beginning of time -> snap1 + // 13. beginning of time -> snap1 ASSERT_EQ(0, rbd_diff_iterate2(image, NULL, 0, size, true, this->whole_object, vector_iterate_cb, &extents)); ASSERT_EQ(0u, extents.size()); + // 14. snap1 -> snap1 + ASSERT_EQ(0, rbd_diff_iterate2(image, "snap1", 0, size, true, this->whole_object, + vector_iterate_cb, &extents)); + ASSERT_EQ(0u, extents.size()); + + // 15. snap2 -> snap1 + ASSERT_EQ(-EINVAL, rbd_diff_iterate2(image, "snap2", 0, size, true, + this->whole_object, vector_iterate_cb, + &extents)); + + // 16. snap3 -> snap1 + ASSERT_EQ(-EINVAL, rbd_diff_iterate2(image, "snap3", 0, size, true, + this->whole_object, vector_iterate_cb, + &extents)); + ASSERT_PASSED(this->validate_object_map, image); ASSERT_EQ(0, rbd_close(image)); @@ -6220,6 +6254,10 @@ TYPED_TEST(DiffIterateTest, DiffIterateDeterministicPP) vector_iterate_cb, &extents)); ASSERT_EQ(0u, extents.size()); + ASSERT_EQ(-ENOENT, image.diff_iterate2("snap1", 0, size, true, + this->whole_object, vector_iterate_cb, + &extents)); + ASSERT_EQ(0, image.snap_create("snap1")); ceph::bufferlist bl; @@ -6297,31 +6335,61 @@ TYPED_TEST(DiffIterateTest, DiffIterateDeterministicPP) ASSERT_EQ(diff_extent(1 << order, 256, true, object_size), extents[0]); extents.clear(); + // 8. snap3 -> snap3 + ASSERT_EQ(0, image.diff_iterate2("snap3", 0, size, true, this->whole_object, + vector_iterate_cb, &extents)); + ASSERT_EQ(0u, extents.size()); + ASSERT_PASSED(this->validate_object_map, image); ASSERT_EQ(0, image.snap_set("snap2")); - // 8. beginning of time -> snap2 + // 9. beginning of time -> snap2 ASSERT_EQ(0, image.diff_iterate2(NULL, 0, size, true, this->whole_object, vector_iterate_cb, &extents)); ASSERT_EQ(1u, extents.size()); ASSERT_EQ(diff_extent(0, 256, true, object_size), extents[0]); extents.clear(); - // 9. snap1 -> snap2 + // 10. snap1 -> snap2 ASSERT_EQ(0, image.diff_iterate2("snap1", 0, size, true, this->whole_object, vector_iterate_cb, &extents)); ASSERT_EQ(1u, extents.size()); ASSERT_EQ(diff_extent(0, 256, true, object_size), extents[0]); extents.clear(); + // 11. snap2 -> snap2 + ASSERT_EQ(0, image.diff_iterate2("snap2", 0, size, true, this->whole_object, + vector_iterate_cb, &extents)); + ASSERT_EQ(0u, extents.size()); + + // 12. snap3 -> snap2 + ASSERT_EQ(-EINVAL, image.diff_iterate2("snap3", 0, size, true, + this->whole_object, vector_iterate_cb, + &extents)); + ASSERT_PASSED(this->validate_object_map, image); ASSERT_EQ(0, image.snap_set("snap1")); - // 10. beginning of time -> snap1 + // 13. beginning of time -> snap1 ASSERT_EQ(0, image.diff_iterate2(NULL, 0, size, true, this->whole_object, vector_iterate_cb, &extents)); ASSERT_EQ(0u, extents.size()); + // 14. snap1 -> snap1 + ASSERT_EQ(0, image.diff_iterate2("snap1", 0, size, true, this->whole_object, + vector_iterate_cb, &extents)); + ASSERT_EQ(0u, extents.size()); + + // 15. snap2 -> snap1 + ASSERT_EQ(-EINVAL, image.diff_iterate2("snap2", 0, size, true, + this->whole_object, vector_iterate_cb, + &extents)); + + // 16. snap3 -> snap1 + ASSERT_EQ(-EINVAL, image.diff_iterate2("snap3", 0, size, true, + this->whole_object, vector_iterate_cb, + &extents)); + ASSERT_PASSED(this->validate_object_map, image); } -- 2.39.5