22#include <glog/logging.h>
23#include <gmock/gmock.h>
24#include <gtest/gtest.h>
35#include "platform/proto/checkpoint_info.pb.h"
40using ::resdb::testing::EqualsProto;
42using ::testing::Invoke;
43using ::testing::Return;
46class ViewChangeManagerTest :
public Test {
48 ViewChangeManagerTest()
57 config_.SetViewchangeCommitTimeout(1000);
59 config_, &replica_communicator_, &mock_verifier_);
62 manager_ = std::make_unique<ViewChangeManager>(
64 &system_info_, &replica_communicator_, &mock_verifier_);
66 ON_CALL(mock_verifier_, SignMessage).WillByDefault(Return(SignatureInfo()));
67 ON_CALL(mock_verifier_, VerifyMessage(_, EqualsProto(SignatureInfo())))
68 .WillByDefault(Return(
true));
81TEST_F(ViewChangeManagerTest, SendViewChange) {
83 std::unique_ptr<Request> request = std::make_unique<Request>();
86 std::promise<bool> propose_done;
87 std::future<bool> propose_done_future = propose_done.get_future();
89 .WillOnce(Invoke([&](
const google::protobuf::Message& message) {
90 propose_done.set_value(
true);
92 propose_done_future.get();
95TEST_F(ViewChangeManagerTest, SendNewView) {
97 std::promise<bool> propose_done;
98 std::future<bool> propose_done_future = propose_done.get_future();
100 .WillRepeatedly(Invoke([&](
const google::protobuf::Message& message) {
101 Request viewchange_request;
102 viewchange_request.CopyFrom(message);
103 if (viewchange_request.type() == Request::TYPE_NEWVIEW) {
104 propose_done.set_value(true);
108 for (
int i = 0; i < 3; ++i) {
109 ViewChangeMessage viewchange_message;
110 std::unique_ptr<Request> request =
111 NewRequest(Request::TYPE_VIEWCHANGE, Request(), i + 1);
112 viewchange_message.set_view_number(3);
113 viewchange_message.SerializeToString(request->mutable_data());
115 int ret =
manager_->ProcessViewChange(std::make_unique<Context>(),
119 propose_done_future.get();
MockReplicaCommunicator replica_communicator_
void AddCommitData(std::unique_ptr< Request > request)
CheckPointManager checkpoint_manager_
std::unique_ptr< MessageManager > message_manager_
std::unique_ptr< Request > NewRequest(Request::Type type, const Request &request, int sender_id)
ReplicaInfo GenerateReplicaInfo(int id, const std::string &ip, int port)
TEST_F(ResDBTest, TestPBFTService)
std::unique_ptr< ResDBConfig > config_
MockSignatureVerifier mock_verifier_