408 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			408 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright 2014 Alibaba Inc. All Rights Reserved.
 | |
| // Author:
 | |
| //     zhangshuai.zs@alibaba-inc.com
 | |
| //
 | |
| // This file is for...
 | |
| //
 | |
| #ifndef OCEANBASE_UNITTEST_MOCK_LOG_UTILS_H_
 | |
| #define OCEANBASE_UNITTEST_MOCK_LOG_UTILS_H_
 | |
| 
 | |
| #include "gtest/gtest.h"
 | |
| #include "lib/allocator/ob_malloc.h"
 | |
| #include <locale.h>
 | |
| #include "clog/ob_log_state_mgr.h"
 | |
| #include "clog/ob_i_net_log_buffer.h"
 | |
| #include "clog/ob_i_disk_log_buffer.h"
 | |
| #include "clog/ob_i_net_log_buffer_mgr.h"
 | |
| #include "clog/ob_log_engine.h"
 | |
| #include "storage/ob_i_partition_mgr.h"
 | |
| #include "../storage/mockcontainer/mock_ob_partition.h"
 | |
| #include "../storage/mockcontainer/mock_ob_election_mgr.h"
 | |
| #include "clog/ob_log_callback_engine.h"
 | |
| #include "../storage/mockcontainer/mock_ob_partition_mgr.h"
 | |
| #include "election/ob_election_rpc.h"
 | |
| 
 | |
| namespace oceanbase
 | |
