diff options
Diffstat (limited to 'test-dnsdist-lua-ffi.cc')
-rw-r--r-- | test-dnsdist-lua-ffi.cc | 76 |
1 files changed, 70 insertions, 6 deletions
diff --git a/test-dnsdist-lua-ffi.cc b/test-dnsdist-lua-ffi.cc index 776aee0..79c9ef9 100644 --- a/test-dnsdist-lua-ffi.cc +++ b/test-dnsdist-lua-ffi.cc @@ -19,17 +19,21 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#ifndef BOOST_TEST_DYN_LINK #define BOOST_TEST_DYN_LINK +#endif + #define BOOST_TEST_NO_MAIN #include <boost/test/unit_test.hpp> #include "dnsdist-lua-ffi.hh" #include "dnsdist-rings.hh" +#include "dnsdist-web.hh" #include "dnsparser.hh" #include "dnswriter.hh" -bool addMetricDefinition(const std::string& name, const std::string& type, const std::string& description, const std::string& customPrometheusName) +bool addMetricDefinition(const dnsdist::prometheus::PrometheusMetricDefinition& def) { return true; } @@ -90,6 +94,8 @@ BOOST_AUTO_TEST_CASE(test_Query) BOOST_REQUIRE_EQUAL(bufferSize, sizeof(ids.origRemote.sin4.sin_addr.s_addr)); BOOST_CHECK(memcmp(buffer, &ids.origRemote.sin4.sin_addr.s_addr, sizeof(ids.origRemote.sin4.sin_addr.s_addr)) == 0); BOOST_CHECK_EQUAL(dnsdist_ffi_dnsquestion_get_remote_port(&lightDQ), 4242U); + BOOST_CHECK(!dnsdist_ffi_dnsquestion_is_remote_v6(nullptr)); + BOOST_CHECK(!dnsdist_ffi_dnsquestion_is_remote_v6(&lightDQ)); } { @@ -432,8 +438,8 @@ BOOST_AUTO_TEST_CASE(test_Server) BOOST_CHECK_EQUAL(dnsdist_ffi_server_is_up(&server), false); BOOST_CHECK_EQUAL(dnsdist_ffi_server_get_name(&server), ""); BOOST_CHECK_EQUAL(dnsdist_ffi_server_get_name_with_addr(&server), dsAddr.toStringWithPort()); - BOOST_CHECK_EQUAL(dnsdist_ffi_server_get_weight(&server), 1U); - BOOST_CHECK_EQUAL(dnsdist_ffi_server_get_order(&server), 1U); + BOOST_CHECK_EQUAL(dnsdist_ffi_server_get_weight(&server), 1); + BOOST_CHECK_EQUAL(dnsdist_ffi_server_get_order(&server), 1); BOOST_CHECK_EQUAL(dnsdist_ffi_server_get_latency(&server), 0.0); } @@ -465,7 +471,7 @@ BOOST_AUTO_TEST_CASE(test_PacketCache) ids.queryRealTime.start(); DNSQuestion dq(ids, query); packetCache->get(dq, 0, &key, subnet, dnssecOK, receivedOverUDP); - packetCache->insert(key, subnet, *(getFlagsFromDNSHeader(dq.getHeader())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, 0, boost::none); + packetCache->insert(key, subnet, *(getFlagsFromDNSHeader(dq.getHeader().get())), dnssecOK, ids.qname, QType::A, QClass::IN, response, receivedOverUDP, 0, boost::none); std::string poolName("test-pool"); auto testPool = std::make_shared<ServerPool>(); @@ -683,6 +689,12 @@ BOOST_AUTO_TEST_CASE(test_RingBuffers) { dnsheader dh; memset(&dh, 0, sizeof(dh)); + dh.id = htons(42); + dh.rd = 1; + dh.ancount = htons(1); + dh.nscount = htons(1); + dh.arcount = htons(1); + dh.rcode = RCode::NXDomain; DNSName qname("rings.luaffi.powerdns.com."); ComboAddress requestor1("192.0.2.1"); ComboAddress backend("192.0.2.42"); @@ -715,11 +727,22 @@ BOOST_AUTO_TEST_CASE(test_RingBuffers) BOOST_CHECK_EQUAL(dnsdist_ffi_ring_get_entries_by_mac(nullptr, nullptr), 0U); BOOST_CHECK(list == nullptr); BOOST_CHECK(!dnsdist_ffi_ring_entry_is_response(nullptr, 0)); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_age(nullptr, 0) == 0.0); BOOST_CHECK(dnsdist_ffi_ring_entry_get_name(nullptr, 0) == nullptr); BOOST_CHECK(dnsdist_ffi_ring_entry_get_type(nullptr, 0) == 0); BOOST_CHECK(dnsdist_ffi_ring_entry_get_requestor(nullptr, 0) == nullptr); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_backend(nullptr, 0) == nullptr); BOOST_CHECK(dnsdist_ffi_ring_entry_get_protocol(nullptr, 0) == 0); BOOST_CHECK(dnsdist_ffi_ring_entry_get_size(nullptr, 0) == 0); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_latency(nullptr, 0) == 0); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_id(nullptr, 0) == 0); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_rcode(nullptr, 0) == 0); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_aa(nullptr, 0) == false); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_rd(nullptr, 0) == false); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_tc(nullptr, 0) == false); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_ancount(nullptr, 0) == 0); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_nscount(nullptr, 0) == 0); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_arcount(nullptr, 0) == 0); BOOST_CHECK(!dnsdist_ffi_ring_entry_has_mac_address(nullptr, 0)); BOOST_CHECK(dnsdist_ffi_ring_entry_get_mac_address(nullptr, 0) == nullptr); } @@ -731,11 +754,25 @@ BOOST_AUTO_TEST_CASE(test_RingBuffers) BOOST_CHECK(dnsdist_ffi_ring_entry_is_response(list, 1)); for (size_t idx = 0; idx < 2; idx++) { + BOOST_CHECK(dnsdist_ffi_ring_entry_get_age(list, idx) >= 0.0); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_age(list, idx) < 2.0); BOOST_CHECK(dnsdist_ffi_ring_entry_get_name(list, idx) == qname.toString()); BOOST_CHECK(dnsdist_ffi_ring_entry_get_type(list, idx) == qtype); - BOOST_CHECK(dnsdist_ffi_ring_entry_get_requestor(list, idx) == requestor1.toString()); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_requestor(list, idx) == requestor1.toStringWithPort()); BOOST_CHECK(dnsdist_ffi_ring_entry_get_protocol(list, idx) == protocol.toNumber()); BOOST_CHECK_EQUAL(dnsdist_ffi_ring_entry_get_size(list, idx), size); + BOOST_CHECK_EQUAL(dnsdist_ffi_ring_entry_get_id(list, idx), 42U); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_aa(list, idx) == false); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_rd(list, idx) == true); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_tc(list, idx) == false); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_ancount(list, idx) == 1); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_nscount(list, idx) == 1); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_arcount(list, idx) == 1); + BOOST_CHECK(dnsdist_ffi_ring_entry_get_rcode(list, idx) == RCode::NXDomain); + if (dnsdist_ffi_ring_entry_is_response(list, idx)) { + BOOST_CHECK(dnsdist_ffi_ring_entry_get_backend(list, idx) == backend.toStringWithPort()); + BOOST_CHECK_EQUAL(dnsdist_ffi_ring_entry_get_latency(list, idx), responseTime); + } BOOST_CHECK(!dnsdist_ffi_ring_entry_has_mac_address(list, idx)); BOOST_CHECK(dnsdist_ffi_ring_entry_get_mac_address(list, idx) == std::string()); } @@ -743,7 +780,7 @@ BOOST_AUTO_TEST_CASE(test_RingBuffers) dnsdist_ffi_ring_entry_list_free(list); list = nullptr; - // no the right requestor + // not the right requestor BOOST_REQUIRE_EQUAL(dnsdist_ffi_ring_get_entries_by_addr("192.0.2.2", &list), 0U); BOOST_CHECK(list == nullptr); @@ -779,4 +816,31 @@ BOOST_AUTO_TEST_CASE(test_NetworkEndpoint) } } +BOOST_AUTO_TEST_CASE(test_hash) +{ + const uint32_t seed = 0x42; + const std::array<unsigned char, 10> data{{'0', 'x', 'd', 'e', 'a', 'd', 'b', 'E', 'e', 'F'}}; + const std::array<unsigned char, 10> capitalizedData{{'0', 'X', 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F'}}; + + { + /* invalid */ + BOOST_CHECK_EQUAL(dnsdist_ffi_hash(0, nullptr, 0, false), 0U); + BOOST_CHECK_EQUAL(dnsdist_ffi_hash(seed, nullptr, 0, false), seed); + } + { + /* case sensitive */ + auto hash = dnsdist_ffi_hash(seed, data.data(), data.size(), false); + BOOST_CHECK_EQUAL(hash, burtle(data.data(), data.size(), seed)); + BOOST_CHECK_NE(hash, burtle(capitalizedData.data(), capitalizedData.size(), seed)); + BOOST_CHECK_NE(hash, burtleCI(capitalizedData.data(), capitalizedData.size(), seed)); + } + { + /* case insensitive */ + auto hash = dnsdist_ffi_hash(seed, data.data(), data.size(), true); + BOOST_CHECK_EQUAL(hash, burtleCI(data.data(), data.size(), seed)); + BOOST_CHECK_NE(hash, burtle(capitalizedData.data(), capitalizedData.size(), seed)); + BOOST_CHECK_EQUAL(hash, burtleCI(capitalizedData.data(), capitalizedData.size(), seed)); + } +} + BOOST_AUTO_TEST_SUITE_END(); |