add unittest

This commit is contained in:
liyingxin
2022-05-26 23:20:22 +08:00
parent 63d74cc7ab
commit 9e3bed7616

View File

@@ -79,6 +79,10 @@ void register_upstream_hosts()
UpstreamManager::upstream_add_server("manual", "127.0.0.1:8001");
UpstreamManager::upstream_add_server("manual", "127.0.0.1:8002");
UpstreamManager::upstream_create_round_robin("round.robin", true);
UpstreamManager::upstream_add_server("round.robin", "127.0.0.1:8001");
UpstreamManager::upstream_add_server("round.robin", "127.0.0.1:8002");
UpstreamManager::upstream_create_manual(
"try_another",
[](const char *path, const char *query, const char *fragment) -> unsigned int {
@@ -121,26 +125,42 @@ void basic_callback(WFHttpTask *task, std::string& message)
TEST(upstream_unittest, BasicPolicy)
{
WFFacilities::WaitGroup wait_group(3);
WFFacilities::WaitGroup wait_group(5);
WFHttpTask *task1;
WFHttpTask *task2;
char url[3][30] = {"http://weighted.random", "http://manual", "http://hash"};
char url[4][30] = {"http://weighted.random", "http://manual",
"http://hash", "http://round.robin"};
http_callback_t cb1 = std::bind(basic_callback, std::placeholders::_1,
std::string("server1"));
for (int i = 0; i < 2; i++)
{
WFHttpTask *task = WFTaskFactory::create_http_task(url[i],
REDIRECT_MAX, RETRY_MAX, cb1);
task->user_data = &wait_group;
task->start();
task1 = WFTaskFactory::create_http_task(url[i], REDIRECT_MAX,
RETRY_MAX, cb1);
task1->user_data = &wait_group;
task1->start();
}
http_callback_t cb2 = std::bind(basic_callback, std::placeholders::_1,
std::string("server2"));
WFHttpTask *task = WFTaskFactory::create_http_task(url[2],
REDIRECT_MAX, RETRY_MAX, cb2);
task->user_data = &wait_group;
task->start();
task2 = WFTaskFactory::create_http_task(url[2], REDIRECT_MAX,
RETRY_MAX, cb2);
task2->user_data = &wait_group;
task2->start();
task1 = WFTaskFactory::create_http_task(url[3], REDIRECT_MAX,
RETRY_MAX, cb1);
task1->user_data = &wait_group;
task2 = WFTaskFactory::create_http_task(url[3], REDIRECT_MAX,
RETRY_MAX, cb2);
task2->user_data = &wait_group;
SeriesWork *series = Workflow::create_series_work(task1, nullptr);
series->push_back(task2);
series->start();
wait_group.wait();
}
@@ -153,7 +173,7 @@ TEST(upstream_unittest, EnableAndDisable)
std::string url = "http://weighted.random";
WFHttpTask *task = WFTaskFactory::create_http_task(url, REDIRECT_MAX, RETRY_MAX,
[&wait_group, &url](WFHttpTask *task){
[&wait_group, &url](WFHttpTask *task){
int state = task->get_state();
EXPECT_EQ(state, WFT_STATE_TASK_ERROR);
EXPECT_EQ(task->get_error(), WFT_ERR_UPSTREAM_UNAVAILABLE);
@@ -299,19 +319,27 @@ TEST(upstream_unittest, FuseAndRecover)
TEST(upstream_unittest, TryAnother)
{
WFFacilities::WaitGroup wait_group(2);
WFFacilities::WaitGroup wait_group(3);
UpstreamManager::upstream_disable_server("manual", "127.0.0.1:8001");
UpstreamManager::upstream_disable_server("round.robin", "127.0.0.1:8001");
UpstreamManager::upstream_disable_server("try_another", "127.0.0.1:8001");
http_callback_t cb2 = std::bind(basic_callback, std::placeholders::_1,
std::string("server2"));
WFHttpTask *task = WFTaskFactory::create_http_task("http://manual",
REDIRECT_MAX, RETRY_MAX,
std::bind(basic_callback,
std::placeholders::_1,
std::string("server2")));
cb2);
task->user_data = &wait_group;
task->start();
// this->cur_idx == 1. Will skip 8001 and try 8002.
task = WFTaskFactory::create_http_task("http://round.robin",
REDIRECT_MAX, RETRY_MAX, cb2);
task->user_data = &wait_group;
task->start();
task = WFTaskFactory::create_http_task("http://try_another",
REDIRECT_MAX, RETRY_MAX,
[&wait_group](WFHttpTask *task){
@@ -324,6 +352,7 @@ TEST(upstream_unittest, TryAnother)
wait_group.wait();
UpstreamManager::upstream_enable_server("manual", "127.0.0.1:8001");
UpstreamManager::upstream_enable_server("round.robin", "127.0.0.1:8001");
UpstreamManager::upstream_enable_server("try_another", "127.0.0.1:8001");
}
@@ -361,6 +390,25 @@ TEST(upstream_unittest, Tracing)
UpstreamManager::upstream_enable_server("test_tracing", "127.0.0.1:8003");
}
TEST(upstream_unittest, RoundRobin)
{
WFFacilities::WaitGroup wait_group(1);
// this->cur_idx = 0. When 8002 is removed, we will try 8001.
UpstreamManager::upstream_remove_server("round.robin", "127.0.0.1:8002");
WFHttpTask *task = WFTaskFactory::create_http_task("http://round.robin",
REDIRECT_MAX, RETRY_MAX,
std::bind(basic_callback,
std::placeholders::_1,
std::string("server1")));
task->user_data = &wait_group;
task->start();
wait_group.wait();
UpstreamManager::upstream_add_server("round.robin", "127.0.0.1:8002");
}
int main(int argc, char* argv[])
{
::testing::InitGoogleTest(&argc, argv);