22#include <glog/logging.h>
23#include <gtest/gtest.h>
28#include "platform/proto/client_test.pb.h"
33using ::resdb::testing::EqualsProto;
35using ::testing::Invoke;
36using ::testing::Return;
39std::string GenerateRequestData(
const ClientTestRequest& client_request,
40 bool need_resp =
false) {
44 request.set_type(Request::TYPE_CLIENT_REQUEST);
45 request.set_need_response(need_resp);
46 client_request.SerializeToString(request.mutable_data());
47 request.SerializeToString(message.mutable_data());
49 std::string request_data;
50 message.SerializeToString(&request_data);
55std::string GenerateResponseData(
const ClientTestResponse& client_responses) {
56 std::string response_data;
57 client_responses.SerializeToString(&response_data);
61class UserClientTest :
public Test {
72 private_key.set_key(
"private_key");
73 config_ = std::make_unique<ResDBConfig>(replicas_, self_info_, private_key,
75 config_->SetClientTimeoutMs(10000);
85TEST_F(UserClientTest, OnlySendRequestOK) {
86 ClientTestRequest client_request;
87 client_request.set_value(
"test_value");
89 std::unique_ptr<MockSocket> socket = std::make_unique<MockSocket>();
92 EXPECT_CALL(*socket, Send(GenerateRequestData(client_request)))
94 EXPECT_CALL(*socket, Recv(_, _)).Times(0);
96 TransactionConstructor client(*
config_);
97 client.SetSocket(std::move(socket));
98 client.SetSignatureVerifier(
nullptr);
100 int ret = client.SendRequest(client_request, Request::TYPE_CLIENT_REQUEST);
104TEST_F(UserClientTest, GetResponse) {
105 ClientTestRequest client_request;
106 client_request.set_value(
"test_value");
108 ClientTestResponse client_response, expected_response;
109 expected_response.set_value(
"ack");
111 std::unique_ptr<MockSocket> socket = std::make_unique<MockSocket>();
113 .WillOnce(Return(0));
114 EXPECT_CALL(*socket, Send(GenerateRequestData(client_request,
true)))
115 .WillOnce(Return(0));
116 EXPECT_CALL(*socket, Recv(_, _))
117 .WillOnce(Invoke([&](
void** buf,
size_t* len) {
118 ClientTestResponse response;
119 response.set_value(
"ack");
121 std::string resp_str = GenerateResponseData(response);
123 *len = resp_str.size();
125 memcpy(*buf, resp_str.c_str(), *len);
129 TransactionConstructor client(*
config_);
130 client.SetSocket(std::move(socket));
131 EXPECT_EQ(client.SendRequest(client_request, &client_response,
132 Request::TYPE_CLIENT_REQUEST),
134 EXPECT_THAT(client_response, EqualsProto(expected_response));
137TEST_F(UserClientTest, RecvResponseFail) {
138 ClientTestRequest client_request;
139 client_request.set_value(
"test_value");
141 ClientTestResponse client_response;
143 std::unique_ptr<MockSocket> socket = std::make_unique<MockSocket>();
145 .WillOnce(Return(0));
146 EXPECT_CALL(*socket, Send(GenerateRequestData(client_request,
true)))
147 .WillOnce(Return(0));
148 EXPECT_CALL(*socket, Recv(_, _)).WillOnce(Return(-1));
150 TransactionConstructor client(*
config_);
151 client.SetSocket(std::move(socket));
153 EXPECT_NE(client.SendRequest(client_request, &client_response,
154 Request::TYPE_CLIENT_REQUEST),
TEST_F(ResDBTest, TestPBFTService)
std::vector< ReplicaInfo > replicas_
std::unique_ptr< ResDBConfig > config_