Loading...
Searching...
No Matches
net_channel_test.cpp
Go to the documentation of this file.
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19
21
22#include <gtest/gtest.h>
23
26#include "platform/proto/client_test.pb.h"
27
28namespace resdb {
29namespace {
30
31using ::testing::Invoke;
32using ::testing::Return;
33using ::testing::Test;
34
35class NetChannelTest : public Test {
36 protected:
37 ResDBMessage GetSendPackage(const google::protobuf::Message& message,
38 Request::Type type) {
39 ResDBMessage resdb_message;
40 Request request;
41 request.set_type(type);
42 EXPECT_TRUE(message.SerializeToString(request.mutable_data()));
43 EXPECT_TRUE(request.SerializeToString(resdb_message.mutable_data()));
44 return resdb_message;
45 }
46
47 std::string GetSendPackageString(const google::protobuf::Message& message,
48 Request::Type type) {
49 ResDBMessage resdb_message = GetSendPackage(message, type);
50 std::string data;
51 EXPECT_TRUE(resdb_message.SerializeToString(&data));
52 return data;
53 }
54
55 ResDBMessage GetSendPackage(const google::protobuf::Message& message) {
56 ResDBMessage resdb_message;
57 EXPECT_TRUE(message.SerializeToString(resdb_message.mutable_data()));
58 return resdb_message;
59 }
60
61 std::string GetSendPackageString(const google::protobuf::Message& message) {
62 ResDBMessage resdb_message = GetSendPackage(message);
63 std::string data;
64 EXPECT_TRUE(resdb_message.SerializeToString(&data));
65 return data;
66 }
67};
68
69TEST_F(NetChannelTest, ClientConnectFail) {
70 std::unique_ptr<MockSocket> socket = std::make_unique<MockSocket>();
71 EXPECT_CALL(*socket, Connect("127.0.0.1", 1234))
72 .Times(3)
73 .WillRepeatedly(Return(-1));
74 NetChannel client("127.0.0.1", 1234);
75
76 client.SetSocket(std::move(socket));
77
78 ClientTestRequest client_request;
79 std::string data;
80 ASSERT_TRUE(client_request.SerializeToString(&data));
81 int ret = client.SendRawMessage(client_request);
82 EXPECT_LE(ret, 0);
83}
84
85TEST_F(NetChannelTest, KeepAliveAndAsyncReConnect) {
86 std::unique_ptr<MockSocket> socket = std::make_unique<MockSocket>();
87 EXPECT_CALL(*socket, Connect("127.0.0.1", 1234))
88 .Times(3)
89 .WillRepeatedly(Return(-1));
90
91 EXPECT_CALL(*socket, SetAsync(true)).Times(3).WillRepeatedly(Return(0));
92
93 NetChannel client("127.0.0.1", 1234);
94 client.SetAsyncSend(true);
95 client.IsLongConnection(true);
96
97 client.SetSocket(std::move(socket));
98
99 ClientTestRequest client_request;
100 std::string data;
101 ASSERT_TRUE(client_request.SerializeToString(&data));
102 int ret = client.SendRawMessage(client_request);
103 EXPECT_LE(ret, 0);
104}
105
106TEST_F(NetChannelTest, SendRequest) {
107 std::string data = "test_data";
108
109 ClientTestRequest client_request;
110 client_request.set_value("test_value");
111
112 std::string expected_request_str =
113 GetSendPackageString(client_request, Request::TYPE_CLIENT_REQUEST);
114
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));
118
119 NetChannel client("127.0.0.1", 1234);
120 client.SetSocket(std::move(socket));
121 client.SetSignatureVerifier(nullptr);
122
123 int ret = client.SendRequest(client_request, Request::TYPE_CLIENT_REQUEST);
124 EXPECT_EQ(ret, 0);
125}
126
127TEST_F(NetChannelTest, SendRequestFail) {
128 std::string data = "test_data";
129
130 ClientTestRequest client_request;
131 client_request.set_value("test_value");
132
133 std::string expected_request_str =
134 GetSendPackageString(client_request, Request::TYPE_CLIENT_REQUEST);
135
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))
140 .Times(3)
141 .WillRepeatedly(Return(-1));
142
143 NetChannel client("127.0.0.1", 1234);
144 client.SetSocket(std::move(socket));
145 client.SetSignatureVerifier(nullptr);
146
147 int ret = client.SendRequest(client_request, Request::TYPE_CLIENT_REQUEST);
148 EXPECT_NE(ret, 0);
149}
150
151TEST_F(NetChannelTest, SendMessage) {
152 ClientTestRequest client_request;
153 client_request.set_value("test_value");
154
155 std::string data = GetSendPackageString(client_request);
156
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));
160
161 NetChannel client("127.0.0.1", 1234);
162 client.SetSocket(std::move(socket));
163 client.SetSignatureVerifier(nullptr);
164
165 EXPECT_EQ(client.SendRawMessage(client_request), 0);
166}
167
168TEST_F(NetChannelTest, SignMessage) {
169 SecretKey my_key = KeyGenerator ::GeneratorKeys(SignatureInfo::RSA);
170 int64_t my_node_id = 1;
171
172 KeyInfo private_key;
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()
179 ->mutable_key()
180 ->set_key(my_key.public_key());
181 cert_info.mutable_public_key()
182 ->mutable_public_key_info()
183 ->mutable_key()
184 ->set_hash_type(my_key.hash_type());
185 cert_info.mutable_public_key()->mutable_public_key_info()->set_node_id(
186 my_node_id);
187
188 SignatureVerifier verifier(private_key, cert_info);
189
190 ClientTestRequest client_request;
191 client_request.set_value("test_value");
192
193 std::string data = GetSendPackageString(client_request);
194
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()));
202 return 0;
203 }));
204
205 NetChannel client("127.0.0.1", 1234);
206 client.SetSocket(std::move(socket));
207 client.SetSignatureVerifier(&verifier);
208
209 EXPECT_EQ(client.SendRawMessage(client_request), 0);
210}
211
212} // namespace
213
214} // namespace resdb
std::string data
TEST_F(ResDBTest, TestPBFTService)