blob: 3aef9dfdd6b8dc089a91b314f3d41eefd85eaa84 [file] [log] [blame]
#include "DynamicNameServerResolver.h"
#include <chrono>
#include <map>
#include <memory>
#include "absl/memory/memory.h"
#include "absl/strings/str_join.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include <string>
#include "HttpClientMock.h"
ROCKETMQ_NAMESPACE_BEGIN
class DynamicNameServerResolverTest : public testing::Test {
public:
DynamicNameServerResolverTest()
: resolver_(std::make_shared<DynamicNameServerResolver>(endpoint_, std::chrono::seconds(1))) {
}
void SetUp() override {
auto http_client = absl::make_unique<testing::NiceMock<HttpClientMock>>();
auto callback =
[this](HttpProtocol, const std::string&, std::uint16_t, const std::string&,
const std::function<void(int, const std::multimap<std::string, std::string>&, const std::string&)>& cb) {
int code = 200;
std::multimap<std::string, std::string> headers;
cb(code, headers, name_server_list_);
};
ON_CALL(*http_client, get).WillByDefault(testing::Invoke(callback));
resolver_->injectHttpClient(std::move(http_client));
resolver_->start();
}
void TearDown() override {
resolver_->shutdown();
}
protected:
std::string endpoint_{"http://jmenv.tbsite.net:8080/rocketmq/nsaddr"};
std::string name_server_list_{"10.0.0.0:9876;10.0.0.1:9876"};
std::shared_ptr<DynamicNameServerResolver> resolver_;
};
TEST_F(DynamicNameServerResolverTest, testResolve) {
auto name_server_list = resolver_->resolve();
ASSERT_FALSE(name_server_list.empty());
std::string resolved = absl::StrJoin(name_server_list, ";");
ASSERT_EQ(name_server_list_, resolved);
std::string first{"10.0.0.0:9876"};
EXPECT_EQ(first, resolver_->current());
std::string second{"10.0.0.1:9876"};
EXPECT_EQ(second, resolver_->next());
}
ROCKETMQ_NAMESPACE_END