| {
 | |
| namespace clog
 | |
| {
 | |
| using namespace oceanbase::election;
 | |
| 
 | |
| class MockSubmitLogCb : public ObISubmitLogCb
 | |
| {
 | |
| public:
 | |
|   MockSubmitLogCb() {}
 | |
|   ~MockSubmitLogCb() {}
 | |
|   //virtual int on_success(const common::ObPartitionKey &parition_key, const uint64_t log_id,  const int64_t version) = 0;
 | |
|   virtual int on_success(const common::ObPartitionKey &partition_key, const uint64_t log_id,
 | |
|                          const int64_t trans_version)
 | |
|   {
 | |
|     UNUSED(partition_key);
 | |
|     UNUSED(log_id);
 | |
|     UNUSED(trans_version);
 | |
|     return OB_SUCCESS;
 | |
|   }
 | |
| };
 | |
| 
 | |
| /*
 | |
| class MockLogEngine: public ObILogEngine
 | |
| {
 | |
| public:
 | |
|   MockLogEngine() {}
 | |
|   virtual ~MockLogEngine() {}
 | |
|   virtual ObIRawLogIterator *alloc_raw_log_iterator(const uint64_t file_id, const int64_t timeout)
 | |
|   {
 | |
|     UNUSED(file_id);
 | |
|     UNUSED(timeout);
 | |
|     MockRawLogIterator *ptr = static_cast<MockRawLogIterator *>(common::ob_malloc(sizeof(
 | |
|                                                                                       MockRawLogIterator), common::ObModIds::OB_UPS_LOG));
 | |
|     ptr->init();
 | |
|     return ptr;
 | |
|   }
 | |
|   virtual void revert_raw_log_iterator(ObIRawLogIterator *iter)
 | |
|   {
 | |
|     common::ob_free(iter);
 | |
|   }
 | |
|   virtual int read_log_by_location(const clog::ObReadParam ¶m, ObLogEntry &entry)
 | |
|   {
 | |
|     UNUSED(param);
 | |
|     UNUSED(entry);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
|   virtual int read_log_by_id(const clog::ObReadParam ¶m, ObLogEntry &entry)
 | |
|   {
 | |
|     UNUSED(param);
 | |
|     UNUSED(entry);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
|   virtual int submit_flush_task(FlushTask *task)
 | |
|   {
 | |
|     ObLogCursor log_cursor;
 | |
|     task->after_consume(common::OB_SUCCESS, &log_cursor);
 | |
|     return common::OB_SUCCESS;
 | |
|   };
 | |
|   virtual int post_log(const common::ObAddr &server,
 | |
|                        const common::ObPartitionKey &key,
 | |
|                        const char *buf,
 | |
|                        int64_t len,
 | |
|                        common::ObProposalID propose_id)
 | |
|   {
 | |
|     UNUSED(server);
 | |
|     UNUSED(key);
 | |
|     UNUSED(buf);
 | |
|     UNUSED(len);
 | |
|     UNUSED(propose_id);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
|   virtual int submit_net_task(const common::ObMemberList &mem_list,
 | |
|                               const common::ObPartitionKey &key,
 | |
|                               ObILogNetTask *task)
 | |
|   {
 | |
|     UNUSED(mem_list);
 | |
|     UNUSED(key);
 | |
|     UNUSED(task);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
|   virtual int submit_log_ack(const common::ObAddr &server,
 | |
|                              const common::ObPartitionKey &key,
 | |
|                              const uint64_t log_id,
 | |
|                              const common::ObProposalID propose_id,
 | |
|                              ObLogType type)
 | |
|   {
 | |
|     UNUSED(server);
 | |
|     UNUSED(key);
 | |
|     UNUSED(log_id);
 | |
|     UNUSED(propose_id);
 | |
|     UNUSED(type);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
|   virtual int fetch_log_from_all_follower(const common::ObMemberList &mem_list,
 | |
|                                           const common::ObPartitionKey &key,
 | |
|                                           const uint64_t start_id,
 | |
|                                           const common::ObProposalID propose_id)
 | |
|   {
 | |
|     UNUSED(mem_list);
 | |
|     UNUSED(key);
 | |
|     UNUSED(start_id);
 | |
|     UNUSED(propose_id);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
|   virtual int fetch_log_from_leader(const common::ObAddr &server,
 | |
|                                     const common::ObPartitionKey &key,
 | |
|                                     const uint64_t start_id,
 | |
|                                     const uint64_t end_id,
 | |
|                                     const common::ObProposalID propose_id)
 | |
|   {
 | |
|     UNUSED(server);
 | |
|     UNUSED(key);
 | |
|     UNUSED(start_id);
 | |
|     UNUSED(end_id);
 | |
|     UNUSED(propose_id);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
|   virtual int submit_prepare_rqst(const common::ObMemberList &mem_list,
 | |
|                                   const common::ObPartitionKey &key,
 | |
|                                   const common::ObProposalID propose_id)
 | |
|   {
 | |
|     UNUSED(mem_list);
 | |
|     UNUSED(key);
 | |
|     UNUSED(propose_id);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
|   virtual int broadcast_mc_log_to_members(const common::ObPartitionKey &partition_key,
 | |
|                                           const common::ObMemberList &sendout_member_list,
 | |
|                                           const char *buff,
 | |
|                                           const int64_t buff_len)
 | |
|   {
 | |
|     UNUSED(partition_key);
 | |
|     UNUSED(sendout_member_list);
 | |
|     UNUSED(buff);
 | |
|     UNUSED(buff_len);
 | |
|     int ret = common::OB_SUCCESS;
 | |
|     return ret;
 | |
|   }
 | |
|   virtual int fetch_latest_mc_log(const common::ObPartitionKey &partition_key,
 | |
|                                   const common::ObAddr &leader)
 | |
|   {
 | |
|     UNUSED(partition_key);
 | |
|     UNUSED(leader);
 | |
|     int ret = common::OB_SUCCESS;
 | |
|     return ret;
 | |
|   }
 | |
|   virtual int ack_mc_log_to_leader(const common::ObPartitionKey &partition_key,
 | |
|                                    const common::ObAddr &leader,
 | |
|                                    const common::ObAddr &server,
 | |
|                                    const int64_t mc_timestamp,
 | |
|                                    const common::ObProposalID proposal_id)
 | |
|   {
 | |
|     UNUSED(partition_key);
 | |
|     UNUSED(leader);
 | |
|     UNUSED(server);
 | |
|     UNUSED(mc_timestamp);
 | |
|     UNUSED(proposal_id);
 | |
|     int ret = common::OB_SUCCESS;
 | |
|     return ret;
 | |
|   }
 | |
|   virtual int prepare_response(const common::ObAddr &server,
 | |
|                                const common::ObPartitionKey &partition_key,
 | |
|                                const uint64_t max_log_id,
 | |
|                                const common::ObProposalID propose_id)
 | |
|   {
 | |
|     UNUSED(server);
 | |
|     UNUSED(partition_key);
 | |
|     UNUSED(max_log_id);
 | |
|     UNUSED(propose_id);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
|   virtual int get_current_cursor(uint64_t &file_id, int64_t &offset)
 | |
|   {
 | |
|     UNUSED(file_id);
 | |
|     UNUSED(offset);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
|   virtual int get_search_min_fid(const oceanbase::clog::ObReadParam &a, uint64_t &b)
 | |
|   {
 | |
|     UNUSED(a);
 | |
|     UNUSED(b);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
|   virtual int submit_fetch_log_resp(const oceanbase::common::ObMemberList &a,
 | |
|                                     const oceanbase::common::ObPartitionKey &b, oceanbase::clog::ObILogNetTask *c)
 | |
|   {
 | |
|     UNUSED(a);
 | |
|     UNUSED(b);
 | |
|     UNUSED(c);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
|   virtual int get_cur_min_fid(uint64_t &file_id)
 | |
|   {
 | |
|     UNUSED(file_id);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
|   virtual ObILogPartitionMetaReader *alloc_partition_meta_reader()
 | |
|   {
 | |
|     return NULL;
 | |
|   }
 | |
|   virtual void revert_partition_meta_reader(ObILogPartitionMetaReader *reader)
 | |
|   {
 | |
|     UNUSED(reader);
 | |
|     return;
 | |
|   }
 | |
| };
 | |
| */
 | |
| 
 | |
| class MockElectionMgr : public  election::MockObIElectionMgr
 | |
| {
 | |
| public:
 | |
|   MockElectionMgr() : leader_() {}
 | |
|   virtual int start_all()
 | |
|   {
 | |
|     return 0;
 | |
|   }
 | |
|   int stop_all()
 | |
|   {
 | |
|     return 0;
 | |
|   }
 | |
|   virtual int handle_election_msg(const ObElectionMsgBuffer &msgbuf,
 | |
|                                   obrpc::ObElectionRpcResult &result)
 | |
|   {
 | |
|     UNUSED(msgbuf);
 | |
|     UNUSED(result);
 | |
|     return 0;
 | |
|   }
 | |
|   int init(const common::ObAddr &self, obrpc::ObElectionRpcProxy *client_manager)
 | |
|   {
 | |
|     UNUSED(self);
 | |
|     UNUSED(client_manager);
 | |
|     return 0;
 | |
|   }
 | |
|   int add_partition(const common::ObPartitionKey &partition, int64_t replica_num,
 | |
|                     election::ObIElectionCallback *election_cb)
 | |
|   {
 | |
|     UNUSED(partition);
 | |
|     UNUSED(replica_num);
 | |
|     UNUSED(election_cb);
 | |
|     return 0;
 | |
|   }
 | |
|   int remove_partition(const common::ObPartitionKey &partition)
 | |
|   {
 | |
|     UNUSED(partition);
 | |
|     return  0;
 | |
|   }
 | |
|   int change_leader_async(const common::ObPartitionKey &partition, const common::ObAddr &leader)
 | |
|   {
 | |
|     UNUSED(partition);
 | |
|     UNUSED(leader);
 | |
|     change_leader_ = true;
 | |
|     return  0;
 | |
|   }
 | |
|   int start(const common::ObPartitionKey &partition)
 | |
|   {
 | |
|     UNUSED(partition);
 | |
|     return  0;
 | |
|   }
 | |
|   int stop(const common::ObPartitionKey &partition)
 | |
|   {
 | |
|     UNUSED(partition);
 | |
|     return 0;
 | |
|   }
 | |
|   virtual int set_candidate(const common::ObPartitionKey &partition,
 | |
|                             const common::ObMemberList &prev_mlist,
 | |
|                             const common::ObMemberList &curr_mlist)
 | |
|   {
 | |
|     UNUSED(partition);
 | |
|     UNUSED(prev_mlist);
 | |
|     UNUSED(curr_mlist);
 | |
|     return 0;
 | |
|   }
 | |
|   int get_prev_candidate(const common::ObPartitionKey &partition, common::ObMemberList &mlist) const
 | |
|   {
 | |
|     UNUSED(partition);
 | |
|     UNUSED(mlist);
 | |
|     return 0;
 | |
|   }
 | |
|   int get_curr_candidate(const common::ObPartitionKey &partition, common::ObMemberList &mlist) const
 | |
|   {
 | |
|     UNUSED(partition);
 | |
|     UNUSED(mlist);
 | |
|     return 0;
 | |
|   }
 | |
|   int get_leader(const common::ObPartitionKey &partition, common::ObAddr &leader) const
 | |
|   {
 | |
|     UNUSED(partition);
 | |
|     leader = leader_;
 | |
|     return 0;
 | |
|   }
 | |
| public:
 | |
|   bool change_leader_;
 | |
|   ObAddr leader_;
 | |
| };
 | |
| 
 | |
| class MockLogCallbackEngine: public ObILogCallbackEngine
 | |
| {
 | |
| public:
 | |
|   virtual int init(common::S2MQueueThread *worker_thread_pool,
 | |
|                    common::S2MQueueThread *sp_thread_pool)
 | |
|   {
 | |
|     UNUSED(worker_thread_pool);
 | |
|     UNUSED(sp_thread_pool);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
|   virtual void destroy()
 | |
|   {
 | |
|     return;
 | |
|   }
 | |
|   virtual int submit_flush_cb_task(const common::ObPartitionKey &partition_key,
 | |
|                                    const ObLogFlushCbArg &flush_cb_arg)
 | |
|   {
 | |
|     UNUSED(partition_key);
 | |
|     UNUSED(flush_cb_arg);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
|   virtual int submit_member_change_success_cb_task(const common::ObPartitionKey &partition_key,
 | |
|                                                    const int64_t mc_timestamp,
 | |
|                                                    const common::ObMemberList &prev_member_list,
 | |
|                                                    const common::ObMemberList &curr_member_list)
 | |
|   {
 | |
|     UNUSED(partition_key);
 | |
|     UNUSED(mc_timestamp);
 | |
|     UNUSED(prev_member_list);
 | |
|     UNUSED(curr_member_list);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
|   virtual int submit_leader_takeover_cb_task(const common::ObPartitionKey &partition_key)
 | |
|   {
 | |
|     UNUSED(partition_key);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
|   virtual int submit_leader_revoke_cb_task(const common::ObPartitionKey &partition_key)
 | |
|   {
 | |
|     UNUSED(partition_key);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class MockObPSCb : public ObIPSCb
 | |
| {
 | |
| public:
 | |
|   virtual int64_t get_min_using_file_id() const {return 0;}
 | |
|   virtual int on_leader_revoke(const common::ObPartitionKey &partition_key)
 | |
|   {UNUSED(partition_key); return 0;}
 | |
|   virtual int on_leader_takeover(const common::ObPartitionKey &partition_key)
 | |
|   {UNUSED(partition_key); return 0;}
 | |
|   virtual int on_leader_active(const common::ObPartitionKey &partition_key)
 | |
|   {UNUSED(partition_key); return 0;}
 | |
|   virtual int on_member_change_success(
 | |
|       const common::ObPartitionKey &partition_key,
 | |
|       const int64_t mc_timestamp,
 | |
|       const common::ObMemberList &prev_member_list,
 | |
|       const common::ObMemberList &curr_member_list)
 | |
|   {
 | |
|     UNUSED(partition_key);
 | |
|     UNUSED(mc_timestamp);
 | |
|     UNUSED(prev_member_list);
 | |
|     UNUSED(curr_member_list);
 | |
|     return 0;
 | |
|   }
 | |
|   virtual int handle_log_missing(const common::ObPartitionKey &pkey,
 | |
|                                  const common::ObAddr &server)
 | |
|   {
 | |
|     UNUSED(pkey);
 | |
|     UNUSED(server);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
|   virtual int get_server_locality_array(
 | |
|       common::ObIArray<share::ObServerLocality> &server_locality_array,
 | |
|       bool &has_readonly_zone) const
 | |
|   {
 | |
|     UNUSED(server_locality_array);
 | |
|     UNUSED(has_readonly_zone);
 | |
|     return common::OB_SUCCESS;
 | |
|   }
 | |
| };
 | |
| 
 | |
| } // namespace clog
 | |
| } // namespace oceanbase
 | |
| 
 | |
| #endif // OCEANBASE_UNITTEST_MOCK_LOG_UTILS_H_
 | 
