.WillOnce(CompleteContext(r, mock_image_ctx.image_ctx->op_work_queue));
}
- void expect_create_ioctx(MockTestImageCtx &mock_image_ctx,
- librados::MockTestMemIoCtxImpl **io_ctx_impl) {
- *io_ctx_impl = &get_mock_io_ctx(mock_image_ctx.md_ctx);
- auto rados_client = (*io_ctx_impl)->get_mock_rados_client();
-
- EXPECT_CALL(*rados_client, create_ioctx(_, _))
- .WillOnce(DoAll(GetReference(*io_ctx_impl), Return(*io_ctx_impl)));
- }
-
- void expect_unlink_group_snapshot(MockTestImageCtx &mock_image_ctx,
- const std::string &group_id,
- const std::string &group_snap_id,
- const cls::rbd::ImageSnapshotSpec &image_snap,
- int r) {
- using ceph::encode;
- bufferlist bl;
- encode(group_snap_id, bl);
- encode(image_snap, bl);
-
- librados::MockTestMemIoCtxImpl *mock_io_ctx_impl;
- expect_create_ioctx(mock_image_ctx, &mock_io_ctx_impl);
-
- EXPECT_CALL(*mock_io_ctx_impl,
- exec(util::group_header_name(group_id), _, StrEq("rbd"),
- StrEq("group_snap_unlink"), ContentsEqual(bl), _, _, _))
- .WillOnce(Return(r));
- }
-
void expect_remove_snapshot(MockTestImageCtx &mock_image_ctx,
uint64_t snap_id, int r) {
EXPECT_CALL(*mock_image_ctx.operations, snap_remove(_, _, _))
ASSERT_EQ(0, ctx.wait());
}
-TEST_F(TestMockMirrorSnapshotUnlinkPeerRequest, UnlinkGroupSnapshot) {
- REQUIRE_FORMAT_V2();
-
- librbd::ImageCtx *ictx;
- ASSERT_EQ(0, open_image(m_image_name, &ictx));
-
- MockTestImageCtx mock_image_ctx(*ictx);
- cls::rbd::MirrorSnapshotNamespace ns{
- cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY, {"peer_uuid"},
- "", CEPH_NOSNAP};
- ns.group_spec = {"group_id", mock_image_ctx.md_ctx.get_id()};
- ns.group_snap_id = "group_snap_id";
- auto snap_id = snap_create(mock_image_ctx, ns, "mirror_snap");
- ns.mirror_peer_uuids = {"peer_uuid"};
- snap_create(mock_image_ctx, ns, "mirror_snap2");
-
- expect_get_snap_info(mock_image_ctx, snap_id);
-
- InSequence seq;
-
- expect_is_refresh_required(mock_image_ctx, true);
- expect_refresh_image(mock_image_ctx, 0);
- expect_unlink_group_snapshot(mock_image_ctx, "group_id", "group_snap_id",
- {ictx->md_ctx.get_id(), ictx->id, snap_id}, 0);
- expect_remove_snapshot(mock_image_ctx, snap_id, 0);
-
- C_SaferCond ctx;
- auto req = new MockUnlinkPeerRequest(&mock_image_ctx, snap_id, "peer_uuid",
- true, &ctx);
- req->send();
- ASSERT_EQ(0, ctx.wait());
-}
-
TEST_F(TestMockMirrorSnapshotUnlinkPeerRequest, SnapshotRemoveEmptyPeers) {
REQUIRE_FORMAT_V2();
const char *gp_name = "gp_snapgetinfo";
ASSERT_EQ(0, rbd_group_create(ioctx2, gp_name));
- ASSERT_EQ(0, rbd_group_image_add(ioctx2, gp_name, ioctx,
- m_image_name.c_str(), 0));
-
const char *gp_snap_name = "snap_snapshot";
ASSERT_EQ(0, rbd_group_snap_create(ioctx2, gp_name, gp_snap_name));
const char *gp_name = "gp_snapgetinfoPP";
ASSERT_EQ(0, m_rbd.group_create(ioctx2, gp_name));
- ASSERT_EQ(0, m_rbd.group_image_add(ioctx2, gp_name, m_ioctx,
- m_image_name.c_str(), 0));
-
const char *gp_snap_name = "snap_snapshot";
ASSERT_EQ(0, m_rbd.group_snap_create(ioctx2, gp_name, gp_snap_name));
ASSERT_EQ(0, m_rbd.mirror_peer_site_add(m_ioctx, &peer_uuid,
RBD_MIRROR_PEER_DIRECTION_RX_TX,
"cluster", "client"));
- const char *group_name = "snap_group";
+ const char *group_name = "snap_group1";
ASSERT_EQ(0, m_rbd.group_create(m_ioctx, group_name));
ASSERT_EQ(0, m_rbd.group_image_add(m_ioctx, group_name, m_ioctx,
m_image_name.c_str(), 0));