From: Jason Dillaman Date: Tue, 25 Aug 2015 15:18:37 +0000 (-0400) Subject: tests: new tests for watch/notify snap protect/unprotect ops X-Git-Tag: v10.0.2~193^2~16 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cea6a23e67cb986dcf290406766ccdef417b8eaa;p=ceph.git tests: new tests for watch/notify snap protect/unprotect ops Signed-off-by: Jason Dillaman --- diff --git a/src/test/librbd/test_internal.cc b/src/test/librbd/test_internal.cc index e35e90ffb29..b0c3ce911b8 100644 --- a/src/test/librbd/test_internal.cc +++ b/src/test/librbd/test_internal.cc @@ -314,7 +314,7 @@ TEST_F(TestInternal, CancelAsyncResize) { size -= MIN(size, 1<<18); { RWLock::RLocker l(ictx->owner_lock); - ASSERT_EQ(0, librbd::async_resize(ictx, &ctx, size, prog_ctx)); + librbd::async_resize(ictx, &ctx, size, prog_ctx); } // try to interrupt the in-progress resize @@ -358,8 +358,7 @@ TEST_F(TestInternal, MultipleResize) { RWLock::RLocker l(ictx->owner_lock); contexts.push_back(new C_SaferCond()); - ASSERT_EQ(0, librbd::async_resize(ictx, contexts.back(), new_size, - prog_ctx)); + librbd::async_resize(ictx, contexts.back(), new_size, prog_ctx); } for (uint32_t i = 0; i < contexts.size(); ++i) { diff --git a/src/test/librbd/test_librbd.cc b/src/test/librbd/test_librbd.cc index 70d8391ee36..1d9f8e9c4f8 100644 --- a/src/test/librbd/test_librbd.cc +++ b/src/test/librbd/test_librbd.cc @@ -2772,6 +2772,91 @@ TEST_F(TestLibRBD, SnapRemoveViaLockOwner) ASSERT_TRUE(lock_owner); } +TEST_F(TestLibRBD, SnapProtectViaLockOwner) +{ + REQUIRE_FEATURE(RBD_FEATURE_LAYERING | RBD_FEATURE_EXCLUSIVE_LOCK); + + librados::IoCtx ioctx; + ASSERT_EQ(0, _rados.ioctx_create(m_pool_name.c_str(), ioctx)); + + librbd::RBD rbd; + std::string name = get_temp_image_name(); + uint64_t size = 2 << 20; + int order = 0; + ASSERT_EQ(0, create_image_pp(rbd, ioctx, name.c_str(), size, &order)); + + librbd::Image image1; + ASSERT_EQ(0, rbd.open(ioctx, image1, name.c_str(), NULL)); + + bufferlist bl; + ASSERT_EQ(0, image1.write(0, 0, bl)); + + bool lock_owner; + ASSERT_EQ(0, image1.is_exclusive_lock_owner(&lock_owner)); + ASSERT_TRUE(lock_owner); + ASSERT_EQ(0, image1.snap_create("snap1")); + + librbd::Image image2; + ASSERT_EQ(0, rbd.open(ioctx, image2, name.c_str(), NULL)); + + ASSERT_EQ(0, image2.is_exclusive_lock_owner(&lock_owner)); + ASSERT_FALSE(lock_owner); + + ASSERT_EQ(0, image2.snap_protect("snap1")); + bool is_protected; + ASSERT_EQ(0, image2.snap_is_protected("snap1", &is_protected)); + ASSERT_TRUE(is_protected); + ASSERT_EQ(0, image1.snap_is_protected("snap1", &is_protected)); + ASSERT_TRUE(is_protected); + + ASSERT_EQ(0, image1.is_exclusive_lock_owner(&lock_owner)); + ASSERT_TRUE(lock_owner); +} + +TEST_F(TestLibRBD, SnapUnprotectViaLockOwner) +{ + REQUIRE_FEATURE(RBD_FEATURE_LAYERING | RBD_FEATURE_EXCLUSIVE_LOCK); + + librados::IoCtx ioctx; + ASSERT_EQ(0, _rados.ioctx_create(m_pool_name.c_str(), ioctx)); + + librbd::RBD rbd; + std::string name = get_temp_image_name(); + uint64_t size = 2 << 20; + int order = 0; + ASSERT_EQ(0, create_image_pp(rbd, ioctx, name.c_str(), size, &order)); + + librbd::Image image1; + ASSERT_EQ(0, rbd.open(ioctx, image1, name.c_str(), NULL)); + + bufferlist bl; + ASSERT_EQ(0, image1.write(0, 0, bl)); + + bool lock_owner; + ASSERT_EQ(0, image1.is_exclusive_lock_owner(&lock_owner)); + ASSERT_TRUE(lock_owner); + ASSERT_EQ(0, image1.snap_create("snap1")); + ASSERT_EQ(0, image1.snap_protect("snap1")); + bool is_protected; + ASSERT_EQ(0, image1.snap_is_protected("snap1", &is_protected)); + ASSERT_TRUE(is_protected); + + librbd::Image image2; + ASSERT_EQ(0, rbd.open(ioctx, image2, name.c_str(), NULL)); + + ASSERT_EQ(0, image2.is_exclusive_lock_owner(&lock_owner)); + ASSERT_FALSE(lock_owner); + + ASSERT_EQ(0, image2.snap_unprotect("snap1")); + ASSERT_EQ(0, image2.snap_is_protected("snap1", &is_protected)); + ASSERT_FALSE(is_protected); + ASSERT_EQ(0, image1.snap_is_protected("snap1", &is_protected)); + ASSERT_FALSE(is_protected); + + ASSERT_EQ(0, image1.is_exclusive_lock_owner(&lock_owner)); + ASSERT_TRUE(lock_owner); +} + TEST_F(TestLibRBD, FlattenViaLockOwner) { REQUIRE_FEATURE(RBD_FEATURE_EXCLUSIVE_LOCK);