test/librados_test_stub/TestIoCtxImpl.h
noinst_LTLIBRARIES += librados_test_stub.la
+libjournal_test_mock_la_SOURCES = \
+ test/journal/mock/MockJournaler.cc
+libjournal_test_mock_la_CXXFLAGS = $(UNITTEST_CXXFLAGS)
+noinst_LTLIBRARIES += libjournal_test_mock.la
+
unittest_journal_SOURCES = \
test/journal/test_main.cc \
test/journal/test_Entry.cc \
test/librbd/operation/test_mock_SnapshotUnprotectRequest.cc
unittest_librbd_CXXFLAGS = $(UNITTEST_CXXFLAGS) -DTEST_LIBRBD_INTERNALS
unittest_librbd_LDADD = \
- librbd_test.la librbd_test_mock.la \
+ librbd_test.la libjournal_test_mock.la librbd_test_mock.la \
librbd_api.la librbd_internal.la $(LIBRBD_TYPES) \
libcls_rbd_client.la libcls_lock_client.la \
libjournal.la libcls_journal_client.la \
noinst_HEADERS += \
test/rbd_mirror/test_fixture.h \
- test/rbd_mirror/test_mock_fixture.h \
- test/rbd_mirror/mock/MockJournaler.h
+ test/rbd_mirror/test_mock_fixture.h
librbd_mirror_test_la_CXXFLAGS = $(UNITTEST_CXXFLAGS)
noinst_LTLIBRARIES += librbd_mirror_test.la
test/rbd_mirror/image_sync/test_mock_ObjectCopyRequest.cc \
test/rbd_mirror/image_sync/test_mock_SnapshotCopyRequest.cc \
test/rbd_mirror/image_sync/test_mock_SyncPointCreateRequest.cc \
- test/rbd_mirror/image_sync/test_mock_SyncPointPruneRequest.cc \
- test/rbd_mirror/mock/MockJournaler.cc
+ test/rbd_mirror/image_sync/test_mock_SyncPointPruneRequest.cc
unittest_rbd_mirror_CXXFLAGS = $(UNITTEST_CXXFLAGS)
unittest_rbd_mirror_LDADD = \
librbd_mirror_test.la \
+ libjournal_test_mock.la \
librbd_test_mock.la \
librados_test_stub.la \
librbd_mirror_internal.la \
--- /dev/null
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#include "MockJournaler.h"
+
+namespace journal {
+
+MockFuture *MockFuture::s_instance = nullptr;
+MockReplayEntry *MockReplayEntry::s_instance = nullptr;
+MockJournaler *MockJournaler::s_instance = nullptr;
+
+std::ostream &operator<<(std::ostream &os, const MockJournalerProxy &) {
+ return os;
+}
+
+} // namespace journal
--- /dev/null
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#ifndef TEST_RBD_MIRROR_MOCK_JOURNALER_H
+#define TEST_RBD_MIRROR_MOCK_JOURNALER_H
+
+#include <gmock/gmock.h>
+#include "include/int_types.h"
+#include "include/rados/librados.hpp"
+#include "cls/journal/cls_journal_types.h"
+#include "journal/Journaler.h"
+#include <iosfwd>
+#include <string>
+
+class Context;
+class ContextWQ;
+class Mutex;
+class SafeTimer;
+
+namespace journal {
+
+struct ReplayHandler;
+
+struct MockFuture {
+ static MockFuture *s_instance;
+ static MockFuture &get_instance() {
+ assert(s_instance != nullptr);
+ return *s_instance;
+ }
+
+ MockFuture() {
+ s_instance = this;
+ }
+
+ MOCK_CONST_METHOD0(is_valid, bool());
+ MOCK_METHOD1(flush, void(Context *));
+ MOCK_METHOD1(wait, void(Context *));
+};
+
+struct MockFutureProxy {
+ bool is_valid() const {
+ return MockFuture::get_instance().is_valid();
+ }
+
+ void flush(Context *on_safe) {
+ MockFuture::get_instance().flush(on_safe);
+ }
+
+ void wait(Context *on_safe) {
+ MockFuture::get_instance().wait(on_safe);
+ }
+};
+
+struct MockReplayEntry {
+ static MockReplayEntry *s_instance;
+ static MockReplayEntry &get_instance() {
+ assert(s_instance != nullptr);
+ return *s_instance;
+ }
+
+ MockReplayEntry() {
+ s_instance = this;
+ }
+
+ MOCK_CONST_METHOD0(get_commit_tid, uint64_t());
+ MOCK_METHOD0(get_data, bufferlist());
+};
+
+struct MockReplayEntryProxy {
+ uint64_t get_commit_tid() const {
+ return MockReplayEntry::get_instance().get_commit_tid();
+ }
+
+ bufferlist get_data() {
+ return MockReplayEntry::get_instance().get_data();
+ }
+};
+
+struct MockJournaler {
+ static MockJournaler *s_instance;
+ static MockJournaler &get_instance() {
+ assert(s_instance != nullptr);
+ return *s_instance;
+ }
+
+ MockJournaler() {
+ s_instance = this;
+ }
+
+ MOCK_METHOD0(construct, void());
+
+ MOCK_METHOD1(init, void(Context *));
+ MOCK_METHOD0(shut_down, void());
+ MOCK_CONST_METHOD0(is_initialized, bool());
+
+ MOCK_METHOD3(get_metadata, void(uint8_t *order, uint8_t *splay_width,
+ int64_t *pool_id));
+ MOCK_METHOD4(get_mutable_metadata, void(uint64_t*, uint64_t*,
+ std::set<cls::journal::Client> *,
+ Context*));
+
+ MOCK_METHOD2(register_client, void(const bufferlist &, Context *));
+ MOCK_METHOD3(get_client, void(const std::string &, cls::journal::Client *,
+ Context *));
+ MOCK_METHOD2(get_cached_client, int(const std::string&, cls::journal::Client*));
+ MOCK_METHOD2(update_client, void(const bufferlist &, Context *));
+
+ MOCK_METHOD3(get_tag, void(uint64_t, cls::journal::Tag *, Context *));
+ MOCK_METHOD3(get_tags, void(uint64_t, journal::Journaler::Tags*, Context*));
+
+ MOCK_METHOD1(start_replay, void(::journal::ReplayHandler *replay_handler));
+ MOCK_METHOD2(start_live_replay, void(ReplayHandler *, double));
+ MOCK_METHOD1(try_pop_front, bool(MockReplayEntryProxy *));
+ MOCK_METHOD2(try_pop_front, bool(MockReplayEntryProxy *, uint64_t *));
+ MOCK_METHOD0(stop_replay, void());
+
+ MOCK_METHOD3(start_append, void(int flush_interval, uint64_t flush_bytes,
+ double flush_age));
+ MOCK_METHOD2(append, MockFutureProxy(uint64_t tag_id,
+ const bufferlist &bl));
+ MOCK_METHOD1(flush, void(Context *on_safe));
+ MOCK_METHOD1(stop_append, void(Context *on_safe));
+
+ MOCK_METHOD1(committed, void(const MockReplayEntryProxy &));
+ MOCK_METHOD1(committed, void(const MockFutureProxy &future));
+ MOCK_METHOD1(flush_commit_position, void(Context*));
+
+};
+
+struct MockJournalerProxy {
+ template <typename IoCtxT>
+ MockJournalerProxy(IoCtxT &header_ioctx, const std::string &,
+ const std::string &, double) {
+ MockJournaler::get_instance().construct();
+ }
+
+ MockJournalerProxy(ContextWQ *work_queue, SafeTimer *timer, Mutex *timer_lock,
+ librados::IoCtx &header_ioctx, const std::string &journal_id,
+ const std::string &client_id, double commit_interval) {
+ MockJournaler::get_instance().construct();
+ }
+
+ int exists(bool *header_exists) const {
+ return -EINVAL;
+ }
+ int create(uint8_t order, uint8_t splay_width, int64_t pool_id) {
+ return -EINVAL;
+ }
+ int remove(bool force) {
+ return -EINVAL;
+ }
+ int register_client(const bufferlist &data) {
+ return -EINVAL;
+ }
+ void allocate_tag(uint64_t, const bufferlist &,
+ cls::journal::Tag*, Context *on_finish) {
+ on_finish->complete(-EINVAL);
+ }
+
+ void init(Context *on_finish) {
+ MockJournaler::get_instance().init(on_finish);
+ }
+ void shut_down() {
+ MockJournaler::get_instance().shut_down();
+ }
+ bool is_initialized() const {
+ return MockJournaler::get_instance().is_initialized();
+ }
+
+ void get_metadata(uint8_t *order, uint8_t *splay_width, int64_t *pool_id) {
+ MockJournaler::get_instance().get_metadata(order, splay_width, pool_id);
+ }
+
+ void get_mutable_metadata(uint64_t *min, uint64_t *active,
+ std::set<cls::journal::Client> *clients,
+ Context *on_finish) {
+ MockJournaler::get_instance().get_mutable_metadata(min, active, clients,
+ on_finish);
+ }
+
+ void register_client(const bufferlist &data, Context *on_finish) {
+ MockJournaler::get_instance().register_client(data, on_finish);
+ }
+
+ void get_client(const std::string &client_id, cls::journal::Client *client,
+ Context *on_finish) {
+ MockJournaler::get_instance().get_client(client_id, client, on_finish);
+ }
+
+ int get_cached_client(const std::string& client_id,
+ cls::journal::Client* client) {
+ return MockJournaler::get_instance().get_cached_client(client_id, client);
+ }
+
+ void update_client(const bufferlist &client_data, Context *on_finish) {
+ MockJournaler::get_instance().update_client(client_data, on_finish);
+ }
+
+ void get_tag(uint64_t tag_tid, cls::journal::Tag *tag, Context *on_finish) {
+ MockJournaler::get_instance().get_tag(tag_tid, tag, on_finish);
+ }
+
+ void get_tags(uint64_t tag_class, journal::Journaler::Tags *tags,
+ Context *on_finish) {
+ MockJournaler::get_instance().get_tags(tag_class, tags, on_finish);
+ }
+
+ void start_replay(::journal::ReplayHandler *replay_handler) {
+ MockJournaler::get_instance().start_replay(replay_handler);
+ }
+
+ void start_live_replay(ReplayHandler *handler, double interval) {
+ MockJournaler::get_instance().start_live_replay(handler, interval);
+ }
+
+ bool try_pop_front(MockReplayEntryProxy *replay_entry) {
+ return MockJournaler::get_instance().try_pop_front(replay_entry);
+ }
+
+ bool try_pop_front(MockReplayEntryProxy *entry, uint64_t *tag_tid) {
+ return MockJournaler::get_instance().try_pop_front(entry, tag_tid);
+ }
+
+ void stop_replay() {
+ MockJournaler::get_instance().stop_replay();
+ }
+
+ void start_append(int flush_interval, uint64_t flush_bytes, double flush_age) {
+ MockJournaler::get_instance().start_append(flush_interval, flush_bytes,
+ flush_age);
+ }
+
+ MockFutureProxy append(uint64_t tag_id, const bufferlist &bl) {
+ return MockJournaler::get_instance().append(tag_id, bl);
+ }
+
+ void flush(Context *on_safe) {
+ MockJournaler::get_instance().flush(on_safe);
+ }
+
+ void stop_append(Context *on_safe) {
+ MockJournaler::get_instance().stop_append(on_safe);
+ }
+
+ void committed(const MockReplayEntryProxy &entry) {
+ MockJournaler::get_instance().committed(entry);
+ }
+
+ void committed(const MockFutureProxy &future) {
+ MockJournaler::get_instance().committed(future);
+ }
+
+ void flush_commit_position(Context *on_finish) {
+ MockJournaler::get_instance().flush_commit_position(on_finish);
+ }
+};
+
+std::ostream &operator<<(std::ostream &os, const MockJournalerProxy &);
+
+} // namespace journal
+
+#endif // TEST_RBD_MIRROR_MOCK_JOURNALER_H
// vim: ts=8 sw=2 smarttab
#include "test/librbd/test_mock_fixture.h"
+#include "test/journal/mock/MockJournaler.h"
#include "test/librbd/test_support.h"
#include "test/librbd/mock/MockImageCtx.h"
#include "common/Cond.h"
#include <list>
#include <boost/scope_exit.hpp>
-namespace journal {
-
-struct MockFuture {
- static MockFuture *s_instance;
- static MockFuture &get_instance() {
- assert(s_instance != nullptr);
- return *s_instance;
- }
-
- MockFuture() {
- s_instance = this;
- }
-
- MOCK_CONST_METHOD0(is_valid, bool());
- MOCK_METHOD1(flush, void(Context *));
- MOCK_METHOD1(wait, void(Context *));
-};
-
-struct MockFutureProxy {
- bool is_valid() const {
- return MockFuture::get_instance().is_valid();
- }
-
- void flush(Context *on_safe) {
- MockFuture::get_instance().flush(on_safe);
- }
-
- void wait(Context *on_safe) {
- MockFuture::get_instance().wait(on_safe);
- }
-};
-
-struct MockReplayEntry {
- static MockReplayEntry *s_instance;
- static MockReplayEntry &get_instance() {
- assert(s_instance != nullptr);
- return *s_instance;
- }
-
- MockReplayEntry() {
- s_instance = this;
- }
-
- MOCK_METHOD0(get_data, bufferlist());
-};
-
-struct MockReplayEntryProxy {
- bufferlist get_data() {
- return MockReplayEntry::get_instance().get_data();
- }
-};
-
-struct MockJournaler {
- static MockJournaler *s_instance;
- static MockJournaler &get_instance() {
- assert(s_instance != nullptr);
- return *s_instance;
- }
-
- MockJournaler() {
- s_instance = this;
- }
-
- MOCK_METHOD0(construct, void());
-
- MOCK_METHOD3(get_metadata, void(uint8_t *order, uint8_t *splay_width,
- int64_t *pool_id));
- MOCK_METHOD1(init, void(Context*));
- MOCK_METHOD0(shut_down, void());
- MOCK_METHOD1(flush_commit_position, void(Context*));
-
- MOCK_METHOD2(get_cached_client, int(const std::string&, cls::journal::Client*));
- MOCK_METHOD2(update_client, void(const bufferlist &, Context *));
- MOCK_METHOD3(get_tags, void(uint64_t, journal::Journaler::Tags*, Context*));
-
- MOCK_METHOD1(start_replay, void(::journal::ReplayHandler *replay_handler));
- MOCK_METHOD1(try_pop_front, bool(MockReplayEntryProxy *replay_entry));
- MOCK_METHOD0(stop_replay, void());
-
- MOCK_METHOD3(start_append, void(int flush_interval, uint64_t flush_bytes,
- double flush_age));
- MOCK_METHOD2(append, MockFutureProxy(uint64_t tag_id,
- const bufferlist &bl));
- MOCK_METHOD1(flush, void(Context *on_safe));
- MOCK_METHOD1(stop_append, void(Context *on_safe));
-
- MOCK_METHOD1(committed, void(const MockReplayEntryProxy &replay_entry));
- MOCK_METHOD1(committed, void(const MockFutureProxy &future));
-};
-
-struct MockJournalerProxy {
- template <typename IoCtxT>
- MockJournalerProxy(IoCtxT &header_ioctx, const std::string &,
- const std::string &, double) {
- MockJournaler::get_instance().construct();
- }
-
- template <typename IoCtxT>
- MockJournalerProxy(ContextWQ *work_queue, SafeTimer *safe_timer,
- Mutex *timer_lock, IoCtxT &header_ioctx,
- const std::string &, const std::string &, double) {
- MockJournaler::get_instance().construct();
- }
-
- int exists(bool *header_exists) const {
- return -EINVAL;
- }
- int create(uint8_t order, uint8_t splay_width, int64_t pool_id) {
- return -EINVAL;
- }
- int remove(bool force) {
- return -EINVAL;
- }
- int register_client(const bufferlist &data) {
- return -EINVAL;
- }
- void allocate_tag(uint64_t, const bufferlist &,
- cls::journal::Tag*, Context *on_finish) {
- on_finish->complete(-EINVAL);
- }
-
- void get_metadata(uint8_t *order, uint8_t *splay_width, int64_t *pool_id) {
- MockJournaler::get_instance().get_metadata(order, splay_width, pool_id);
- }
-
- void init(Context *on_finish) {
- MockJournaler::get_instance().init(on_finish);
- }
- void shut_down() {
- MockJournaler::get_instance().shut_down();
- }
-
- int get_cached_client(const std::string& client_id,
- cls::journal::Client* client) {
- return MockJournaler::get_instance().get_cached_client(client_id, client);
- }
- void update_client(const bufferlist &client_data, Context *on_finish) {
- MockJournaler::get_instance().update_client(client_data, on_finish);
- }
-
- void get_tags(uint64_t tag_class, journal::Journaler::Tags *tags,
- Context *on_finish) {
- MockJournaler::get_instance().get_tags(tag_class, tags, on_finish);
- }
-
- void flush_commit_position(Context *on_finish) {
- MockJournaler::get_instance().flush_commit_position(on_finish);
- }
-
- void start_replay(::journal::ReplayHandler *replay_handler) {
- MockJournaler::get_instance().start_replay(replay_handler);
- }
-
- bool try_pop_front(MockReplayEntryProxy *replay_entry) {
- return MockJournaler::get_instance().try_pop_front(replay_entry);
- }
-
- void stop_replay() {
- MockJournaler::get_instance().stop_replay();
- }
-
- void start_append(int flush_interval, uint64_t flush_bytes, double flush_age) {
- MockJournaler::get_instance().start_append(flush_interval, flush_bytes,
- flush_age);
- }
-
- MockFutureProxy append(uint64_t tag_id, const bufferlist &bl) {
- return MockJournaler::get_instance().append(tag_id, bl);
- }
-
- void flush(Context *on_safe) {
- MockJournaler::get_instance().flush(on_safe);
- }
-
- void stop_append(Context *on_safe) {
- MockJournaler::get_instance().stop_append(on_safe);
- }
-
- void committed(const MockReplayEntryProxy &replay_entry) {
- MockJournaler::get_instance().committed(replay_entry);
- }
-
- void committed(const MockFutureProxy &future) {
- MockJournaler::get_instance().committed(future);
- }
-};
-
-MockFuture *MockFuture::s_instance = nullptr;
-MockReplayEntry *MockReplayEntry::s_instance = nullptr;
-MockJournaler *MockJournaler::s_instance = nullptr;
-
-} // namespace journal
-
namespace librbd {
namespace {
#include "librbd/ImageCtx.h"
#include "librbd/ImageState.h"
#include "librbd/Operations.h"
+#include "librbd/journal/TypeTraits.h"
+#include "test/journal/mock/MockJournaler.h"
#include "test/librados_test_stub/MockTestMemIoCtxImpl.h"
#include "test/librbd/mock/MockImageCtx.h"
-#include "test/rbd_mirror/mock/MockJournaler.h"
#include "tools/rbd_mirror/image_sync/ImageCopyRequest.h"
#include "tools/rbd_mirror/image_sync/ObjectCopyRequest.h"
#include "tools/rbd_mirror/Threads.h"
#include <boost/scope_exit.hpp>
+namespace librbd {
+namespace journal {
+
+template <>
+struct TypeTraits<librbd::MockImageCtx> {
+ typedef ::journal::MockJournaler Journaler;
+};
+
+} // namespace journal
+} // namespace librbd
+
namespace rbd {
namespace mirror {
namespace image_sync {
#include "librbd/ImageCtx.h"
#include "librbd/ImageState.h"
#include "librbd/Operations.h"
+#include "librbd/journal/TypeTraits.h"
+#include "test/journal/mock/MockJournaler.h"
#include "test/librados_test_stub/MockTestMemIoCtxImpl.h"
#include "test/librbd/mock/MockImageCtx.h"
-#include "test/rbd_mirror/mock/MockJournaler.h"
#include "tools/rbd_mirror/image_sync/SnapshotCopyRequest.h"
#include "tools/rbd_mirror/Threads.h"
+namespace librbd {
+namespace journal {
+
+template <>
+struct TypeTraits<librbd::MockImageCtx> {
+ typedef ::journal::MockJournaler Journaler;
+};
+
+} // namespace journal
+} // namespace librbd
+
// template definitions
#include "tools/rbd_mirror/image_sync/SnapshotCopyRequest.cc"
template class rbd::mirror::image_sync::SnapshotCopyRequest<librbd::MockImageCtx>;
#include "test/rbd_mirror/test_mock_fixture.h"
#include "include/rbd/librbd.hpp"
#include "librbd/journal/Types.h"
+#include "librbd/journal/TypeTraits.h"
+#include "test/journal/mock/MockJournaler.h"
#include "test/librados_test_stub/MockTestMemIoCtxImpl.h"
#include "test/librbd/mock/MockImageCtx.h"
-#include "test/rbd_mirror/mock/MockJournaler.h"
#include "tools/rbd_mirror/image_sync/SyncPointCreateRequest.h"
+namespace librbd {
+namespace journal {
+
+template <>
+struct TypeTraits<librbd::MockImageCtx> {
+ typedef ::journal::MockJournaler Journaler;
+};
+
+} // namespace journal
+} // namespace librbd
+
// template definitions
#include "tools/rbd_mirror/image_sync/SyncPointCreateRequest.cc"
template class rbd::mirror::image_sync::SyncPointCreateRequest<librbd::MockImageCtx>;
#include "test/rbd_mirror/test_mock_fixture.h"
#include "include/rbd/librbd.hpp"
#include "librbd/journal/Types.h"
+#include "librbd/journal/TypeTraits.h"
+#include "test/journal/mock/MockJournaler.h"
#include "test/librados_test_stub/MockTestMemIoCtxImpl.h"
#include "test/librbd/mock/MockImageCtx.h"
-#include "test/rbd_mirror/mock/MockJournaler.h"
#include "tools/rbd_mirror/image_sync/SyncPointPruneRequest.h"
+namespace librbd {
+namespace journal {
+
+template <>
+struct TypeTraits<librbd::MockImageCtx> {
+ typedef ::journal::MockJournaler Journaler;
+};
+
+} // namespace journal
+} // namespace librbd
+
// template definitions
#include "tools/rbd_mirror/image_sync/SyncPointPruneRequest.cc"
template class rbd::mirror::image_sync::SyncPointPruneRequest<librbd::MockImageCtx>;
+++ /dev/null
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-
-#include "MockJournaler.h"
-
-namespace journal {
-
-MockReplayEntry *MockReplayEntry::s_instance = nullptr;
-MockJournaler *MockJournaler::s_instance = nullptr;
-
-std::ostream &operator<<(std::ostream &os, const MockJournalerProxy &) {
- return os;
-}
-
-} // namespace journal
+++ /dev/null
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-
-#ifndef TEST_RBD_MIRROR_MOCK_JOURNALER_H
-#define TEST_RBD_MIRROR_MOCK_JOURNALER_H
-
-#include <gmock/gmock.h>
-#include "include/int_types.h"
-#include "include/rados/librados.hpp"
-#include "cls/journal/cls_journal_types.h"
-#include "librbd/Journal.h"
-#include "librbd/journal/TypeTraits.h"
-#include <iosfwd>
-#include <string>
-
-class Context;
-class ContextWQ;
-class Mutex;
-class SafeTimer;
-
-namespace journal {
-
-struct ReplayHandler;
-
-struct MockReplayEntry {
- static MockReplayEntry *s_instance;
- static MockReplayEntry &get_instance() {
- assert(s_instance != nullptr);
- return *s_instance;
- }
-
- MockReplayEntry() {
- s_instance = this;
- }
-
- MOCK_CONST_METHOD0(get_commit_tid, uint64_t());
- MOCK_METHOD0(get_data, bufferlist());
-};
-
-struct MockReplayEntryProxy {
- uint64_t get_commit_tid() const {
- return MockReplayEntry::get_instance().get_commit_tid();
- }
-
- bufferlist get_data() {
- return MockReplayEntry::get_instance().get_data();
- }
-};
-
-struct MockJournaler {
- static MockJournaler *s_instance;
- static MockJournaler &get_instance() {
- assert(s_instance != nullptr);
- return *s_instance;
- }
-
- MockJournaler() {
- s_instance = this;
- }
-
- MOCK_METHOD1(init, void(Context *));
- MOCK_METHOD0(shut_down, void());
- MOCK_CONST_METHOD0(is_initialized, bool());
-
- MOCK_METHOD4(get_mutable_metadata, void(uint64_t*, uint64_t*,
- std::set<cls::journal::Client> *,
- Context*));
-
- MOCK_METHOD2(try_pop_front, bool(MockReplayEntryProxy *, uint64_t *));
- MOCK_METHOD2(start_live_replay, void(ReplayHandler *, double));
- MOCK_METHOD0(stop_replay, void());
-
- MOCK_METHOD1(committed, void(const MockReplayEntryProxy &));
- MOCK_METHOD1(flush_commit_position, void(Context*));
-
- MOCK_METHOD2(update_client, void(const bufferlist&, Context *on_safe));
-
- MOCK_METHOD3(get_tag, void(uint64_t, cls::journal::Tag *, Context *));
-
- MOCK_METHOD2(get_cached_client, int(const std::string &,
- cls::journal::Client *));
-};
-
-struct MockJournalerProxy {
- MockJournalerProxy(ContextWQ *work_queue, SafeTimer *timer, Mutex *timer_lock,
- librados::IoCtx &header_ioctx, const std::string &journal_id,
- const std::string &client_id, double commit_interval) {
- MockJournaler::get_instance();
- }
-
- void init(Context *on_finish) {
- MockJournaler::get_instance().init(on_finish);
- }
- void shut_down() {
- MockJournaler::get_instance().shut_down();
- }
- bool is_initialized() const {
- return MockJournaler::get_instance().is_initialized();
- }
-
- void get_mutable_metadata(uint64_t *min, uint64_t *active,
- std::set<cls::journal::Client> *clients,
- Context *on_finish) {
- MockJournaler::get_instance().get_mutable_metadata(min, active, clients,
- on_finish);
- }
-
- bool try_pop_front(MockReplayEntryProxy *entry, uint64_t *tag_tid) {
- return MockJournaler::get_instance().try_pop_front(entry, tag_tid);
- }
- void start_live_replay(ReplayHandler *handler, double interval) {
- MockJournaler::get_instance().start_live_replay(handler, interval);
- }
- void stop_replay() {
- MockJournaler::get_instance().stop_replay();
- }
-
- void committed(const MockReplayEntryProxy &entry) {
- MockJournaler::get_instance().committed(entry);
- }
- void flush_commit_position(Context *on_finish) {
- MockJournaler::get_instance().flush_commit_position(on_finish);
- }
-
- void update_client(const bufferlist& data, Context *on_safe) {
- MockJournaler::get_instance().update_client(data, on_safe);
- }
-
- void get_tag(uint64_t tag_tid, cls::journal::Tag *tag, Context *on_finish) {
- MockJournaler::get_instance().get_tag(tag_tid, tag, on_finish);
- }
-
- int get_cached_client(const std::string &client_id,
- cls::journal::Client *client) {
- return MockJournaler::get_instance().get_cached_client(client_id, client);
- }
-};
-
-std::ostream &operator<<(std::ostream &os, const MockJournalerProxy &);
-
-} // namespace journal
-
-namespace librbd {
-
-struct MockImageCtx;
-
-namespace journal {
-
-template <>
-struct TypeTraits<MockImageCtx> {
- typedef ::journal::MockJournaler Journaler;
-};
-
-} // namespace journal
-} // namespace librbd
-
-#endif // TEST_RBD_MIRROR_MOCK_JOURNALER_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"
-#include "test/rbd_mirror/mock/MockJournaler.h"
namespace librbd {
#include "test/rbd_mirror/test_mock_fixture.h"
#include "include/rbd/librbd.hpp"
#include "librbd/journal/Types.h"
+#include "librbd/journal/TypeTraits.h"
+#include "test/journal/mock/MockJournaler.h"
#include "test/librados_test_stub/MockTestMemIoCtxImpl.h"
#include "test/librbd/mock/MockImageCtx.h"
#include "test/librbd/mock/MockObjectMap.h"
-#include "test/rbd_mirror/mock/MockJournaler.h"
#include "tools/rbd_mirror/ImageSync.h"
#include "tools/rbd_mirror/Threads.h"
#include "tools/rbd_mirror/image_sync/ImageCopyRequest.h"
#include "tools/rbd_mirror/image_sync/SyncPointCreateRequest.h"
#include "tools/rbd_mirror/image_sync/SyncPointPruneRequest.h"
+namespace librbd {
+namespace journal {
+
+template <>
+struct TypeTraits<librbd::MockImageCtx> {
+ typedef ::journal::MockJournaler Journaler;
+};
+
+} // namespace journal
+} // namespace librbd
+
// template definitions
#include "tools/rbd_mirror/ImageSync.cc"
template class rbd::mirror::ImageSync<librbd::MockImageCtx>;