0
0
mirror of https://github.com/OpenVPN/openvpn3.git synced 2024-09-20 12:12:15 +02:00

add unit test for RemoteList traversal

Test that all addresses added from the resolver results are tried,
when iterating through the RemoteList with next().

Signed-off-by: Heiko Hund <heiko@openvpn.net>
This commit is contained in:
Heiko Hund 2021-08-17 22:25:28 +02:00
parent d998a438da
commit f60a9f1826

View File

@ -233,6 +233,62 @@ TEST(RemoteList, CtorRemoteListBlockLimit)
}
TEST(RemoteList, ListTraversal)
{
OptionList cfg;
cfg.parse_from_config(
"remote 1.domain.tld 1111 udp\n"
"remote 2.domain.tld 2222 udp\n"
, nullptr);
cfg.update_map();
using ResultsType = openvpn_io::ip::tcp::resolver::results_type;
using EndpointType = ResultsType::endpoint_type;
using EndpointList = std::vector<EndpointType>;
std::string addr;
std::string port;
Protocol proto;
RemoteList::Ptr rl(new RemoteList(cfg, "", 0, nullptr, nullptr));
bool available = rl->endpoint_available(&addr, &port, &proto);
ASSERT_EQ(available, false);
ASSERT_EQ(addr, "1.domain.tld");
// Create fake resolver results and feed them into RemoteList
EndpointType ep;
EndpointList epl;
epl.push_back({ openvpn_io::ip::make_address("1.1.1.1"), 1111 });
epl.push_back({ openvpn_io::ip::make_address("1.1.1.11"), 1111 });
epl.push_back({ openvpn_io::ip::make_address("1::1"), 1111 });
ResultsType results(ResultsType::create(epl.cbegin(), epl.cend(), addr, port));
rl->set_endpoint_range(results);
// Iterate through results
available = rl->endpoint_available(&addr, &port, &proto);
ASSERT_EQ(available, true);
ASSERT_EQ(addr, "1.domain.tld");
ASSERT_NO_THROW(rl->get_endpoint(ep));
ASSERT_EQ(ep.address().to_string(), "1.1.1.1");
rl->next();
ASSERT_NO_THROW(rl->get_endpoint(ep));
ASSERT_EQ(ep.address().to_string(), "1.1.1.11");
rl->next();
ASSERT_NO_THROW(rl->get_endpoint(ep));
ASSERT_EQ(ep.address().to_string(), "1::1");
rl->next();
available = rl->endpoint_available(&addr, &port, &proto);
ASSERT_EQ(available, false);
ASSERT_EQ(addr, "2.domain.tld");
rl->next();
available = rl->endpoint_available(&addr, &port, &proto);
ASSERT_EQ(available, false);
ASSERT_EQ(addr, "1.domain.tld");
}
TEST(RemoteList, RemoteListPreResolve)
{
OptionList cfg;