]>
git.proxmox.com Git - ceph.git/blob - ceph/src/test/journal/mock/MockJournaler.h
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #ifndef TEST_RBD_MIRROR_MOCK_JOURNALER_H
5 #define TEST_RBD_MIRROR_MOCK_JOURNALER_H
7 #include <gmock/gmock.h>
8 #include "include/int_types.h"
9 #include "include/rados/librados.hpp"
10 #include "cls/journal/cls_journal_types.h"
11 #include "journal/Journaler.h"
23 static MockFuture
*s_instance
;
24 static MockFuture
&get_instance() {
25 ceph_assert(s_instance
!= nullptr);
33 MOCK_CONST_METHOD0(is_valid
, bool());
34 MOCK_METHOD1(flush
, void(Context
*));
35 MOCK_METHOD1(wait
, void(Context
*));
38 struct MockFutureProxy
{
39 bool is_valid() const {
40 return MockFuture::get_instance().is_valid();
43 void flush(Context
*on_safe
) {
44 MockFuture::get_instance().flush(on_safe
);
47 void wait(Context
*on_safe
) {
48 MockFuture::get_instance().wait(on_safe
);
52 struct MockReplayEntry
{
53 static MockReplayEntry
*s_instance
;
54 static MockReplayEntry
&get_instance() {
55 ceph_assert(s_instance
!= nullptr);
63 MOCK_CONST_METHOD0(get_commit_tid
, uint64_t());
64 MOCK_CONST_METHOD0(get_data
, bufferlist());
67 struct MockReplayEntryProxy
{
68 uint64_t get_commit_tid() const {
69 return MockReplayEntry::get_instance().get_commit_tid();
72 bufferlist
get_data() const {
73 return MockReplayEntry::get_instance().get_data();
77 struct MockJournaler
{
78 static MockJournaler
*s_instance
;
79 static MockJournaler
&get_instance() {
80 ceph_assert(s_instance
!= nullptr);
88 MOCK_METHOD0(construct
, void());
90 MOCK_METHOD1(init
, void(Context
*));
91 MOCK_METHOD0(shut_down
, void());
92 MOCK_METHOD1(shut_down
, void(Context
*));
93 MOCK_CONST_METHOD0(is_initialized
, bool());
95 MOCK_METHOD3(get_metadata
, void(uint8_t *order
, uint8_t *splay_width
,
97 MOCK_METHOD4(get_mutable_metadata
, void(uint64_t*, uint64_t*,
98 std::set
<cls::journal::Client
> *,
101 MOCK_METHOD2(register_client
, void(const bufferlist
&, Context
*));
102 MOCK_METHOD1(unregister_client
, void(Context
*));
103 MOCK_METHOD3(get_client
, void(const std::string
&, cls::journal::Client
*,
105 MOCK_METHOD2(get_cached_client
, int(const std::string
&, cls::journal::Client
*));
106 MOCK_METHOD2(update_client
, void(const bufferlist
&, Context
*));
108 MOCK_METHOD4(allocate_tag
, void(uint64_t, const bufferlist
&,
109 cls::journal::Tag
*, Context
*));
110 MOCK_METHOD3(get_tag
, void(uint64_t, cls::journal::Tag
*, Context
*));
111 MOCK_METHOD3(get_tags
, void(uint64_t, journal::Journaler::Tags
*, Context
*));
112 MOCK_METHOD4(get_tags
, void(uint64_t, uint64_t, journal::Journaler::Tags
*,
115 MOCK_METHOD1(start_replay
, void(::journal::ReplayHandler
*replay_handler
));
116 MOCK_METHOD2(start_live_replay
, void(ReplayHandler
*, double));
117 MOCK_METHOD1(try_pop_front
, bool(MockReplayEntryProxy
*));
118 MOCK_METHOD2(try_pop_front
, bool(MockReplayEntryProxy
*, uint64_t *));
119 MOCK_METHOD0(stop_replay
, void());
120 MOCK_METHOD1(stop_replay
, void(Context
*on_finish
));
122 MOCK_METHOD1(start_append
, void(uint64_t));
123 MOCK_METHOD3(set_append_batch_options
, void(int, uint64_t, double));
124 MOCK_CONST_METHOD0(get_max_append_size
, uint64_t());
125 MOCK_METHOD2(append
, MockFutureProxy(uint64_t tag_id
,
126 const bufferlist
&bl
));
127 MOCK_METHOD1(flush
, void(Context
*on_safe
));
128 MOCK_METHOD1(stop_append
, void(Context
*on_safe
));
130 MOCK_METHOD1(committed
, void(const MockReplayEntryProxy
&));
131 MOCK_METHOD1(committed
, void(const MockFutureProxy
&future
));
132 MOCK_METHOD1(flush_commit_position
, void(Context
*));
134 MOCK_METHOD1(add_listener
, void(JournalMetadataListener
*));
135 MOCK_METHOD1(remove_listener
, void(JournalMetadataListener
*));
139 struct MockJournalerProxy
{
140 MockJournalerProxy() {
141 MockJournaler::get_instance().construct();
144 template <typename IoCtxT
>
145 MockJournalerProxy(IoCtxT
&header_ioctx
, const std::string
&,
146 const std::string
&, const Settings
&,
147 journal::CacheManagerHandler
*) {
148 MockJournaler::get_instance().construct();
151 template <typename WorkQueue
, typename Timer
>
152 MockJournalerProxy(WorkQueue
*work_queue
, Timer
*timer
, ceph::mutex
*timer_lock
,
153 librados::IoCtx
&header_ioctx
,
154 const std::string
&journal_id
,
155 const std::string
&client_id
, const Settings
&,
156 journal::CacheManagerHandler
*) {
157 MockJournaler::get_instance().construct();
160 void exists(Context
*on_finish
) const {
161 on_finish
->complete(-EINVAL
);
163 void create(uint8_t order
, uint8_t splay_width
, int64_t pool_id
, Context
*on_finish
) {
164 on_finish
->complete(-EINVAL
);
166 void remove(bool force
, Context
*on_finish
) {
167 on_finish
->complete(-EINVAL
);
169 int register_client(const bufferlist
&data
) {
173 void allocate_tag(uint64_t tag_class
, const bufferlist
&tag_data
,
174 cls::journal::Tag
* tag
, Context
*on_finish
) {
175 MockJournaler::get_instance().allocate_tag(tag_class
, tag_data
, tag
,
179 void init(Context
*on_finish
) {
180 MockJournaler::get_instance().init(on_finish
);
183 MockJournaler::get_instance().shut_down();
185 void shut_down(Context
*on_finish
) {
186 MockJournaler::get_instance().shut_down(on_finish
);
188 bool is_initialized() const {
189 return MockJournaler::get_instance().is_initialized();
192 void get_metadata(uint8_t *order
, uint8_t *splay_width
, int64_t *pool_id
) {
193 MockJournaler::get_instance().get_metadata(order
, splay_width
, pool_id
);
196 void get_mutable_metadata(uint64_t *min
, uint64_t *active
,
197 std::set
<cls::journal::Client
> *clients
,
198 Context
*on_finish
) {
199 MockJournaler::get_instance().get_mutable_metadata(min
, active
, clients
,
203 void register_client(const bufferlist
&data
, Context
*on_finish
) {
204 MockJournaler::get_instance().register_client(data
, on_finish
);
207 void unregister_client(Context
*on_finish
) {
208 MockJournaler::get_instance().unregister_client(on_finish
);
211 void get_client(const std::string
&client_id
, cls::journal::Client
*client
,
212 Context
*on_finish
) {
213 MockJournaler::get_instance().get_client(client_id
, client
, on_finish
);
216 int get_cached_client(const std::string
& client_id
,
217 cls::journal::Client
* client
) {
218 return MockJournaler::get_instance().get_cached_client(client_id
, client
);
221 void update_client(const bufferlist
&client_data
, Context
*on_finish
) {
222 MockJournaler::get_instance().update_client(client_data
, on_finish
);
225 void get_tag(uint64_t tag_tid
, cls::journal::Tag
*tag
, Context
*on_finish
) {
226 MockJournaler::get_instance().get_tag(tag_tid
, tag
, on_finish
);
229 void get_tags(uint64_t tag_class
, journal::Journaler::Tags
*tags
,
230 Context
*on_finish
) {
231 MockJournaler::get_instance().get_tags(tag_class
, tags
, on_finish
);
233 void get_tags(uint64_t start_after_tag_tid
, uint64_t tag_class
,
234 journal::Journaler::Tags
*tags
, Context
*on_finish
) {
235 MockJournaler::get_instance().get_tags(start_after_tag_tid
, tag_class
, tags
,
239 void start_replay(::journal::ReplayHandler
*replay_handler
) {
240 MockJournaler::get_instance().start_replay(replay_handler
);
243 void start_live_replay(ReplayHandler
*handler
, double interval
) {
244 MockJournaler::get_instance().start_live_replay(handler
, interval
);
247 bool try_pop_front(MockReplayEntryProxy
*replay_entry
) {
248 return MockJournaler::get_instance().try_pop_front(replay_entry
);
251 bool try_pop_front(MockReplayEntryProxy
*entry
, uint64_t *tag_tid
) {
252 return MockJournaler::get_instance().try_pop_front(entry
, tag_tid
);
256 MockJournaler::get_instance().stop_replay();
258 void stop_replay(Context
*on_finish
) {
259 MockJournaler::get_instance().stop_replay(on_finish
);
262 void start_append(uint64_t max_in_flight_appends
) {
263 MockJournaler::get_instance().start_append(max_in_flight_appends
);
266 void set_append_batch_options(int flush_interval
, uint64_t flush_bytes
,
268 MockJournaler::get_instance().set_append_batch_options(
269 flush_interval
, flush_bytes
, flush_age
);
272 uint64_t get_max_append_size() const {
273 return MockJournaler::get_instance().get_max_append_size();
276 MockFutureProxy
append(uint64_t tag_id
, const bufferlist
&bl
) {
277 return MockJournaler::get_instance().append(tag_id
, bl
);
280 void flush(Context
*on_safe
) {
281 MockJournaler::get_instance().flush(on_safe
);
284 void stop_append(Context
*on_safe
) {
285 MockJournaler::get_instance().stop_append(on_safe
);
288 void committed(const MockReplayEntryProxy
&entry
) {
289 MockJournaler::get_instance().committed(entry
);
292 void committed(const MockFutureProxy
&future
) {
293 MockJournaler::get_instance().committed(future
);
296 void flush_commit_position(Context
*on_finish
) {
297 MockJournaler::get_instance().flush_commit_position(on_finish
);
300 void add_listener(JournalMetadataListener
*listener
) {
301 MockJournaler::get_instance().add_listener(listener
);
304 void remove_listener(JournalMetadataListener
*listener
) {
305 MockJournaler::get_instance().remove_listener(listener
);
309 std::ostream
&operator<<(std::ostream
&os
, const MockJournalerProxy
&);
311 } // namespace journal
313 #endif // TEST_RBD_MIRROR_MOCK_JOURNALER_H