22#include <gtest/gtest.h>
33using ::testing::Invoke;
34using ::testing::Return;
37 ReplicaInfo replica_info;
38 replica_info.set_ip(ip);
39 replica_info.set_port(port);
43class MockReplicaCommunicator :
public ReplicaCommunicator {
46 bool use_lonn_conn =
false)
54TEST(ReplicaCommunicatorTest, SendMessage) {
55 std::vector<ReplicaInfo> replicas;
59 MockReplicaCommunicator client(replicas);
60 EXPECT_CALL(client, GetClient(
"127.0.0.1", 1234))
61 .WillOnce(Invoke([&](
const std::string& ip,
int port) {
62 return std::make_unique<MockNetChannel>(ip, port);
64 EXPECT_CALL(client, GetClient(
"127.0.0.1", 1235))
65 .WillOnce(Invoke([&](
const std::string& ip,
int port) {
66 return std::make_unique<MockNetChannel>(ip, port);
69 Request expected_request;
70 expected_request.set_type(Request::TYPE_HEART_BEAT);
71 EXPECT_EQ(client.SendMessage(expected_request), 2);
74TEST(ReplicaCommunicatorTest, SendMessageToClient) {
75 std::vector<ReplicaInfo> replicas;
79 MockReplicaCommunicator client(replicas);
81 std::vector<ReplicaInfo> client_replicas;
83 client_replicas.back().set_id(3);
85 client.UpdateClientReplicas(client_replicas);
87 EXPECT_CALL(client, GetClient(
"127.0.0.1", 1236))
88 .WillOnce(Invoke([&](
const std::string& ip,
int port) {
89 return std::make_unique<MockNetChannel>(ip, port);
92 Request expected_request;
93 expected_request.set_type(Request::TYPE_HEART_BEAT);
94 client.SendMessage(expected_request, 3);
97TEST(ReplicaCommunicatorTest, PartialSendMessage) {
98 std::vector<ReplicaInfo> replicas;
102 MockReplicaCommunicator client(replicas);
103 EXPECT_CALL(client, GetClient(
"127.0.0.1", 1234))
104 .WillOnce(Invoke([&](
const std::string& ip,
int port) {
105 return std::make_unique<MockNetChannel>(ip, port);
107 EXPECT_CALL(client, GetClient(
"127.0.0.1", 1235))
109 Invoke([&](
const std::string& ip,
int port) {
return nullptr; }));
111 Request expected_request;
112 expected_request.set_type(Request::TYPE_HEART_BEAT);
113 EXPECT_EQ(client.SendMessage(expected_request), 1);
116TEST(ReplicaCommunicatorTest, Lonnconnection) {
117 std::promise<bool> bc;
118 std::future<bool> bc_done = bc.get_future();
119 std::vector<ReplicaInfo> replicas;
122 boost::asio::io_service io_service;
123 auto resdb_client = std::make_unique<MockAsyncReplicaClient>(&io_service);
124 MockReplicaCommunicator client(replicas,
true);
125 EXPECT_CALL(client, GetClientFromPool(
"127.0.0.1", 1234))
126 .WillOnce(Invoke([&](
const std::string& ip,
int port) {
128 return resdb_client.get();
131 Request expected_request;
132 expected_request.set_type(Request::TYPE_HEART_BEAT);
133 EXPECT_EQ(client.SendMessage(expected_request), 0);
MockReplicaCommunicator()
MOCK_METHOD(int, SendHeartBeat,(const Request &),(override))
ReplicaCommunicator(const std::vector< ReplicaInfo > &replicas, SignatureVerifier *verifier=nullptr, bool is_use_long_conn=false, int epoll_num=1, int tcp_batch=100)
virtual std::unique_ptr< NetChannel > GetClient(const std::string &ip, int port)
virtual AsyncReplicaClient * GetClientFromPool(const std::string &ip, int port)
ReplicaInfo GenerateReplicaInfo(int id, const std::string &ip, int port)
TEST(NetworkUtilsTest, GetDNSName)