]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Small optimization in the Rings unit tests 15433/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 15 Apr 2025 08:57:57 +0000 (10:57 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 15 Apr 2025 08:57:57 +0000 (10:57 +0200)
Calling `BOOST_CHECK_*` is quite expensive, so this commit limits
the number of these calls done in a tight loop.

pdns/dnsdistdist/test-dnsdistrings_cc.cc

index ad81e1ec391925eee878e010b4d567313816e391..4dc7ae0dab84dcc86093ab12f0cf94ee95ff2b98 100644 (file)
 
 BOOST_AUTO_TEST_SUITE(dnsdistrings_cc)
 
+template <class T> static bool checkQuery(const T& entry, const DNSName& qname, uint16_t qtype, uint16_t size, const timespec& now, const ComboAddress& requestor)
+{
+  if (entry.name != qname) {
+    return false;
+  }
+  if (entry.qtype != qtype) {
+    return false;
+  }
+  if (entry.size != size) {
+    return false;
+  }
+  if (entry.when.tv_sec != now.tv_sec) {
+    return false;
+  }
+  if (entry.requestor != requestor) {
+    return false;
+  }
+  return true;
+}
+
+static bool checkResponse(const Rings::Response& entry, const DNSName& qname, uint16_t qtype, uint16_t size, const timespec& now, const ComboAddress& requestor, unsigned int latency, const ComboAddress& server)
+{
+  if (!checkQuery(entry, qname, qtype, size, now, requestor)) {
+    return false;
+  }
+  if (entry.usec != latency) {
+    return false;
+  }
+  if (entry.ds != server) {
+    return false;
+  }
+  return true;
+}
+
 static void test_ring(size_t maxEntries, size_t numberOfShards, size_t nbLockTries)
 {
   Rings rings;
@@ -49,11 +83,7 @@ static void test_ring(size_t maxEntries, size_t numberOfShards, size_t nbLockTri
     auto ring = shard->queryRing.lock();
     BOOST_CHECK_EQUAL(ring->size(), entriesPerShard);
     for (const auto& entry : *ring) {
-      BOOST_CHECK_EQUAL(entry.name, qname);
-      BOOST_CHECK_EQUAL(entry.qtype, qtype);
-      BOOST_CHECK_EQUAL(entry.size, size);
-      BOOST_CHECK_EQUAL(entry.when.tv_sec, now.tv_sec);
-      BOOST_CHECK_EQUAL(entry.requestor.toStringWithPort(), requestor1.toStringWithPort());
+      BOOST_CHECK(checkQuery(entry, qname, qtype, size, now, requestor1));
     }
   }
 
@@ -67,11 +97,7 @@ static void test_ring(size_t maxEntries, size_t numberOfShards, size_t nbLockTri
     auto ring = shard->queryRing.lock();
     BOOST_CHECK_EQUAL(ring->size(), entriesPerShard);
     for (const auto& entry : *ring) {
-      BOOST_CHECK_EQUAL(entry.name, qname);
-      BOOST_CHECK_EQUAL(entry.qtype, qtype);
-      BOOST_CHECK_EQUAL(entry.size, size);
-      BOOST_CHECK_EQUAL(entry.when.tv_sec, now.tv_sec);
-      BOOST_CHECK_EQUAL(entry.requestor.toStringWithPort(), requestor2.toStringWithPort());
+      BOOST_CHECK(checkQuery(entry, qname, qtype, size, now, requestor2));
     }
   }
 
@@ -88,13 +114,7 @@ static void test_ring(size_t maxEntries, size_t numberOfShards, size_t nbLockTri
     auto ring = shard->respRing.lock();
     BOOST_CHECK_EQUAL(ring->size(), entriesPerShard);
     for (const auto& entry : *ring) {
-      BOOST_CHECK_EQUAL(entry.name, qname);
-      BOOST_CHECK_EQUAL(entry.qtype, qtype);
-      BOOST_CHECK_EQUAL(entry.size, size);
-      BOOST_CHECK_EQUAL(entry.when.tv_sec, now.tv_sec);
-      BOOST_CHECK_EQUAL(entry.requestor.toStringWithPort(), requestor1.toStringWithPort());
-      BOOST_CHECK_EQUAL(entry.usec, latency);
-      BOOST_CHECK_EQUAL(entry.ds.toStringWithPort(), server.toStringWithPort());
+      BOOST_CHECK(checkResponse(entry, qname, qtype, size, now, requestor1, latency, server));
     }
   }
 
@@ -108,13 +128,7 @@ static void test_ring(size_t maxEntries, size_t numberOfShards, size_t nbLockTri
     auto ring = shard->respRing.lock();
     BOOST_CHECK_EQUAL(ring->size(), entriesPerShard);
     for (const auto& entry : *ring) {
-      BOOST_CHECK_EQUAL(entry.name, qname);
-      BOOST_CHECK_EQUAL(entry.qtype, qtype);
-      BOOST_CHECK_EQUAL(entry.size, size);
-      BOOST_CHECK_EQUAL(entry.when.tv_sec, now.tv_sec);
-      BOOST_CHECK_EQUAL(entry.requestor.toStringWithPort(), requestor2.toStringWithPort());
-      BOOST_CHECK_EQUAL(entry.usec, latency);
-      BOOST_CHECK_EQUAL(entry.ds.toStringWithPort(), server.toStringWithPort());
+      BOOST_CHECK(checkResponse(entry, qname, qtype, size, now, requestor2, latency, server));
     }
   }
 }
@@ -259,11 +273,7 @@ BOOST_AUTO_TEST_CASE(test_Rings_Threaded) {
       BOOST_WARN_GT(ring->size(), entriesPerShard * 0.95);
       totalQueries += ring->size();
       for (const auto& entry : *ring) {
-        BOOST_CHECK_EQUAL(entry.name, qname);
-        BOOST_CHECK_EQUAL(entry.qtype, qtype);
-        BOOST_CHECK_EQUAL(entry.size, size);
-        BOOST_CHECK_EQUAL(entry.when.tv_sec, now.tv_sec);
-        BOOST_CHECK_EQUAL(entry.requestor.toStringWithPort(), requestor.toStringWithPort());
+        BOOST_CHECK(checkQuery(entry, qname, qtype, size, now, requestor));
       }
     }
     {
@@ -275,13 +285,7 @@ BOOST_AUTO_TEST_CASE(test_Rings_Threaded) {
       BOOST_WARN_GT(ring->size(), entriesPerShard * 0.95);
       totalResponses += ring->size();
       for (const auto& entry : *ring) {
-        BOOST_CHECK_EQUAL(entry.name, qname);
-        BOOST_CHECK_EQUAL(entry.qtype, qtype);
-        BOOST_CHECK_EQUAL(entry.size, size);
-        BOOST_CHECK_EQUAL(entry.when.tv_sec, now.tv_sec);
-        BOOST_CHECK_EQUAL(entry.requestor.toStringWithPort(), requestor.toStringWithPort());
-        BOOST_CHECK_EQUAL(entry.usec, latency);
-        BOOST_CHECK_EQUAL(entry.ds.toStringWithPort(), server.toStringWithPort());
+        BOOST_CHECK(checkResponse(entry, qname, qtype, size, now, requestor, latency, server));
       }
     }
   }