22#include <glog/logging.h>
23#include <gmock/gmock.h>
24#include <gtest/gtest.h>
28#include "platform/communication/mock_resdb_replica_client.h"
31#include "platform/consensus/execution/mock_transaction_executor_impl.h"
32#include "platform/crypto/mock_signature_verifier.h"
36using ::testing::Invoke;
37using ::testing::Return;
40TEST(GeoCommitTest, GeoRequestFromOtherRegion) {
41 ResConfigData config_data = ResConfigData();
42 config_data.set_self_region_id(1);
43 std::vector<ReplicaInfo> replicas = {
48 ResDBConfig config = ResDBConfig(
50 auto system_info = std::make_unique<SystemInfo>(config);
51 MockResDBReplicaClient replica_client;
52 std::unique_ptr<MockGeoGlobalExecutor> global_executor;
53 std::unique_ptr<GeoPBFTCommitment> commitment;
55 auto context = std::make_unique<Context>();
56 context->signature.set_signature(
"signature");
60 request.mutable_region_info()->set_region_id(2);
61 BatchClientRequest client_request;
62 *client_request.mutable_committed_certs()->add_committed_certs() =
64 client_request.SerializeToString(request.mutable_data());
66 global_executor = std::make_unique<MockGeoGlobalExecutor>(
67 std::make_unique<MockTransactionExecutorImpl>(), config);
68 std::promise<bool> done;
69 std::future<bool> done_future = done.get_future();
70 EXPECT_CALL(replica_client, BroadCast).Times(1);
71 EXPECT_CALL(*global_executor, Execute).Times(1).WillOnce(Invoke([&]() {
76 MockSignatureVerifier verifier;
78 .WillOnce(Return(
true));
79 commitment = std::make_unique<GeoPBFTCommitment>(
80 std::move(global_executor), config, std::move(system_info),
81 &replica_client, &verifier);
82 EXPECT_EQ(commitment->GeoProcessCcm(std::move(context),
83 std::make_unique<Request>(request)),
88TEST(GeoCommitTest, GeoRequestFromLocalRegion) {
89 ResConfigData config_data = ResConfigData();
90 config_data.set_self_region_id(1);
91 std::vector<ReplicaInfo> replicas = {
96 ResDBConfig config = ResDBConfig(
98 auto system_info = std::make_unique<SystemInfo>(config);
99 MockResDBReplicaClient replica_client;
100 std::unique_ptr<MockGeoGlobalExecutor> global_executor;
101 std::unique_ptr<GeoPBFTCommitment> commitment;
103 auto context = std::make_unique<Context>();
104 context->signature.set_signature(
"signature");
107 request.mutable_region_info()->set_region_id(1);
108 global_executor = std::make_unique<MockGeoGlobalExecutor>(
109 std::make_unique<MockTransactionExecutorImpl>(), config);
111 BatchClientRequest client_request;
112 *client_request.mutable_committed_certs()->add_committed_certs() =
114 client_request.SerializeToString(request.mutable_data());
115 EXPECT_CALL(replica_client, BroadCast).Times(0);
117 std::promise<bool> done;
118 std::future<bool> done_future = done.get_future();
119 EXPECT_CALL(*global_executor, Execute).Times(1).WillOnce(Invoke([&]() {
120 done.set_value(
true);
124 MockSignatureVerifier verifier;
126 .WillOnce(Return(
true));
127 commitment = std::make_unique<GeoPBFTCommitment>(
128 std::move(global_executor), config, std::move(system_info),
129 &replica_client, &verifier);
130 EXPECT_EQ(commitment->GeoProcessCcm(std::move(context),
131 std::make_unique<Request>(request)),
136TEST(GeoCommitTest, ReceiveSameGeoRequest) {
137 ResConfigData config_data = ResConfigData();
138 config_data.set_self_region_id(1);
139 std::vector<ReplicaInfo> replicas = {
144 ResDBConfig config = ResDBConfig(
146 auto system_info = std::make_unique<SystemInfo>(config);
147 MockResDBReplicaClient replica_client;
149 auto context = std::make_unique<Context>();
150 context->signature.set_signature(
"signature");
153 request.mutable_region_info()->set_region_id(2);
155 BatchClientRequest client_request;
156 *client_request.mutable_committed_certs()->add_committed_certs() =
158 client_request.SerializeToString(request.mutable_data());
160 auto global_executor = std::make_unique<MockGeoGlobalExecutor>(
161 std::make_unique<MockTransactionExecutorImpl>(), config);
162 auto commitment = std::make_unique<GeoPBFTCommitment>(
163 std::move(global_executor), config, std::move(system_info),
164 &replica_client,
nullptr);
165 EXPECT_EQ(commitment->GeoProcessCcm(std::move(context),
166 std::make_unique<Request>(request)),
169 request.mutable_region_info()->set_region_id(1);
170 auto context_2 = std::make_unique<Context>();
171 context_2->signature.set_signature(
"signature");
172 EXPECT_EQ(commitment->GeoProcessCcm(std::move(context_2),
173 std::make_unique<Request>(request)),
175 LOG(ERROR) <<
"done";
178TEST(GeoCommitTest, NoCert) {
179 ResConfigData config_data = ResConfigData();
180 config_data.set_self_region_id(1);
181 std::vector<ReplicaInfo> replicas = {
186 ResDBConfig config = ResDBConfig(
188 auto system_info = std::make_unique<SystemInfo>(config);
189 MockResDBReplicaClient replica_client;
190 std::unique_ptr<MockGeoGlobalExecutor> global_executor;
191 std::unique_ptr<GeoPBFTCommitment> commitment;
193 auto context = std::make_unique<Context>();
194 context->signature.set_signature(
"signature");
197 request.mutable_region_info()->set_region_id(2);
199 BatchClientRequest client_request;
200 client_request.SerializeToString(request.mutable_data());
202 MockSignatureVerifier verifier;
205 global_executor = std::make_unique<MockGeoGlobalExecutor>(
206 std::make_unique<MockTransactionExecutorImpl>(), config);
207 commitment = std::make_unique<GeoPBFTCommitment>(
208 std::move(global_executor), config, std::move(system_info),
209 &replica_client, &verifier);
210 EXPECT_EQ(commitment->GeoProcessCcm(std::move(context),
211 std::make_unique<Request>(request)),
T ParseFromText(const std::string &json_str)
ReplicaInfo GenerateReplicaInfo(int id, const std::string &ip, int port)
TEST(NetworkUtilsTest, GetDNSName)