]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/test/librbd/image/test_mock_PreRemoveRequest.cc
import ceph 14.2.5
[ceph.git] / ceph / src / test / librbd / image / test_mock_PreRemoveRequest.cc
index 131b1d801273ac9f58f01c394b8e94c69344290f..65a20db9dbee0962373c1d3f11d96eec6cb01786 100644 (file)
@@ -203,9 +203,9 @@ public:
 };
 
 TEST_F(TestMockImagePreRemoveRequest, Success) {
-  MockExclusiveLock *mock_exclusive_lock = new MockExclusiveLock();
+  MockExclusiveLock mock_exclusive_lock;
   if (m_test_imctx->test_features(RBD_FEATURE_EXCLUSIVE_LOCK)) {
-    m_mock_imctx->exclusive_lock = mock_exclusive_lock;
+    m_mock_imctx->exclusive_lock = &mock_exclusive_lock;
   }
 
   expect_op_work_queue(*m_mock_imctx);
@@ -213,7 +213,8 @@ TEST_F(TestMockImagePreRemoveRequest, Success) {
 
   InSequence seq;
   expect_set_journal_policy(*m_mock_imctx);
-  expect_shut_down_exclusive_lock(*m_mock_imctx, *mock_exclusive_lock, 0);
+  expect_try_acquire_exclusive_lock(*m_mock_imctx, mock_exclusive_lock, 0);
+  expect_is_exclusive_lock_owner(*m_mock_imctx, mock_exclusive_lock, true);
 
   MockListWatchersRequest mock_list_watchers_request;
   expect_list_image_watchers(*m_mock_imctx, mock_list_watchers_request, 0);
@@ -221,7 +222,7 @@ TEST_F(TestMockImagePreRemoveRequest, Success) {
   expect_get_group(*m_mock_imctx, 0);
 
   C_SaferCond ctx;
-  auto req = MockPreRemoveRequest::create(m_mock_imctx, true, &ctx);
+  auto req = MockPreRemoveRequest::create(m_mock_imctx, false, &ctx);
   req->send();
 
   ASSERT_EQ(0, ctx.wait());
@@ -239,43 +240,40 @@ TEST_F(TestMockImagePreRemoveRequest, OperationsDisabled) {
   ASSERT_EQ(-EROFS, ctx.wait());
 }
 
-TEST_F(TestMockImagePreRemoveRequest, ExclusiveLockShutDownFailed) {
+TEST_F(TestMockImagePreRemoveRequest, ExclusiveLockTryAcquireFailed) {
   REQUIRE_FEATURE(RBD_FEATURE_EXCLUSIVE_LOCK);
 
-  MockExclusiveLock *mock_exclusive_lock = new MockExclusiveLock();
-  if (m_test_imctx->test_features(RBD_FEATURE_EXCLUSIVE_LOCK)) {
-    m_mock_imctx->exclusive_lock = mock_exclusive_lock;
-  }
+  MockExclusiveLock mock_exclusive_lock;
+  m_mock_imctx->exclusive_lock = &mock_exclusive_lock;
 
   expect_op_work_queue(*m_mock_imctx);
   expect_test_features(*m_mock_imctx);
 
   InSequence seq;
   expect_set_journal_policy(*m_mock_imctx);
-  expect_shut_down_exclusive_lock(*m_mock_imctx, *mock_exclusive_lock, -EINVAL);
+  expect_try_acquire_exclusive_lock(*m_mock_imctx, mock_exclusive_lock,
+                                    -EINVAL);
 
   C_SaferCond ctx;
-  auto req = MockPreRemoveRequest::create(m_mock_imctx, true, &ctx);
+  auto req = MockPreRemoveRequest::create(m_mock_imctx, false, &ctx);
   req->send();
 
-  ASSERT_EQ(-EINVAL, ctx.wait());
+  ASSERT_EQ(-EBUSY, ctx.wait());
 }
 
-TEST_F(TestMockImagePreRemoveRequest, ExclusiveLockTryAcquireFailed) {
+TEST_F(TestMockImagePreRemoveRequest, ExclusiveLockTryAcquireNotLockOwner) {
   REQUIRE_FEATURE(RBD_FEATURE_EXCLUSIVE_LOCK);
 
   MockExclusiveLock mock_exclusive_lock;
-  if (m_test_imctx->test_features(RBD_FEATURE_EXCLUSIVE_LOCK)) {
-    m_mock_imctx->exclusive_lock = &mock_exclusive_lock;
-  }
+  m_mock_imctx->exclusive_lock = &mock_exclusive_lock;
 
   expect_op_work_queue(*m_mock_imctx);
   expect_test_features(*m_mock_imctx);
 
   InSequence seq;
   expect_set_journal_policy(*m_mock_imctx);
-  expect_try_acquire_exclusive_lock(*m_mock_imctx, mock_exclusive_lock,
-                                    -EINVAL);
+  expect_try_acquire_exclusive_lock(*m_mock_imctx, mock_exclusive_lock, 0);
+  expect_is_exclusive_lock_owner(*m_mock_imctx, mock_exclusive_lock, false);
 
   C_SaferCond ctx;
   auto req = MockPreRemoveRequest::create(m_mock_imctx, false, &ctx);
@@ -284,6 +282,54 @@ TEST_F(TestMockImagePreRemoveRequest, ExclusiveLockTryAcquireFailed) {
   ASSERT_EQ(-EBUSY, ctx.wait());
 }
 
+TEST_F(TestMockImagePreRemoveRequest, Force) {
+  REQUIRE_FEATURE(RBD_FEATURE_EXCLUSIVE_LOCK);
+
+  MockExclusiveLock *mock_exclusive_lock = new MockExclusiveLock();
+  m_mock_imctx->exclusive_lock = mock_exclusive_lock;
+
+  expect_op_work_queue(*m_mock_imctx);
+  expect_test_features(*m_mock_imctx);
+
+  InSequence seq;
+  expect_set_journal_policy(*m_mock_imctx);
+  expect_try_acquire_exclusive_lock(*m_mock_imctx, *mock_exclusive_lock,
+                                    -EINVAL);
+  expect_shut_down_exclusive_lock(*m_mock_imctx, *mock_exclusive_lock, 0);
+
+  MockListWatchersRequest mock_list_watchers_request;
+  expect_list_image_watchers(*m_mock_imctx, mock_list_watchers_request, 0);
+
+  expect_get_group(*m_mock_imctx, 0);
+
+  C_SaferCond ctx;
+  auto req = MockPreRemoveRequest::create(m_mock_imctx, true, &ctx);
+  req->send();
+
+  ASSERT_EQ(0, ctx.wait());
+}
+
+TEST_F(TestMockImagePreRemoveRequest, ExclusiveLockShutDownFailed) {
+  REQUIRE_FEATURE(RBD_FEATURE_EXCLUSIVE_LOCK);
+
+  MockExclusiveLock *mock_exclusive_lock = new MockExclusiveLock();
+  m_mock_imctx->exclusive_lock = mock_exclusive_lock;
+
+  expect_op_work_queue(*m_mock_imctx);
+  expect_test_features(*m_mock_imctx);
+
+  InSequence seq;
+  expect_set_journal_policy(*m_mock_imctx);
+  expect_try_acquire_exclusive_lock(*m_mock_imctx, *mock_exclusive_lock, -EINVAL);
+  expect_shut_down_exclusive_lock(*m_mock_imctx, *mock_exclusive_lock, -EINVAL);
+
+  C_SaferCond ctx;
+  auto req = MockPreRemoveRequest::create(m_mock_imctx, true, &ctx);
+  req->send();
+
+  ASSERT_EQ(-EINVAL, ctx.wait());
+}
+
 TEST_F(TestMockImagePreRemoveRequest, Migration) {
   m_mock_imctx->features |= RBD_FEATURE_MIGRATING;