From: Jason Dillaman Date: Sat, 9 Apr 2016 17:30:56 +0000 (-0400) Subject: test: stub test cases for rbd-mirror image bootstrap X-Git-Tag: v10.2.1~14^2~12 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c790da5aef0cb6a5573d86d0a8298d850b63ef25;p=ceph.git test: stub test cases for rbd-mirror image bootstrap Signed-off-by: Jason Dillaman (cherry picked from commit d0f732877213ba9eec9d3158b839c5a4c796e7ab) --- diff --git a/src/test/Makefile-client.am b/src/test/Makefile-client.am index b5c5f0d755c9..66ab55f87f6e 100644 --- a/src/test/Makefile-client.am +++ b/src/test/Makefile-client.am @@ -375,7 +375,8 @@ librbd_test_la_CXXFLAGS = $(UNITTEST_CXXFLAGS) noinst_LTLIBRARIES += librbd_test.la librbd_test_mock_la_SOURCES = \ - test/librbd/mock/MockImageCtx.cc + test/librbd/mock/MockImageCtx.cc \ + test/librbd/mock/MockJournal.cc librbd_test_mock_la_CXXFLAGS = $(UNITTEST_CXXFLAGS) noinst_LTLIBRARIES += librbd_test_mock.la @@ -472,6 +473,7 @@ unittest_rbd_mirror_SOURCES = \ test/rbd_mirror/test_mock_fixture.cc \ test/rbd_mirror/test_mock_ImageReplayer.cc \ test/rbd_mirror/test_mock_ImageSync.cc \ + test/rbd_mirror/image_replayer/test_mock_BootstrapRequest.cc \ test/rbd_mirror/image_sync/test_mock_ImageCopyRequest.cc \ test/rbd_mirror/image_sync/test_mock_ObjectCopyRequest.cc \ test/rbd_mirror/image_sync/test_mock_SnapshotCopyRequest.cc \ diff --git a/src/test/librbd/mock/MockImageCtx.h b/src/test/librbd/mock/MockImageCtx.h index 170e9a141f00..034db1c9f60b 100644 --- a/src/test/librbd/mock/MockImageCtx.h +++ b/src/test/librbd/mock/MockImageCtx.h @@ -63,6 +63,8 @@ struct MockImageCtx { size(image_ctx.size), features(image_ctx.features), flags(image_ctx.flags), + stripe_unit(image_ctx.stripe_unit), + stripe_count(image_ctx.stripe_count), object_prefix(image_ctx.object_prefix), header_oid(image_ctx.header_oid), id(image_ctx.id), @@ -199,6 +201,8 @@ struct MockImageCtx { uint64_t size; uint64_t features; uint64_t flags; + uint64_t stripe_unit; + uint64_t stripe_count; std::string object_prefix; std::string header_oid; std::string id; diff --git a/src/test/librbd/mock/MockImageState.h b/src/test/librbd/mock/MockImageState.h index 8f5f206fb622..8d2ad117f7a9 100644 --- a/src/test/librbd/mock/MockImageState.h +++ b/src/test/librbd/mock/MockImageState.h @@ -14,6 +14,8 @@ struct MockImageState { MOCK_CONST_METHOD0(is_refresh_required, bool()); MOCK_METHOD1(refresh, void(Context*)); + MOCK_METHOD1(open, void(Context*)); + MOCK_METHOD0(close, int()); MOCK_METHOD1(close, void(Context*)); }; diff --git a/src/test/librbd/mock/MockJournal.cc b/src/test/librbd/mock/MockJournal.cc new file mode 100644 index 000000000000..a9e98869bb6f --- /dev/null +++ b/src/test/librbd/mock/MockJournal.cc @@ -0,0 +1,10 @@ +// -*- mode:C; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + +#include "test/librbd/mock/MockJournal.h" + +namespace librbd { + +MockJournal *MockJournal::s_instance = nullptr; + +} // namespace librbd diff --git a/src/test/librbd/mock/MockJournal.h b/src/test/librbd/mock/MockJournal.h index a4637a4c6c5f..a80eead3dd3d 100644 --- a/src/test/librbd/mock/MockJournal.h +++ b/src/test/librbd/mock/MockJournal.h @@ -11,12 +11,28 @@ namespace librbd { struct MockJournal { + static MockJournal *s_instance; + static MockJournal *get_instance() { + assert(s_instance != nullptr); + return s_instance; + } + + template + static int is_tag_owner(ImageCtxT *image_ctx, bool *is_tag_owner) { + return get_instance()->is_tag_owner(is_tag_owner); + } + + MockJournal() { + s_instance = this; + } + MOCK_CONST_METHOD0(is_journal_ready, bool()); MOCK_CONST_METHOD0(is_journal_replaying, bool()); MOCK_METHOD1(wait_for_journal_ready, void(Context *)); MOCK_CONST_METHOD0(is_tag_owner, bool()); + MOCK_CONST_METHOD1(is_tag_owner, int(bool *)); MOCK_METHOD6(allocate_tag, void(const std::string &mirror_uuid, const std::string &predecessor_mirror_uuid, bool predecessor_commit_valid, @@ -27,6 +43,8 @@ struct MockJournal { MOCK_METHOD1(open, void(Context *)); MOCK_METHOD1(close, void(Context *)); + MOCK_CONST_METHOD0(get_tag_data, journal::TagData()); + MOCK_METHOD0(allocate_op_tid, uint64_t()); MOCK_METHOD3(append_op_event_mock, void(uint64_t, const journal::EventEntry&, diff --git a/src/test/rbd_mirror/image_replayer/test_mock_BootstrapRequest.cc b/src/test/rbd_mirror/image_replayer/test_mock_BootstrapRequest.cc new file mode 100644 index 000000000000..0cec3a26e319 --- /dev/null +++ b/src/test/rbd_mirror/image_replayer/test_mock_BootstrapRequest.cc @@ -0,0 +1,126 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + +#include "test/rbd_mirror/test_mock_fixture.h" +#include "librbd/journal/TypeTraits.h" +#include "tools/rbd_mirror/ImageSync.h" +#include "tools/rbd_mirror/image_replayer/BootstrapRequest.h" +#include "tools/rbd_mirror/image_replayer/CloseImageRequest.h" +#include "tools/rbd_mirror/image_replayer/OpenLocalImageRequest.h" +#include "test/journal/mock/MockJournaler.h" +#include "test/librbd/mock/MockImageCtx.h" + +namespace librbd { +namespace journal { + +template <> +struct TypeTraits { + typedef ::journal::MockJournaler Journaler; +}; + +} // namespace journal +} // namespace librbd + +namespace rbd { +namespace mirror { + +class ProgressContext; + +template<> +struct ImageSync { + static ImageSync* s_instance; + Context *on_finish = nullptr; + + static ImageSync* create(librbd::MockImageCtx *local_image_ctx, + librbd::MockImageCtx *remote_image_ctx, + SafeTimer *timer, Mutex *timer_lock, + const std::string &mirror_uuid, + ::journal::MockJournaler *journaler, + librbd::journal::MirrorPeerClientMeta *client_meta, + Context *on_finish, + ProgressContext *progress_ctx = nullptr) { + assert(s_instance != nullptr); + return s_instance; + } + + ImageSync() { + assert(s_instance == nullptr); + s_instance = this; + } + + MOCK_METHOD0(start, void()); +}; + +ImageSync* ImageSync::s_instance = nullptr; + +namespace image_replayer { + +template<> +struct CloseImageRequest { + static CloseImageRequest* s_instance; + Context *on_finish = nullptr; + + static CloseImageRequest* create(librbd::MockImageCtx **image_ctx, + ContextWQ *work_queue, bool destroy_only, + Context *on_finish) { + assert(s_instance != nullptr); + s_instance->on_finish = on_finish; + return s_instance; + } + + CloseImageRequest() { + assert(s_instance == nullptr); + s_instance = this; + } + + MOCK_METHOD0(send, void()); +}; + +template<> +struct OpenLocalImageRequest { + static OpenLocalImageRequest* s_instance; + Context *on_finish = nullptr; + + static OpenLocalImageRequest* create(librados::IoCtx &local_io_ctx, + librbd::MockImageCtx **local_image_ctx, + const std::string &local_image_name, + const std::string &local_image_id, + ContextWQ *work_queue, + Context *on_finish) { + assert(s_instance != nullptr); + s_instance->on_finish = on_finish; + return s_instance; + } + + OpenLocalImageRequest() { + assert(s_instance == nullptr); + s_instance = this; + } + + MOCK_METHOD0(send, void()); +}; + +CloseImageRequest* CloseImageRequest::s_instance = nullptr; +OpenLocalImageRequest* OpenLocalImageRequest::s_instance = nullptr; + +} // namespace image_replayer +} // namespace mirror +} // namespace rbd + +// template definitions +#include "tools/rbd_mirror/image_replayer/BootstrapRequest.cc" +template class rbd::mirror::image_replayer::BootstrapRequest; + +namespace rbd { +namespace mirror { +namespace image_replayer { + +class TestMockImageReplayerBootstrapRequest : public TestMockFixture { +public: + typedef BootstrapRequest MockBootstrapRequest; + +}; + +} // namespace image_replayer +} // namespace mirror +} // namespace rbd diff --git a/src/test/rbd_mirror/test_mock_ImageReplayer.cc b/src/test/rbd_mirror/test_mock_ImageReplayer.cc index a2785f11c554..4ec594f553b0 100644 --- a/src/test/rbd_mirror/test_mock_ImageReplayer.cc +++ b/src/test/rbd_mirror/test_mock_ImageReplayer.cc @@ -6,7 +6,6 @@ #include "tools/rbd_mirror/ImageReplayer.h" #include "tools/rbd_mirror/image_replayer/BootstrapRequest.h" #include "tools/rbd_mirror/image_replayer/CloseImageRequest.h" -#include "tools/rbd_mirror/image_replayer/OpenLocalImageRequest.h" #include "test/journal/mock/MockJournaler.h" #include "test/librbd/mock/MockImageCtx.h" #include "test/librbd/mock/MockJournal.h" @@ -101,30 +100,6 @@ struct CloseImageRequest { MOCK_METHOD0(send, void()); }; -template<> -struct OpenLocalImageRequest { - static OpenLocalImageRequest* s_instance; - Context *on_finish = nullptr; - - static OpenLocalImageRequest* create(librados::IoCtx &local_io_ctx, - librbd::MockImageReplayerImageCtx **local_image_ctx, - const std::string &local_image_name, - const std::string &local_image_id, - ContextWQ *work_queue, - Context *on_finish) { - assert(s_instance != nullptr); - s_instance->on_finish = on_finish; - return s_instance; - } - - OpenLocalImageRequest() { - assert(s_instance == nullptr); - s_instance = this; - } - - MOCK_METHOD0(send, void()); -}; - template<> struct ReplayStatusFormatter { static ReplayStatusFormatter* s_instance; @@ -145,7 +120,6 @@ struct ReplayStatusFormatter { BootstrapRequest* BootstrapRequest::s_instance = nullptr; CloseImageRequest* CloseImageRequest::s_instance = nullptr; -OpenLocalImageRequest* OpenLocalImageRequest::s_instance = nullptr; ReplayStatusFormatter* ReplayStatusFormatter::s_instance = nullptr; } // namespace image_replayer diff --git a/src/tools/rbd_mirror/ImageReplayer.cc b/src/tools/rbd_mirror/ImageReplayer.cc index 73ac410945d7..203b78c10f7b 100644 --- a/src/tools/rbd_mirror/ImageReplayer.cc +++ b/src/tools/rbd_mirror/ImageReplayer.cc @@ -22,7 +22,6 @@ #include "Threads.h" #include "tools/rbd_mirror/image_replayer/BootstrapRequest.h" #include "tools/rbd_mirror/image_replayer/CloseImageRequest.h" -#include "tools/rbd_mirror/image_replayer/OpenLocalImageRequest.h" #include "tools/rbd_mirror/image_replayer/ReplayStatusFormatter.h" #define dout_subsys ceph_subsys_rbd_mirror diff --git a/src/tools/rbd_mirror/image_replayer/BootstrapRequest.cc b/src/tools/rbd_mirror/image_replayer/BootstrapRequest.cc index 760992de95d6..6f7210e224a8 100644 --- a/src/tools/rbd_mirror/image_replayer/BootstrapRequest.cc +++ b/src/tools/rbd_mirror/image_replayer/BootstrapRequest.cc @@ -530,8 +530,8 @@ void BootstrapRequest::handle_get_remote_tags(int r) { local_image_ctx->journal->get_tag_data(); dout(20) << ": local tag data: " << tag_data << dendl; - if (!((tag_data.mirror_uuid == librbd::Journal::ORPHAN_MIRROR_UUID && - remote_tag_data.mirror_uuid == librbd::Journal::ORPHAN_MIRROR_UUID && + if (!((tag_data.mirror_uuid == librbd::Journal<>::ORPHAN_MIRROR_UUID && + remote_tag_data.mirror_uuid == librbd::Journal<>::ORPHAN_MIRROR_UUID && remote_tag_data.predecessor_mirror_uuid == m_local_mirror_uuid) || (tag_data.mirror_uuid == m_remote_mirror_uuid && m_client_meta->state == librbd::journal::MIRROR_PEER_STATE_REPLAYING))) {