22#include <glog/logging.h>
23#include <gtest/gtest.h>
31using ::google::protobuf::util::MessageDifferencer;
32using ::testing::ElementsAre;
33using ::testing::Invoke;
36void AddReplicaToList(
const std::string& ip,
int port,
37 std::vector<ReplicaInfo>* replica) {
41 replica->push_back(info);
44class MockResDBStateAccessor :
public ResDBStateAccessor {
46 MockResDBStateAccessor(
const ResDBConfig& config)
47 : ResDBStateAccessor(config) {}
49 MOCK_METHOD(std::unique_ptr<NetChannel>, GetNetChannel,
50 (
const std::string&,
int), (
override));
53class StateClientTest :
public Test {
59 AddReplicaToList(
"127.0.0.1", 1235, &replicas_);
60 AddReplicaToList(
"127.0.0.1", 1236, &replicas_);
61 AddReplicaToList(
"127.0.0.1", 1237, &replicas_);
62 AddReplicaToList(
"127.0.0.1", 1238, &replicas_);
65 private_key.set_key(
"private_key");
66 config_ = std::make_unique<ResDBConfig>(replicas_, self_info_, private_key,
76TEST_F(StateClientTest, GetAllReplicaState) {
77 MockResDBStateAccessor client(*
config_);
80 auto region = state.mutable_replica_config()->add_region();
83 *region->add_replica_info() = replica;
86 std::atomic<int> idx = 0;
87 EXPECT_CALL(client, GetNetChannel)
89 .WillRepeatedly(Invoke([&](
const std::string& ip,
int port) {
90 auto client = std::make_unique<MockNetChannel>(ip, port);
91 EXPECT_CALL(*client, RecvRawMessage)
92 .WillRepeatedly(Invoke([&](google::protobuf::Message* message) {
93 *
reinterpret_cast<ReplicaState*
>(message) = state;
98 auto ret = client.GetReplicaStates();
99 EXPECT_TRUE(ret.ok());
100 std::set<int> results;
101 for (
auto& state : *ret) {
102 auto it = std::find_if(
104 return MessageDifferencer::Equals(info, state.replica_info());
109 EXPECT_EQ(results.size(), 4);
TEST_F(ResDBTest, TestPBFTService)
std::vector< ReplicaInfo > replicas_
std::unique_ptr< ResDBConfig > config_