22#include <glog/logging.h>
23#include <gmock/gmock.h>
24#include <gtest/gtest.h>
35using ::testing::Invoke;
38CertificateInfo GetCertificateInfo() {
40 info.mutable_public_key()->mutable_public_key_info()->set_type(
41 CertificateKeyInfo::CLIENT);
45class ResponseManagerTest :
public Test {
55 GetCertificateInfo()),
57 manager_(config_, &replica_communicator_, &system_info_,
nullptr) {
61 int AddResponseMsg(
int sender_id, BatchUserResponse batch_resp) {
63 request.set_current_view(1);
65 request.set_type(Request::TYPE_RESPONSE);
66 request.set_sender_id(sender_id);
67 request.set_data(
"resp_data");
68 batch_resp.SerializeToString(request.mutable_data());
70 return manager_.ProcessResponseMsg(std::make_unique<Context>(),
71 std::make_unique<Request>(request));
82TEST_F(ResponseManagerTest, GetConext) {
86 std::vector<std::unique_ptr<Context>> list(2);
95TEST_F(ResponseManagerTest, SendUserRequest) {
96 auto context = std::make_unique<Context>();
97 context->signature.set_signature(
"signature");
99 std::promise<bool> propose_done;
100 std::future<bool> propose_done_future = propose_done.get_future();
102 propose_done.set_value(
true);
108 propose_done_future.get();
111TEST_F(ResponseManagerTest, ProcessResponse) {
112 std::unique_ptr<MockNetChannel> channel =
113 std::make_unique<MockNetChannel>(
"127.0.0.1", 0);
115 EXPECT_CALL(*channel, SendRawMessageData).Times(1);
117 uint64_t local_id = 1;
119 BatchUserResponse batch_resp;
120 *batch_resp.add_response() =
"test";
121 *batch_resp.add_signatures() = SignatureInfo();
122 batch_resp.set_local_id(local_id);
125 request.set_sender_id(1);
126 request.set_current_view(1);
128 request.set_proxy_id(1);
130 auto context = std::make_unique<Context>();
131 context->client = std::move(channel);
132 context->signature.set_signature(
"signature");
134 std::vector<std::unique_ptr<Context>> context_list;
135 context_list.push_back(std::move(context));
138 EXPECT_EQ(AddResponseMsg(1, batch_resp), 0);
139 EXPECT_EQ(AddResponseMsg(2, batch_resp), 0);
142TEST_F(ResponseManagerTest, ProcessResponseWithMoreResp) {
143 std::unique_ptr<MockNetChannel> channel =
144 std::make_unique<MockNetChannel>(
"127.0.0.1", 0);
146 EXPECT_CALL(*channel, SendRawMessageData).Times(1);
148 uint64_t local_id = 1;
150 BatchUserResponse batch_resp;
151 *batch_resp.add_response() =
"test";
152 *batch_resp.add_signatures() = SignatureInfo();
153 batch_resp.set_local_id(local_id);
156 request.set_sender_id(1);
157 request.set_current_view(1);
159 request.set_proxy_id(1);
161 auto context = std::make_unique<Context>();
162 context->client = std::move(channel);
163 context->signature.set_signature(
"signature");
165 std::vector<std::unique_ptr<Context>> context_list;
166 context_list.push_back(std::move(context));
169 EXPECT_EQ(AddResponseMsg(1, batch_resp), 0);
170 EXPECT_EQ(AddResponseMsg(2, batch_resp), 0);
172 EXPECT_EQ(AddResponseMsg(3, batch_resp), -2);
175TEST_F(ResponseManagerTest, ProcessResponseWithSameSender) {
176 std::unique_ptr<MockNetChannel> channel =
177 std::make_unique<MockNetChannel>(
"127.0.0.1", 0);
179 EXPECT_CALL(*channel, SendRawMessageData).Times(0);
181 uint64_t local_id = 1;
183 BatchUserResponse batch_resp;
184 *batch_resp.add_response() =
"test";
185 *batch_resp.add_signatures() = SignatureInfo();
186 batch_resp.set_local_id(local_id);
189 request.set_sender_id(1);
190 request.set_current_view(1);
192 request.set_proxy_id(1);
194 auto context = std::make_unique<Context>();
195 context->client = std::move(channel);
196 context->signature.set_signature(
"signature");
198 std::vector<std::unique_ptr<Context>> context_list;
199 context_list.push_back(std::move(context));
202 EXPECT_EQ(AddResponseMsg(1, batch_resp), 0);
203 EXPECT_EQ(AddResponseMsg(1, batch_resp), 0);
MockReplicaCommunicator replica_communicator_
std::vector< std::unique_ptr< Context > > FetchContextList(uint64_t id)
int AddContextList(std::vector< std::unique_ptr< Context > > context, uint64_t id)
int NewUserRequest(std::unique_ptr< Context > context, std::unique_ptr< Request > user_request)
ReplicaInfo GenerateReplicaInfo(int id, const std::string &ip, int port)
TEST_F(ResDBTest, TestPBFTService)
std::unique_ptr< ResDBConfig > config_