]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test: share journal::MockJournaler between librbd and rbd-mirror
authorJason Dillaman <dillaman@redhat.com>
Tue, 5 Apr 2016 04:03:12 +0000 (00:03 -0400)
committerJason Dillaman <dillaman@redhat.com>
Tue, 3 May 2016 18:32:32 +0000 (14:32 -0400)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
12 files changed:
src/test/Makefile-client.am
src/test/journal/mock/MockJournaler.cc [new file with mode: 0644]
src/test/journal/mock/MockJournaler.h [new file with mode: 0644]
src/test/librbd/test_mock_Journal.cc
src/test/rbd_mirror/image_sync/test_mock_ImageCopyRequest.cc
src/test/rbd_mirror/image_sync/test_mock_SnapshotCopyRequest.cc
src/test/rbd_mirror/image_sync/test_mock_SyncPointCreateRequest.cc
src/test/rbd_mirror/image_sync/test_mock_SyncPointPruneRequest.cc
src/test/rbd_mirror/mock/MockJournaler.cc [deleted file]
src/test/rbd_mirror/mock/MockJournaler.h [deleted file]
src/test/rbd_mirror/test_mock_ImageReplayer.cc
src/test/rbd_mirror/test_mock_ImageSync.cc

index 243c2b069d7ed09a34cce4bf2708a6e296456ecf..b5c5f0d755c926648213decd5b68ea2870657a6b 100644 (file)
@@ -317,6 +317,11 @@ noinst_HEADERS += \
        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 \
@@ -401,7 +406,7 @@ unittest_librbd_SOURCES = \
        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 \
@@ -457,8 +462,7 @@ librbd_mirror_test_la_SOURCES = \
 
 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
@@ -472,11 +476,11 @@ unittest_rbd_mirror_SOURCES = \
        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 \
diff --git a/src/test/journal/mock/MockJournaler.cc b/src/test/journal/mock/MockJournaler.cc
new file mode 100644 (file)
index 0000000..9064944
--- /dev/null
@@ -0,0 +1,16 @@
+// -*- 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
diff --git a/src/test/journal/mock/MockJournaler.h b/src/test/journal/mock/MockJournaler.h
new file mode 100644 (file)
index 0000000..eece17b
--- /dev/null
@@ -0,0 +1,262 @@
+// -*- 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
index 9ebea8f3e7079e9b86da48a57cc3f837b1a785e6..66698187c704e7c0d2486843318bd10d6043ebff 100644 (file)
@@ -2,6 +2,7 @@
 // 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 {
index ff3584e071fd49df72b330ad10b84ab86c9a78f6..0b72167d03f5f514219404730f80c1ec3f391a78 100644 (file)
@@ -6,14 +6,26 @@
 #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 {
index 10c3ac36ebc5add422b3b1b40590efe93a77274e..0e4817346c1d65e8dba0fe25c829704379048b0f 100644 (file)
@@ -6,12 +6,24 @@
 #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>;
index e9834021880ae1e00c073ed1db68592a4743784d..75c64797a79f52e2ec6017f2fb9aa317f3353dc8 100644 (file)
@@ -4,11 +4,23 @@
 #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>;
index e45bf7839584484b1b8aab71814f3cabf73e967e..70254573598099322dca05660638e55dfb7b0b1d 100644 (file)
@@ -4,11 +4,23 @@
 #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>;
diff --git a/src/test/rbd_mirror/mock/MockJournaler.cc b/src/test/rbd_mirror/mock/MockJournaler.cc
deleted file mode 100644 (file)
index 047dd2f..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-// -*- 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
diff --git a/src/test/rbd_mirror/mock/MockJournaler.h b/src/test/rbd_mirror/mock/MockJournaler.h
deleted file mode 100644 (file)
index 03bb6be..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-// -*- 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
index 3233b48df723ed52ca30812270e4fe69438a970d..a2785f11c55459245194f6d27623d10a02f3b341 100644 (file)
@@ -7,9 +7,9 @@
 #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 {
 
index 8dd0870ad13700d89673cd3c7727719e9b7252e6..f3c94bac2260e0fd39cba054161e5c631c90f0e9 100644 (file)
@@ -4,10 +4,11 @@
 #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>;