From 690a9c40b24792cb66b15e8d1f1ae827c3500304 Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Wed, 29 Sep 2021 10:07:51 +0200 Subject: [PATCH] dnsdist: Fix the unit tests to handle v4-only or v6-only connectivity --- pdns/dnsdistdist/dnsdist-tcp.hh | 4 + pdns/dnsdistdist/test-dnsdistlbpolicies_cc.cc | 34 ++-- pdns/dnsdistdist/test-dnsdistnghttp2_cc.cc | 85 ++++++---- pdns/dnsdistdist/test-dnsdisttcp_cc.cc | 146 +++++++++++------- 4 files changed, 168 insertions(+), 101 deletions(-) diff --git a/pdns/dnsdistdist/dnsdist-tcp.hh b/pdns/dnsdistdist/dnsdist-tcp.hh index 4588755a35..5294988065 100644 --- a/pdns/dnsdistdist/dnsdist-tcp.hh +++ b/pdns/dnsdistdist/dnsdist-tcp.hh @@ -31,6 +31,10 @@ struct ConnectionInfo cs(cs_), fd(-1) { } + ConnectionInfo(ClientState* cs_, const ComboAddress remote_) : + remote(remote_), cs(cs_), fd(-1) + { + } ConnectionInfo(ConnectionInfo&& rhs) : remote(rhs.remote), cs(rhs.cs), fd(rhs.fd) { diff --git a/pdns/dnsdistdist/test-dnsdistlbpolicies_cc.cc b/pdns/dnsdistdist/test-dnsdistlbpolicies_cc.cc index d1f5080836..3f2de86571 100644 --- a/pdns/dnsdistdist/test-dnsdistlbpolicies_cc.cc +++ b/pdns/dnsdistdist/test-dnsdistlbpolicies_cc.cc @@ -120,7 +120,7 @@ static void benchPolicy(const ServerPolicy& pol) } ServerPolicy::NumberedServerVector servers; for (size_t idx = 1; idx <= 10; idx++) { - servers.push_back({ idx, std::make_shared(ComboAddress("192.0.2." + std::to_string(idx) + ":53")) }); + servers.push_back({ idx, std::make_shared(ComboAddress("192.0.2." + std::to_string(idx) + ":53"), ComboAddress(), 0, std::string(), 1, false) }); servers.at(idx - 1).second->setUp(); /* we need to have a weight of at least 1000 to get an optimal repartition with the consistent hashing algo */ servers.at(idx - 1).second->setWeight(1000); @@ -157,7 +157,7 @@ BOOST_AUTO_TEST_CASE(test_firstAvailable) { ServerPolicy pol{"firstAvailable", firstAvailable, false}; ServerPolicy::NumberedServerVector servers; - servers.push_back({ 1, std::make_shared(ComboAddress("192.0.2.1:53")) }); + servers.push_back({ 1, std::make_shared(ComboAddress("192.0.2.1:53"), ComboAddress(), 0, std::string(), 1, false) }); /* servers start as 'down' */ auto server = pol.getSelectedBackend(servers, dq); @@ -169,7 +169,7 @@ BOOST_AUTO_TEST_CASE(test_firstAvailable) { BOOST_CHECK(server != nullptr); /* add a second server, we should still get the first one */ - servers.push_back({ 2, std::make_shared(ComboAddress("192.0.2.2:53")) }); + servers.push_back({ 2, std::make_shared(ComboAddress("192.0.2.2:53"), ComboAddress(), 0, std::string(), 1, false) }); server = pol.getSelectedBackend(servers, dq); BOOST_REQUIRE(server != nullptr); BOOST_CHECK(server == servers.at(0).second); @@ -190,8 +190,8 @@ BOOST_AUTO_TEST_CASE(test_firstAvailableWithOrderAndQPS) { ServerPolicy pol{"firstAvailable", firstAvailable, false}; ServerPolicy::NumberedServerVector servers; - servers.push_back({ 1, std::make_shared(ComboAddress("192.0.2.1:53")) }); - servers.push_back({ 2, std::make_shared(ComboAddress("192.0.2.2:53")) }); + servers.push_back({ 1, std::make_shared(ComboAddress("192.0.2.1:53"), ComboAddress(), 0, std::string(), 1, false) }); + servers.push_back({ 2, std::make_shared(ComboAddress("192.0.2.2:53"), ComboAddress(), 0, std::string(), 1, false) }); /* Second server has a higher order, so most queries should be routed to the first (remember that we need to keep them ordered!). However the first server has a QPS limit at 10 qps, so any query above that should be routed @@ -232,7 +232,7 @@ BOOST_AUTO_TEST_CASE(test_roundRobin) { auto server = pol.getSelectedBackend(servers, dq); BOOST_CHECK(server == nullptr); - servers.push_back({ 1, std::make_shared(ComboAddress("192.0.2.1:53")) }); + servers.push_back({ 1, std::make_shared(ComboAddress("192.0.2.1:53"), ComboAddress(), 0, std::string(), 1, false) }); /* servers start as 'down' but the RR policy returns a server unless g_roundrobinFailOnNoServer is set */ g_roundrobinFailOnNoServer = true; @@ -248,7 +248,7 @@ BOOST_AUTO_TEST_CASE(test_roundRobin) { BOOST_CHECK(server != nullptr); /* add a second server, we should get the first one then the second one */ - servers.push_back({ 2, std::make_shared(ComboAddress("192.0.2.2:53")) }); + servers.push_back({ 2, std::make_shared(ComboAddress("192.0.2.2:53"), ComboAddress(), 0, std::string(), 1, false) }); servers.at(1).second->setUp(); server = pol.getSelectedBackend(servers, dq); BOOST_REQUIRE(server != nullptr); @@ -291,7 +291,7 @@ BOOST_AUTO_TEST_CASE(test_leastOutstanding) { ServerPolicy pol{"leastOutstanding", leastOutstanding, false}; ServerPolicy::NumberedServerVector servers; - servers.push_back({ 1, std::make_shared(ComboAddress("192.0.2.1:53")) }); + servers.push_back({ 1, std::make_shared(ComboAddress("192.0.2.1:53"), ComboAddress(), 0, std::string(), 1, false) }); /* servers start as 'down' */ auto server = pol.getSelectedBackend(servers, dq); @@ -303,7 +303,7 @@ BOOST_AUTO_TEST_CASE(test_leastOutstanding) { BOOST_CHECK(server != nullptr); /* add a second server, we should still get the first one */ - servers.push_back({ 2, std::make_shared(ComboAddress("192.0.2.2:53")) }); + servers.push_back({ 2, std::make_shared(ComboAddress("192.0.2.2:53"), ComboAddress(), 0, std::string(), 1, false) }); server = pol.getSelectedBackend(servers, dq); BOOST_REQUIRE(server != nullptr); BOOST_CHECK(server == servers.at(0).second); @@ -333,7 +333,7 @@ BOOST_AUTO_TEST_CASE(test_wrandom) { ServerPolicy::NumberedServerVector servers; std::map, uint64_t> serversMap; for (size_t idx = 1; idx <= 10; idx++) { - servers.push_back({ idx, std::make_shared(ComboAddress("192.0.2." + std::to_string(idx) + ":53")) }); + servers.push_back({ idx, std::make_shared(ComboAddress("192.0.2." + std::to_string(idx) + ":53"), ComboAddress(), 0, std::string(), 1, false) }); serversMap[servers.at(idx - 1).second] = 0; servers.at(idx - 1).second->setUp(); } @@ -399,7 +399,7 @@ BOOST_AUTO_TEST_CASE(test_whashed) { ServerPolicy::NumberedServerVector servers; std::map, uint64_t> serversMap; for (size_t idx = 1; idx <= 10; idx++) { - servers.push_back({ idx, std::make_shared(ComboAddress("192.0.2." + std::to_string(idx) + ":53")) }); + servers.push_back({ idx, std::make_shared(ComboAddress("192.0.2." + std::to_string(idx) + ":53"), ComboAddress(), 0, std::string(), 1, false) }); serversMap[servers.at(idx - 1).second] = 0; servers.at(idx - 1).second->setUp(); } @@ -480,7 +480,7 @@ BOOST_AUTO_TEST_CASE(test_chashed) { ServerPolicy::NumberedServerVector servers; std::map, uint64_t> serversMap; for (size_t idx = 1; idx <= 10; idx++) { - servers.push_back({ idx, std::make_shared(ComboAddress("192.0.2." + std::to_string(idx) + ":53")) }); + servers.push_back({ idx, std::make_shared(ComboAddress("192.0.2." + std::to_string(idx) + ":53"), ComboAddress(), 0, std::string(), 1, false) }); serversMap[servers.at(idx - 1).second] = 0; servers.at(idx - 1).second->setUp(); /* we need to have a weight of at least 1000 to get an optimal repartition with the consistent hashing algo */ @@ -580,7 +580,7 @@ BOOST_AUTO_TEST_CASE(test_lua) { ServerPolicy::NumberedServerVector servers; std::map, uint64_t> serversMap; for (size_t idx = 1; idx <= 10; idx++) { - servers.push_back({ idx, std::make_shared(ComboAddress("192.0.2." + std::to_string(idx) + ":53")) }); + servers.push_back({ idx, std::make_shared(ComboAddress("192.0.2." + std::to_string(idx) + ":53"), ComboAddress(), 0, std::string(), 1, false) }); serversMap[servers.at(idx - 1).second] = 0; servers.at(idx - 1).second->setUp(); } @@ -640,7 +640,7 @@ BOOST_AUTO_TEST_CASE(test_lua_ffi_rr) { ServerPolicy::NumberedServerVector servers; std::map, uint64_t> serversMap; for (size_t idx = 1; idx <= 10; idx++) { - servers.push_back({ idx, std::make_shared(ComboAddress("192.0.2." + std::to_string(idx) + ":53")) }); + servers.push_back({ idx, std::make_shared(ComboAddress("192.0.2." + std::to_string(idx) + ":53"), ComboAddress(), 0, std::string(), 1, false) }); serversMap[servers.at(idx - 1).second] = 0; servers.at(idx - 1).second->setUp(); } @@ -697,7 +697,7 @@ BOOST_AUTO_TEST_CASE(test_lua_ffi_hashed) { ServerPolicy::NumberedServerVector servers; std::map, uint64_t> serversMap; for (size_t idx = 1; idx <= 10; idx++) { - servers.push_back({ idx, std::make_shared(ComboAddress("192.0.2." + std::to_string(idx) + ":53")) }); + servers.push_back({ idx, std::make_shared(ComboAddress("192.0.2." + std::to_string(idx) + ":53"), ComboAddress(), 0, std::string(), 1, false) }); serversMap[servers.at(idx - 1).second] = 0; servers.at(idx - 1).second->setUp(); } @@ -752,7 +752,7 @@ BOOST_AUTO_TEST_CASE(test_lua_ffi_whashed) { ServerPolicy::NumberedServerVector servers; std::map, uint64_t> serversMap; for (size_t idx = 1; idx <= 10; idx++) { - servers.push_back({ idx, std::make_shared(ComboAddress("192.0.2." + std::to_string(idx) + ":53")) }); + servers.push_back({ idx, std::make_shared(ComboAddress("192.0.2." + std::to_string(idx) + ":53"), ComboAddress(), 0, std::string(), 1, false) }); serversMap[servers.at(idx - 1).second] = 0; servers.at(idx - 1).second->setUp(); } @@ -810,7 +810,7 @@ BOOST_AUTO_TEST_CASE(test_lua_ffi_chashed) { ServerPolicy::NumberedServerVector servers; std::map, uint64_t> serversMap; for (size_t idx = 1; idx <= 10; idx++) { - servers.push_back({ idx, std::make_shared(ComboAddress("192.0.2." + std::to_string(idx) + ":53")) }); + servers.push_back({ idx, std::make_shared(ComboAddress("192.0.2." + std::to_string(idx) + ":53"), ComboAddress(), 0, std::string(), 1, false) }); serversMap[servers.at(idx - 1).second] = 0; servers.at(idx - 1).second->setUp(); /* we need to have a weight of at least 1000 to get an optimal repartition with the consistent hashing algo */ diff --git a/pdns/dnsdistdist/test-dnsdistnghttp2_cc.cc b/pdns/dnsdistdist/test-dnsdistnghttp2_cc.cc index 8777c240bb..e26e0a9075 100644 --- a/pdns/dnsdistdist/test-dnsdistnghttp2_cc.cc +++ b/pdns/dnsdistdist/test-dnsdistnghttp2_cc.cc @@ -29,6 +29,7 @@ #include "dnsdist-proxy-protocol.hh" #include "dnsdist-rings.hh" #include "dnsdist-nghttp2.hh" +#include "sstuff.hh" #ifdef HAVE_NGHTTP2 #include @@ -627,6 +628,34 @@ public: bool d_error{false}; }; +static bool isIPv6Supported() +{ + try { + ComboAddress addr("[2001:db8:53::1]:53"); + auto socket = std::make_unique(addr.sin4.sin_family, SOCK_STREAM, 0); + socket->setNonBlocking(); + int res = SConnectWithTimeout(socket->getHandle(), addr, timeval{0, 0}); + if (res == 0 || res == EINPROGRESS) { + return true; + } + return false; + } + catch (const std::exception& e) { + return false; + } +} + +static ComboAddress getBackendAddress(const std::string& lastDigit, uint16_t port) +{ + static const bool useV6 = isIPv6Supported(); + + if (useV6) { + return ComboAddress("2001:db8:53::" + lastDigit, port); + } + + return ComboAddress("192.0.2." + lastDigit, port); +} + static std::unique_ptr s_mplexer; struct TestFixture @@ -648,7 +677,7 @@ struct TestFixture BOOST_FIXTURE_TEST_CASE(test_SingleQuery, TestFixture) { - ComboAddress local("192.0.2.1:80"); + auto local = getBackendAddress("1", 80); ClientState localCS(local, true, false, false, "", {}); auto tlsCtx = std::make_shared(); localCS.tlsFrontend = std::make_shared(tlsCtx); @@ -675,7 +704,7 @@ BOOST_FIXTURE_TEST_CASE(test_SingleQuery, TestFixture) s_responses[counter] = {query, response}; - auto backend = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + auto backend = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); backend->d_tlsCtx = tlsCtx; backend->d_tlsSubjectName = "backend.powerdns.com"; backend->d_dohPath = "/dns-query"; @@ -717,7 +746,7 @@ BOOST_FIXTURE_TEST_CASE(test_SingleQuery, TestFixture) BOOST_FIXTURE_TEST_CASE(test_ConcurrentQueries, TestFixture) { - ComboAddress local("192.0.2.1:80"); + auto local = getBackendAddress("1", 80); ClientState localCS(local, true, false, false, "", {}); auto tlsCtx = std::make_shared(); localCS.tlsFrontend = std::make_shared(tlsCtx); @@ -725,7 +754,7 @@ BOOST_FIXTURE_TEST_CASE(test_ConcurrentQueries, TestFixture) struct timeval now; gettimeofday(&now, nullptr); - auto backend = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + auto backend = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); backend->d_tlsCtx = tlsCtx; backend->d_tlsSubjectName = "backend.powerdns.com"; backend->d_dohPath = "/dns-query"; @@ -802,7 +831,7 @@ BOOST_FIXTURE_TEST_CASE(test_ConcurrentQueries, TestFixture) BOOST_FIXTURE_TEST_CASE(test_ConnectionReuse, TestFixture) { - ComboAddress local("192.0.2.1:80"); + auto local = getBackendAddress("1", 80); ClientState localCS(local, true, false, false, "", {}); auto tlsCtx = std::make_shared(); localCS.tlsFrontend = std::make_shared(tlsCtx); @@ -810,7 +839,7 @@ BOOST_FIXTURE_TEST_CASE(test_ConnectionReuse, TestFixture) struct timeval now; gettimeofday(&now, nullptr); - auto backend = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + auto backend = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); backend->d_tlsCtx = tlsCtx; backend->d_tlsSubjectName = "backend.powerdns.com"; backend->d_dohPath = "/dns-query"; @@ -901,7 +930,7 @@ BOOST_FIXTURE_TEST_CASE(test_ConnectionReuse, TestFixture) BOOST_FIXTURE_TEST_CASE(test_InvalidDNSAnswer, TestFixture) { - ComboAddress local("192.0.2.1:80"); + auto local = getBackendAddress("1", 80); ClientState localCS(local, true, false, false, "", {}); auto tlsCtx = std::make_shared(); localCS.tlsFrontend = std::make_shared(tlsCtx); @@ -930,7 +959,7 @@ BOOST_FIXTURE_TEST_CASE(test_InvalidDNSAnswer, TestFixture) response.resize(11); s_responses[counter] = {query, response}; - auto backend = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + auto backend = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); backend->d_tlsCtx = tlsCtx; backend->d_tlsSubjectName = "backend.powerdns.com"; backend->d_dohPath = "/dns-query"; @@ -978,7 +1007,7 @@ BOOST_FIXTURE_TEST_CASE(test_InvalidDNSAnswer, TestFixture) BOOST_FIXTURE_TEST_CASE(test_TimeoutWhileWriting, TestFixture) { - ComboAddress local("192.0.2.1:80"); + auto local = getBackendAddress("1", 80); ClientState localCS(local, true, false, false, "", {}); auto tlsCtx = std::make_shared(); localCS.tlsFrontend = std::make_shared(tlsCtx); @@ -986,7 +1015,7 @@ BOOST_FIXTURE_TEST_CASE(test_TimeoutWhileWriting, TestFixture) struct timeval now; gettimeofday(&now, nullptr); - auto backend = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + auto backend = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); backend->d_tlsCtx = tlsCtx; backend->d_tlsSubjectName = "backend.powerdns.com"; backend->d_dohPath = "/dns-query"; @@ -1065,7 +1094,7 @@ BOOST_FIXTURE_TEST_CASE(test_TimeoutWhileWriting, TestFixture) BOOST_FIXTURE_TEST_CASE(test_TimeoutWhileReading, TestFixture) { - ComboAddress local("192.0.2.1:80"); + auto local = getBackendAddress("1", 80); ClientState localCS(local, true, false, false, "", {}); auto tlsCtx = std::make_shared(); localCS.tlsFrontend = std::make_shared(tlsCtx); @@ -1073,7 +1102,7 @@ BOOST_FIXTURE_TEST_CASE(test_TimeoutWhileReading, TestFixture) struct timeval now; gettimeofday(&now, nullptr); - auto backend = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + auto backend = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); backend->d_tlsCtx = tlsCtx; backend->d_tlsSubjectName = "backend.powerdns.com"; backend->d_dohPath = "/dns-query"; @@ -1152,7 +1181,7 @@ BOOST_FIXTURE_TEST_CASE(test_TimeoutWhileReading, TestFixture) BOOST_FIXTURE_TEST_CASE(test_ShortWrite, TestFixture) { - ComboAddress local("192.0.2.1:80"); + auto local = getBackendAddress("1", 80); ClientState localCS(local, true, false, false, "", {}); auto tlsCtx = std::make_shared(); localCS.tlsFrontend = std::make_shared(tlsCtx); @@ -1160,7 +1189,7 @@ BOOST_FIXTURE_TEST_CASE(test_ShortWrite, TestFixture) struct timeval now; gettimeofday(&now, nullptr); - auto backend = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + auto backend = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); backend->d_tlsCtx = tlsCtx; backend->d_tlsSubjectName = "backend.powerdns.com"; backend->d_dohPath = "/dns-query"; @@ -1234,7 +1263,7 @@ BOOST_FIXTURE_TEST_CASE(test_ShortWrite, TestFixture) BOOST_FIXTURE_TEST_CASE(test_ShortRead, TestFixture) { - ComboAddress local("192.0.2.1:80"); + auto local = getBackendAddress("1", 80); ClientState localCS(local, true, false, false, "", {}); auto tlsCtx = std::make_shared(); localCS.tlsFrontend = std::make_shared(tlsCtx); @@ -1242,7 +1271,7 @@ BOOST_FIXTURE_TEST_CASE(test_ShortRead, TestFixture) struct timeval now; gettimeofday(&now, nullptr); - auto backend = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + auto backend = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); backend->d_tlsCtx = tlsCtx; backend->d_tlsSubjectName = "backend.powerdns.com"; backend->d_dohPath = "/dns-query"; @@ -1323,7 +1352,7 @@ BOOST_FIXTURE_TEST_CASE(test_ShortRead, TestFixture) BOOST_FIXTURE_TEST_CASE(test_ConnectionClosedWhileReading, TestFixture) { - ComboAddress local("192.0.2.1:80"); + auto local = getBackendAddress("1", 80); ClientState localCS(local, true, false, false, "", {}); auto tlsCtx = std::make_shared(); localCS.tlsFrontend = std::make_shared(tlsCtx); @@ -1331,7 +1360,7 @@ BOOST_FIXTURE_TEST_CASE(test_ConnectionClosedWhileReading, TestFixture) struct timeval now; gettimeofday(&now, nullptr); - auto backend = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + auto backend = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); backend->d_tlsCtx = tlsCtx; backend->d_tlsSubjectName = "backend.powerdns.com"; backend->d_dohPath = "/dns-query"; @@ -1409,7 +1438,7 @@ BOOST_FIXTURE_TEST_CASE(test_ConnectionClosedWhileReading, TestFixture) BOOST_FIXTURE_TEST_CASE(test_ConnectionClosedWhileWriting, TestFixture) { - ComboAddress local("192.0.2.1:80"); + auto local = getBackendAddress("1", 80); ClientState localCS(local, true, false, false, "", {}); auto tlsCtx = std::make_shared(); localCS.tlsFrontend = std::make_shared(tlsCtx); @@ -1417,7 +1446,7 @@ BOOST_FIXTURE_TEST_CASE(test_ConnectionClosedWhileWriting, TestFixture) struct timeval now; gettimeofday(&now, nullptr); - auto backend = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + auto backend = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); backend->d_tlsCtx = tlsCtx; backend->d_tlsSubjectName = "backend.powerdns.com"; backend->d_dohPath = "/dns-query"; @@ -1498,7 +1527,7 @@ BOOST_FIXTURE_TEST_CASE(test_ConnectionClosedWhileWriting, TestFixture) BOOST_FIXTURE_TEST_CASE(test_GoAwayFromServer, TestFixture) { - ComboAddress local("192.0.2.1:80"); + auto local = getBackendAddress("1", 80); ClientState localCS(local, true, false, false, "", {}); auto tlsCtx = std::make_shared(); localCS.tlsFrontend = std::make_shared(tlsCtx); @@ -1506,7 +1535,7 @@ BOOST_FIXTURE_TEST_CASE(test_GoAwayFromServer, TestFixture) struct timeval now; gettimeofday(&now, nullptr); - auto backend = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + auto backend = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); backend->d_tlsCtx = tlsCtx; backend->d_tlsSubjectName = "backend.powerdns.com"; backend->d_dohPath = "/dns-query"; @@ -1609,7 +1638,7 @@ BOOST_FIXTURE_TEST_CASE(test_GoAwayFromServer, TestFixture) BOOST_FIXTURE_TEST_CASE(test_HTTP500FromServer, TestFixture) { - ComboAddress local("192.0.2.1:80"); + auto local = getBackendAddress("1", 80); ClientState localCS(local, true, false, false, "", {}); auto tlsCtx = std::make_shared(); localCS.tlsFrontend = std::make_shared(tlsCtx); @@ -1617,7 +1646,7 @@ BOOST_FIXTURE_TEST_CASE(test_HTTP500FromServer, TestFixture) struct timeval now; gettimeofday(&now, nullptr); - auto backend = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + auto backend = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); backend->d_tlsCtx = tlsCtx; backend->d_tlsSubjectName = "backend.powerdns.com"; backend->d_dohPath = "/dns-query"; @@ -1697,7 +1726,7 @@ BOOST_FIXTURE_TEST_CASE(test_HTTP500FromServer, TestFixture) BOOST_FIXTURE_TEST_CASE(test_WrongStreamID, TestFixture) { - ComboAddress local("192.0.2.1:80"); + auto local = getBackendAddress("1", 80); ClientState localCS(local, true, false, false, "", {}); auto tlsCtx = std::make_shared(); localCS.tlsFrontend = std::make_shared(tlsCtx); @@ -1705,7 +1734,7 @@ BOOST_FIXTURE_TEST_CASE(test_WrongStreamID, TestFixture) struct timeval now; gettimeofday(&now, nullptr); - auto backend = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + auto backend = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); backend->d_tlsCtx = tlsCtx; backend->d_tlsSubjectName = "backend.powerdns.com"; backend->d_dohPath = "/dns-query"; @@ -1797,7 +1826,7 @@ BOOST_FIXTURE_TEST_CASE(test_WrongStreamID, TestFixture) BOOST_FIXTURE_TEST_CASE(test_ProxyProtocol, TestFixture) { - ComboAddress local("192.0.2.1:80"); + auto local = getBackendAddress("1", 80); ClientState localCS(local, true, false, false, "", {}); auto tlsCtx = std::make_shared(); tlsCtx->d_needProxyProtocol = true; @@ -1806,7 +1835,7 @@ BOOST_FIXTURE_TEST_CASE(test_ProxyProtocol, TestFixture) struct timeval now; gettimeofday(&now, nullptr); - auto backend = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + auto backend = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); backend->d_tlsCtx = tlsCtx; backend->d_tlsSubjectName = "backend.powerdns.com"; backend->d_dohPath = "/dns-query"; diff --git a/pdns/dnsdistdist/test-dnsdisttcp_cc.cc b/pdns/dnsdistdist/test-dnsdisttcp_cc.cc index a02d3ec839..194b7fcc6f 100644 --- a/pdns/dnsdistdist/test-dnsdisttcp_cc.cc +++ b/pdns/dnsdistdist/test-dnsdisttcp_cc.cc @@ -391,6 +391,34 @@ private: std::set ready; }; +static bool isIPv6Supported() +{ + try { + ComboAddress addr("[2001:db8:53::1]:53"); + auto socket = std::make_unique(addr.sin4.sin_family, SOCK_STREAM, 0); + socket->setNonBlocking(); + int res = SConnectWithTimeout(socket->getHandle(), addr, timeval{0, 0}); + if (res == 0 || res == EINPROGRESS) { + return true; + } + return false; + } + catch (const std::exception& e) { + return false; + } +} + +static ComboAddress getBackendAddress(const std::string& lastDigit, uint16_t port) +{ + static const bool useV6 = isIPv6Supported(); + + if (useV6) { + return ComboAddress("2001:db8:53::" + lastDigit, port); + } + + return ComboAddress("192.0.2." + lastDigit, port); +} + static void testInit(const std::string& name, TCPClientThreadData& threadData) { #if 0 @@ -415,7 +443,7 @@ static void testInit(const std::string& name, TCPClientThreadData& threadData) BOOST_AUTO_TEST_CASE(test_IncomingConnection_SelfAnswered) { - ComboAddress local("192.0.2.1:80"); + auto local = getBackendAddress("1", 80); ClientState localCS(local, true, false, false, "", {}); auto tlsCtx = std::make_shared(); localCS.tlsFrontend = std::make_shared(tlsCtx); @@ -449,7 +477,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_SelfAnswered) return ProcessQueryResult::Drop; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), 0U); } @@ -472,7 +500,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_SelfAnswered) return ProcessQueryResult::SendAnswer; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), query.size()); BOOST_CHECK(s_writeBuffer == query); @@ -507,7 +535,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_SelfAnswered) /* mark the incoming FD as always ready */ dynamic_cast(threadData.mplexer.get())->setReady(-1); - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); while (threadData.mplexer->getWatchedFDCount(false) != 0 || threadData.mplexer->getWatchedFDCount(true) != 0) { threadData.mplexer->run(&now); @@ -531,7 +559,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_SelfAnswered) throw std::runtime_error("Something unexpected happened"); }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), 0U); } @@ -559,7 +587,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_SelfAnswered) return ProcessQueryResult::SendAnswer; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), query.size() * count); #endif @@ -585,7 +613,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_SelfAnswered) /* mark the incoming FD as NOT ready */ dynamic_cast(threadData.mplexer.get())->setNotReady(-1); - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(threadData.mplexer->run(&now), 0); struct timeval later = now; @@ -621,7 +649,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_SelfAnswered) /* mark the incoming FD as NOT ready */ dynamic_cast(threadData.mplexer.get())->setNotReady(-1); - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(threadData.mplexer->run(&now), 0); struct timeval later = now; @@ -654,7 +682,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_SelfAnswered) return ProcessQueryResult::SendAnswer; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), 0U); } @@ -662,7 +690,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_SelfAnswered) BOOST_AUTO_TEST_CASE(test_IncomingConnectionWithProxyProtocol_SelfAnswered) { - ComboAddress local("192.0.2.1:80"); + auto local = getBackendAddress("1", 80); ClientState localCS(local, true, false, false, "", {}); auto tlsCtx = std::make_shared(); localCS.tlsFrontend = std::make_shared(tlsCtx); @@ -685,6 +713,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionWithProxyProtocol_SelfAnswered) TEST_INIT("=> reading PP"); g_proxyProtocolACL.addMask("0.0.0.0/0"); + g_proxyProtocolACL.addMask("::0/0"); auto proxyPayload = makeProxyHeader(true, ComboAddress("192.0.2.1"), ComboAddress("192.0.2.2"), {}); BOOST_REQUIRE_GT(proxyPayload.size(), s_proxyProtocolMinimumHeaderSize); @@ -714,7 +743,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionWithProxyProtocol_SelfAnswered) /* mark the incoming FD as NOT ready */ dynamic_cast(threadData.mplexer.get())->setNotReady(-1); - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(threadData.mplexer->run(&now), 0); BOOST_CHECK_EQUAL(s_writeBuffer.size(), query.size() * 2U); @@ -724,6 +753,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionWithProxyProtocol_SelfAnswered) TEST_INIT("=> Invalid PP"); g_proxyProtocolACL.addMask("0.0.0.0/0"); + g_proxyProtocolACL.addMask("::0/0"); auto proxyPayload = std::vector(s_proxyProtocolMinimumHeaderSize); std::fill(proxyPayload.begin(), proxyPayload.end(), 0); @@ -740,7 +770,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionWithProxyProtocol_SelfAnswered) return ProcessQueryResult::SendAnswer; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), 0U); @@ -750,6 +780,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionWithProxyProtocol_SelfAnswered) TEST_INIT("=> timeout while reading PP"); g_proxyProtocolACL.addMask("0.0.0.0/0"); + g_proxyProtocolACL.addMask("::0/0"); auto proxyPayload = makeProxyHeader(true, ComboAddress("192.0.2.1"), ComboAddress("192.0.2.2"), {}); BOOST_REQUIRE_GT(proxyPayload.size(), s_proxyProtocolMinimumHeaderSize); s_readBuffer = query; @@ -771,7 +802,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionWithProxyProtocol_SelfAnswered) /* mark the incoming FD as NOT ready */ dynamic_cast(threadData.mplexer.get())->setNotReady(-1); - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(threadData.mplexer->run(&now), 0); struct timeval later = now; @@ -791,7 +822,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionWithProxyProtocol_SelfAnswered) BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) { - ComboAddress local("192.0.2.1:80"); + auto local = getBackendAddress("1", 80); ClientState localCS(local, true, false, false, "", {}); auto tlsCtx = std::make_shared(); localCS.tlsFrontend = std::make_shared(tlsCtx); @@ -816,7 +847,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) const uint8_t sizeBytes[] = { static_cast(querySize / 256), static_cast(querySize % 256) }; query.insert(query.begin(), sizeBytes, sizeBytes + 2); - auto backend = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + auto backend = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); backend->d_tlsCtx = tlsCtx; { @@ -850,7 +881,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), query.size()); BOOST_CHECK(s_writeBuffer == query); @@ -890,7 +921,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) throw std::runtime_error("Unexpected error while processing the response"); }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), 0U); BOOST_CHECK_EQUAL(s_backendWriteBuffer.size(), query.size()); @@ -929,7 +960,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) return false; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), 0U); BOOST_CHECK_EQUAL(s_backendWriteBuffer.size(), query.size()); @@ -972,7 +1003,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), 0U); BOOST_CHECK_EQUAL(s_backendWriteBuffer.size(), query.size()); @@ -999,7 +1030,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), 0U); BOOST_CHECK_EQUAL(s_backendWriteBuffer.size(), 0U); @@ -1037,7 +1068,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), 0U); BOOST_CHECK_EQUAL(s_backendWriteBuffer.size(), query.size()); @@ -1107,7 +1138,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) /* set the incoming descriptor as ready! */ dynamic_cast(threadData.mplexer.get())->setReady(-1); - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); while (threadData.mplexer->getWatchedFDCount(false) != 0 || threadData.mplexer->getWatchedFDCount(true) != 0) { threadData.mplexer->run(&now); @@ -1168,7 +1199,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), 0U); BOOST_CHECK_EQUAL(s_backendWriteBuffer.size(), 0U); @@ -1204,7 +1235,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); struct timeval later = now; later.tv_sec += backend->tcpSendTimeout + 1; @@ -1250,7 +1281,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); struct timeval later = now; later.tv_sec += backend->tcpRecvTimeout + 1; @@ -1307,7 +1338,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), 0U); BOOST_CHECK_EQUAL(s_backendWriteBuffer.size(), 0U); @@ -1363,7 +1394,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), query.size()); BOOST_CHECK(s_writeBuffer == query); @@ -1422,7 +1453,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), 0U); BOOST_CHECK_EQUAL(s_backendWriteBuffer.size(), 0U); @@ -1474,7 +1505,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), 0U); BOOST_CHECK_EQUAL(s_backendWriteBuffer.size(), query.size() * backend->d_retries); @@ -1534,7 +1565,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), query.size()); BOOST_CHECK(s_writeBuffer == query); @@ -1575,7 +1606,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), 0U); BOOST_CHECK_EQUAL(s_backendWriteBuffer.size(), query.size()); @@ -1637,7 +1668,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); BOOST_CHECK_EQUAL(s_writeBuffer.size(), query.size() * count); BOOST_CHECK_EQUAL(backend->outstanding.load(), 0U); @@ -1653,7 +1684,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnection_BackendNoOOOR) BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) { - ComboAddress local("192.0.2.1:80"); + auto local = getBackendAddress("1", 80); ClientState localCS(local, true, false, false, "", {}); /* enable out-of-order on the front side */ localCS.d_maxInFlightQueriesPerConn = 65536; @@ -1661,7 +1692,10 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) auto tlsCtx = std::make_shared(); localCS.tlsFrontend = std::make_shared(tlsCtx); - auto backend = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + ConnectionInfo connInfo(&localCS); + connInfo.remote = getBackendAddress("84", 4242); + + auto backend = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); backend->d_tlsCtx = tlsCtx; /* enable out-of-order on the backend side as well */ backend->d_maxInFlightQueriesPerConn = 65536; @@ -1821,7 +1855,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); while (threadData.mplexer->getWatchedFDCount(false) != 0 || threadData.mplexer->getWatchedFDCount(true) != 0) { threadData.mplexer->run(&now); @@ -1953,7 +1987,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); while (!timeout && (threadData.mplexer->getWatchedFDCount(false) != 0 || threadData.mplexer->getWatchedFDCount(true) != 0)) { @@ -2122,7 +2156,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); while (!timeout && (threadData.mplexer->getWatchedFDCount(false) != 0 || threadData.mplexer->getWatchedFDCount(true) != 0)) { @@ -2198,7 +2232,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); while (!timeout && (threadData.mplexer->getWatchedFDCount(false) != 0 || threadData.mplexer->getWatchedFDCount(true) != 0)) { threadData.mplexer->run(&now); @@ -2281,7 +2315,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); while ((threadData.mplexer->getWatchedFDCount(false) != 0 || threadData.mplexer->getWatchedFDCount(true) != 0)) { threadData.mplexer->run(&now); @@ -2395,7 +2429,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); while (!timeout && (threadData.mplexer->getWatchedFDCount(false) != 0 || threadData.mplexer->getWatchedFDCount(true) != 0)) { threadData.mplexer->run(&now); @@ -2547,7 +2581,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); while (threadData.mplexer->getWatchedFDCount(false) != 0 || threadData.mplexer->getWatchedFDCount(true) != 0) { threadData.mplexer->run(&now); @@ -2752,7 +2786,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); while (!timeout && (threadData.mplexer->getWatchedFDCount(false) != 0 || threadData.mplexer->getWatchedFDCount(true) != 0)) { threadData.mplexer->run(&now); @@ -3013,7 +3047,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); while (!timeout && (threadData.mplexer->getWatchedFDCount(false) != 0 || threadData.mplexer->getWatchedFDCount(true) != 0)) { threadData.mplexer->run(&now); @@ -3035,14 +3069,14 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) PacketBuffer expectedWriteBuffer; PacketBuffer expectedBackendWriteBuffer; - auto proxyPayload = makeProxyHeader(true, ComboAddress("0.0.0.0"), local, {}); + auto proxyPayload = makeProxyHeader(true, getBackendAddress("84", 4242), local, {}); BOOST_REQUIRE_GT(proxyPayload.size(), s_proxyProtocolMinimumHeaderSize); s_readBuffer.insert(s_readBuffer.end(), queries.at(0).begin(), queries.at(0).end()); s_readBuffer.insert(s_readBuffer.end(), queries.at(1).begin(), queries.at(1).end()); s_readBuffer.insert(s_readBuffer.end(), queries.at(2).begin(), queries.at(2).end()); - auto proxyEnabledBackend = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + auto proxyEnabledBackend = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); proxyEnabledBackend->d_tlsCtx = tlsCtx; /* enable out-of-order on the backend side as well */ proxyEnabledBackend->d_maxInFlightQueriesPerConn = 65536; @@ -3136,7 +3170,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); while (threadData.mplexer->getWatchedFDCount(false) != 0 || threadData.mplexer->getWatchedFDCount(true) != 0) { threadData.mplexer->run(&now); @@ -3159,14 +3193,14 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) PacketBuffer expectedWriteBuffer; PacketBuffer expectedBackendWriteBuffer; - auto proxyPayload = makeProxyHeader(true, ComboAddress("0.0.0.0"), local, {}); + auto proxyPayload = makeProxyHeader(true, getBackendAddress("84", 4242), local, {}); BOOST_REQUIRE_GT(proxyPayload.size(), s_proxyProtocolMinimumHeaderSize); s_readBuffer.insert(s_readBuffer.end(), queries.at(0).begin(), queries.at(0).end()); s_readBuffer.insert(s_readBuffer.end(), queries.at(1).begin(), queries.at(1).end()); s_readBuffer.insert(s_readBuffer.end(), queries.at(2).begin(), queries.at(2).end()); - auto proxyEnabledBackend = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + auto proxyEnabledBackend = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); proxyEnabledBackend->d_tlsCtx = tlsCtx; /* enable out-of-order on the backend side as well */ proxyEnabledBackend->d_maxInFlightQueriesPerConn = 65536; @@ -3246,7 +3280,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); while (threadData.mplexer->getWatchedFDCount(false) != 0 || threadData.mplexer->getWatchedFDCount(true) != 0) { threadData.mplexer->run(&now); @@ -3311,7 +3345,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); while (!timeout && (threadData.mplexer->getWatchedFDCount(false) != 0 || threadData.mplexer->getWatchedFDCount(true) != 0)) { threadData.mplexer->run(&now); @@ -3359,7 +3393,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) expectedWriteBuffer = s_backendReadBuffer; - auto backend1 = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + auto backend1 = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); backend1->d_tlsCtx = tlsCtx; /* only two queries in flight! */ backend1->d_maxInFlightQueriesPerConn = 2; @@ -3488,7 +3522,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); while (threadData.mplexer->getWatchedFDCount(false) != 0 || threadData.mplexer->getWatchedFDCount(true) != 0) { threadData.mplexer->run(&now); @@ -3564,7 +3598,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); while (!timeout && (threadData.mplexer->getWatchedFDCount(false) != 0 || threadData.mplexer->getWatchedFDCount(true) != 0)) { threadData.mplexer->run(&now); @@ -3594,7 +3628,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendOOOR) BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendNotOOOR) { - ComboAddress local("192.0.2.1:80"); + auto local = getBackendAddress("1", 80); ClientState localCS(local, true, false, false, "", {}); /* enable out-of-order on the front side */ localCS.d_maxInFlightQueriesPerConn = 65536; @@ -3602,7 +3636,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendNotOOOR) auto tlsCtx = std::make_shared(); localCS.tlsFrontend = std::make_shared(tlsCtx); - auto backend = std::make_shared(ComboAddress("192.0.2.42:53"), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); + auto backend = std::make_shared(getBackendAddress("42", 53), ComboAddress("0.0.0.0:0"), 0, std::string(), 1, false); backend->d_tlsCtx = tlsCtx; /* shorter than the client one */ backend->tcpRecvTimeout = 1; @@ -3787,7 +3821,7 @@ BOOST_AUTO_TEST_CASE(test_IncomingConnectionOOOR_BackendNotOOOR) return true; }; - auto state = std::make_shared(ConnectionInfo(&localCS), threadData, now); + auto state = std::make_shared(ConnectionInfo(&localCS, getBackendAddress("84", 4242)), threadData, now); IncomingTCPConnectionState::handleIO(state, now); while (threadData.mplexer->getWatchedFDCount(false) != 0 || threadData.mplexer->getWatchedFDCount(true) != 0) { threadData.mplexer->run(&now); -- 2.47.2