20#include <glog/logging.h>
21#include <gmock/gmock.h>
22#include <gtest/gtest.h>
31#include "platform/test/proto/resdb_test.pb.h"
35using ::testing::ElementsAreArray;
38const std::string
test_dir = std::string(getenv(
"TEST_SRCDIR")) +
"/" +
39 std::string(getenv(
"TEST_WORKSPACE")) +
49 TestResponse response;
60 std::unique_ptr<std::string>
ExecuteData(
const std::string& request) {
61 TestRequest test_request;
63 if (!test_request.ParseFromString(request)) {
64 LOG(ERROR) <<
"parse data fail";
67 seqs_.push_back(test_request.seq());
82 auto executor = std::make_unique<ResDBTestManager>(config);
84 server_.push_back(std::make_unique<ServiceNetwork>(
86 std::make_unique<ConsensusManagerPBFT>(config, std::move(executor))));
94 std::unique_lock<std::mutex> lk(
mutex_);
95 cv_.wait_for(lk, std::chrono::microseconds(1000),
96 [&] {
return server->ServiceIsReady(); });
97 if (server->ServiceIsReady()) {
106 while (
static_cast<int>(executor->GetSeqs().size()) < received_num) {
123 return test_dir + std::string(
"test_data/node") + std::to_string(
id) +
128 return test_dir + std::string(
"test_data/cert_") + std::to_string(
id) +
135 int id, std::optional<ReplicaInfo> replica_info = std::nullopt) {
142 std::condition_variable
cv_;
144 std::vector<std::unique_ptr<ServiceNetwork>>
server_;
149 for (
int i = 1; i <= 4; ++i) {
152 WaitAllServerStarted();
155 auto config = GetConfig(client_id, client_info);
157 EXPECT_EQ(client.
Set(1), 0);
161 for (
auto executor : executors_) {
162 EXPECT_THAT(executor->GetSeqs(), ElementsAreArray({1}));
ResDBTestClient(const ResDBConfig &config)
ResDBTestManager(const ResDBConfig &config)
std::vector< int > GetSeqs()
std::unique_ptr< std::string > ExecuteData(const std::string &request)
void WaitAllServerStarted()
std::vector< ResDBTestManager * > executors_
std::vector< std::thread > server_thread_
std::condition_variable cv_
std::string GetCertFile(int id)
std::string GetConfiFile()
void StartOneServer(int server_id)
std::string GetPrivateKey(int id)
std::vector< std::unique_ptr< ServiceNetwork > > server_
void WaitExecutorDone(int received_num)
ResDBConfig GetConfig(int id, std::optional< ReplicaInfo > replica_info=std::nullopt)
int SendRequest(const google::protobuf::Message &message, Request::Type type=Request::TYPE_CLIENT_REQUEST)
const std::string test_dir
ReplicaInfo GenerateReplicaInfo(int id, const std::string &ip, int port)
std::unique_ptr< ResDBConfig > GenerateResDBConfig(const std::string &config_file, const std::string &private_key_file, const std::string &cert_file, std::optional< ReplicaInfo > self_info, std::optional< ConfigGenFunc > gen_func)
TEST_F(ResDBTest, TestPBFTService)