22#include <gtest/gtest.h>
26#include "platform/proto/client_test.pb.h"
31using ::testing::Invoke;
32using ::testing::Return;
35class NetChannelTest :
public Test {
37 ResDBMessage GetSendPackage(
const google::protobuf::Message& message,
39 ResDBMessage resdb_message;
41 request.set_type(type);
42 EXPECT_TRUE(message.SerializeToString(request.mutable_data()));
43 EXPECT_TRUE(request.SerializeToString(resdb_message.mutable_data()));
47 std::string GetSendPackageString(
const google::protobuf::Message& message,
49 ResDBMessage resdb_message = GetSendPackage(message, type);
51 EXPECT_TRUE(resdb_message.SerializeToString(&
data));
55 ResDBMessage GetSendPackage(
const google::protobuf::Message& message) {
56 ResDBMessage resdb_message;
57 EXPECT_TRUE(message.SerializeToString(resdb_message.mutable_data()));
61 std::string GetSendPackageString(
const google::protobuf::Message& message) {
62 ResDBMessage resdb_message = GetSendPackage(message);
64 EXPECT_TRUE(resdb_message.SerializeToString(&
data));
69TEST_F(NetChannelTest, ClientConnectFail) {
70 std::unique_ptr<MockSocket> socket = std::make_unique<MockSocket>();
71 EXPECT_CALL(*socket, Connect(
"127.0.0.1", 1234))
73 .WillRepeatedly(Return(-1));
74 NetChannel client(
"127.0.0.1", 1234);
76 client.SetSocket(std::move(socket));
78 ClientTestRequest client_request;
80 ASSERT_TRUE(client_request.SerializeToString(&
data));
81 int ret = client.SendRawMessage(client_request);
85TEST_F(NetChannelTest, KeepAliveAndAsyncReConnect) {
86 std::unique_ptr<MockSocket> socket = std::make_unique<MockSocket>();
87 EXPECT_CALL(*socket, Connect(
"127.0.0.1", 1234))
89 .WillRepeatedly(Return(-1));
91 EXPECT_CALL(*socket, SetAsync(
true)).Times(3).WillRepeatedly(Return(0));
93 NetChannel client(
"127.0.0.1", 1234);
94 client.SetAsyncSend(
true);
95 client.IsLongConnection(
true);
97 client.SetSocket(std::move(socket));
99 ClientTestRequest client_request;
101 ASSERT_TRUE(client_request.SerializeToString(&
data));
102 int ret = client.SendRawMessage(client_request);
106TEST_F(NetChannelTest, SendRequest) {
107 std::string
data =
"test_data";
109 ClientTestRequest client_request;
110 client_request.set_value(
"test_value");
112 std::string expected_request_str =
113 GetSendPackageString(client_request, Request::TYPE_CLIENT_REQUEST);
115 std::unique_ptr<MockSocket> socket = std::make_unique<MockSocket>();
116 EXPECT_CALL(*socket, Connect(
"127.0.0.1", 1234)).WillOnce(Return(0));
117 EXPECT_CALL(*socket, Send(expected_request_str)).WillOnce(Return(0));
119 NetChannel client(
"127.0.0.1", 1234);
120 client.SetSocket(std::move(socket));
121 client.SetSignatureVerifier(
nullptr);
123 int ret = client.SendRequest(client_request, Request::TYPE_CLIENT_REQUEST);
127TEST_F(NetChannelTest, SendRequestFail) {
128 std::string
data =
"test_data";
130 ClientTestRequest client_request;
131 client_request.set_value(
"test_value");
133 std::string expected_request_str =
134 GetSendPackageString(client_request, Request::TYPE_CLIENT_REQUEST);
136 std::unique_ptr<MockSocket> socket = std::make_unique<MockSocket>();
137 EXPECT_CALL(*socket, ReInit()).Times(3);
138 EXPECT_CALL(*socket, Connect(
"127.0.0.1", 1234)).Times(3).WillOnce(Return(0));
139 EXPECT_CALL(*socket, Send(expected_request_str))
141 .WillRepeatedly(Return(-1));
143 NetChannel client(
"127.0.0.1", 1234);
144 client.SetSocket(std::move(socket));
145 client.SetSignatureVerifier(
nullptr);
147 int ret = client.SendRequest(client_request, Request::TYPE_CLIENT_REQUEST);
151TEST_F(NetChannelTest, SendMessage) {
152 ClientTestRequest client_request;
153 client_request.set_value(
"test_value");
155 std::string
data = GetSendPackageString(client_request);
157 std::unique_ptr<MockSocket> socket = std::make_unique<MockSocket>();
158 EXPECT_CALL(*socket, Connect(
"127.0.0.1", 1234)).WillOnce(Return(0));
159 EXPECT_CALL(*socket, Send(
data)).WillOnce(Return(0));
161 NetChannel client(
"127.0.0.1", 1234);
162 client.SetSocket(std::move(socket));
163 client.SetSignatureVerifier(
nullptr);
165 EXPECT_EQ(client.SendRawMessage(client_request), 0);
168TEST_F(NetChannelTest, SignMessage) {
169 SecretKey my_key = KeyGenerator ::GeneratorKeys(SignatureInfo::RSA);
170 int64_t my_node_id = 1;
173 private_key.set_key(my_key.private_key());
174 private_key.set_hash_type(my_key.hash_type());
175 CertificateInfo cert_info;
176 cert_info.set_node_id(my_node_id);
177 cert_info.mutable_public_key()
178 ->mutable_public_key_info()
180 ->set_key(my_key.public_key());
181 cert_info.mutable_public_key()
182 ->mutable_public_key_info()
184 ->set_hash_type(my_key.hash_type());
185 cert_info.mutable_public_key()->mutable_public_key_info()->set_node_id(
188 SignatureVerifier verifier(private_key, cert_info);
190 ClientTestRequest client_request;
191 client_request.set_value(
"test_value");
193 std::string
data = GetSendPackageString(client_request);
195 std::unique_ptr<MockSocket> socket = std::make_unique<MockSocket>();
196 EXPECT_CALL(*socket, Connect(
"127.0.0.1", 1234)).WillOnce(Return(0));
197 EXPECT_CALL(*socket, Send).WillOnce(Invoke([&](
const std::string&
data) {
198 ResDBMessage resdb_message;
199 EXPECT_TRUE(resdb_message.ParseFromString(
data));
200 EXPECT_TRUE(verifier.VerifyMessage(resdb_message.data(),
201 resdb_message.signature()));
205 NetChannel client(
"127.0.0.1", 1234);
206 client.SetSocket(std::move(socket));
207 client.SetSignatureVerifier(&verifier);
209 EXPECT_EQ(client.SendRawMessage(client_request), 0);
TEST_F(ResDBTest, TestPBFTService)