ASSERT_EQ(-EINVAL, ctx.wait());
}
-TEST_F(TestMockImageReplayerPrepareLocalImageRequest, DirGetNameError) {
+TEST_F(TestMockImageReplayerPrepareLocalImageRequest, DirGetNameDNE) {
InSequence seq;
MockGetMirrorImageIdRequest mock_get_mirror_image_id_request;
expect_get_mirror_image_id(mock_get_mirror_image_id_request, "local image id",
0);
expect_dir_get_name(m_local_io_ctx, "", -ENOENT);
+ MockGetMirrorInfoRequest mock_get_mirror_info_request;
+ expect_get_mirror_info(mock_get_mirror_info_request,
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_ENABLED},
+ librbd::mirror::PROMOTION_STATE_NON_PRIMARY,
+ "remote mirror uuid", 0);
+
+ MockJournalStateBuilder mock_journal_state_builder;
+ MockStateBuilder* mock_state_builder = nullptr;
+ std::string local_image_name;
+ C_SaferCond ctx;
+ auto req = MockPrepareLocalImageRequest::create(m_local_io_ctx,
+ "global image id",
+ &local_image_name,
+ &mock_state_builder,
+ m_threads->work_queue,
+ &ctx);
+ req->send();
+
+ ASSERT_EQ(0, ctx.wait());
+}
+
+TEST_F(TestMockImageReplayerPrepareLocalImageRequest, DirGetNameError) {
+ InSequence seq;
+ MockGetMirrorImageIdRequest mock_get_mirror_image_id_request;
+ expect_get_mirror_image_id(mock_get_mirror_image_id_request, "local image id",
+ 0);
+ expect_dir_get_name(m_local_io_ctx, "", -EPERM);
+
MockStateBuilder* mock_state_builder = nullptr;
std::string local_image_name;
C_SaferCond ctx;
&ctx);
req->send();
- ASSERT_EQ(-ENOENT, ctx.wait());
+ ASSERT_EQ(-EPERM, ctx.wait());
}
TEST_F(TestMockImageReplayerPrepareLocalImageRequest, MirrorImageInfoError) {
r = librbd::cls_client::dir_get_name_finish(&it, m_local_image_name);
}
- if (r < 0) {
- if (r != -ENOENT) {
- derr << "failed to retrieve image name: " << cpp_strerror(r) << dendl;
- }
+ if (r == -ENOENT) {
+ // proceed we should have a mirror image record if we got this far
+ dout(10) << "image does not exist for local image id " << m_local_image_id
+ << dendl;
+ *m_local_image_name = "";
+ } else if (r < 0) {
+ derr << "failed to retrieve image name: " << cpp_strerror(r) << dendl;
finish(r);
return;
}