]> git.ipfire.org Git - thirdparty/pdns.git/blobdiff - pdns/recursordist/test-syncres_cc2.cc
Correct depth increments.
[thirdparty/pdns.git] / pdns / recursordist / test-syncres_cc2.cc
index 4f27cb55256226318c1513a27cc4530e455eb2c0..618fb271c3a5608835c18d8fa31f716228954d0e 100644 (file)
@@ -5,7 +5,8 @@
 
 BOOST_AUTO_TEST_SUITE(syncres_cc2)
 
-BOOST_AUTO_TEST_CASE(test_referral_depth) {
+static void do_test_referral_depth(bool limited)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
 
@@ -14,57 +15,89 @@ BOOST_AUTO_TEST_CASE(test_referral_depth) {
   size_t queries = 0;
   const DNSName target("www.powerdns.com.");
 
-  sr->setAsyncCallback([target,&queries](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+  sr->setAsyncCallback([target, &queries](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    queries++;
 
-      queries++;
+    if (isRootServer(ip)) {
+      setLWResult(res, 0, false, false, true);
 
-      if (isRootServer(ip)) {
-        setLWResult(res, 0, false, false, true);
-
-        if (domain == DNSName("www.powerdns.com.")) {
-          addRecordToLW(res, domain, QType::NS, "ns.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
-        }
-        else if (domain == DNSName("ns.powerdns.com.")) {
-          addRecordToLW(res, domain, QType::NS, "ns1.powerdns.org.", DNSResourceRecord::AUTHORITY, 172800);
-        }
-        else if (domain == DNSName("ns1.powerdns.org.")) {
-          addRecordToLW(res, domain, QType::NS, "ns2.powerdns.org.", DNSResourceRecord::AUTHORITY, 172800);
-        }
-        else if (domain == DNSName("ns2.powerdns.org.")) {
-          addRecordToLW(res, domain, QType::NS, "ns3.powerdns.org.", DNSResourceRecord::AUTHORITY, 172800);
-        }
-        else if (domain == DNSName("ns3.powerdns.org.")) {
-          addRecordToLW(res, domain, QType::NS, "ns4.powerdns.org.", DNSResourceRecord::AUTHORITY, 172800);
-        }
-        else if (domain == DNSName("ns4.powerdns.org.")) {
-          addRecordToLW(res, domain, QType::NS, "ns5.powerdns.org.", DNSResourceRecord::AUTHORITY, 172800);
-          addRecordToLW(res, domain, QType::A, "192.0.2.1", DNSResourceRecord::AUTHORITY, 172800);
-        }
-
-        return 1;
-      } else if (ip == ComboAddress("192.0.2.1:53")) {
+      if (domain == DNSName("www.powerdns.com.")) {
+        addRecordToLW(res, domain, QType::NS, "ns.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
+      }
+      else if (domain == DNSName("ns.powerdns.com.")) {
+        addRecordToLW(res, domain, QType::NS, "ns1.powerdns.org.", DNSResourceRecord::AUTHORITY, 172800);
+      }
+      else if (domain == DNSName("ns1.powerdns.org.")) {
+        addRecordToLW(res, domain, QType::NS, "ns2.powerdns.org.", DNSResourceRecord::AUTHORITY, 172800);
+      }
+      else if (domain == DNSName("ns2.powerdns.org.")) {
+        addRecordToLW(res, domain, QType::NS, "ns3.powerdns.org.", DNSResourceRecord::AUTHORITY, 172800);
+      }
+      else if (domain == DNSName("ns3.powerdns.org.")) {
+        addRecordToLW(res, domain, QType::NS, "ns4.powerdns.org.", DNSResourceRecord::AUTHORITY, 172800);
+        addRecordToLW(res, "ns4.powerdns.org.", QType::A, "192.0.2.1", DNSResourceRecord::ADDITIONAL, 3600);
+      }
 
-        setLWResult(res, 0, true, false, false);
+      return 1;
+    }
+    else if (ip == ComboAddress("192.0.2.1:53")) {
+      setLWResult(res, 0, true, false, false);
+      if (domain == DNSName("www.powerdns.com.")) {
         addRecordToLW(res, domain, QType::A, "192.0.2.2");
-        return 1;
       }
+      else {
+        addRecordToLW(res, domain, QType::A, "192.0.2.1");
+      }
+      return 1;
+    }
 
-      return 0;
-    });
-
-  /* Set the maximum depth low */
-  SyncRes::s_maxdepth = 10;
+    return 0;
+  });
 
-  try {
-    vector<DNSRecord> ret;
-    sr->beginResolve(target, QType(QType::A), QClass::IN, ret);
-    BOOST_CHECK(false);
+  if (limited) {
+    /* Set the maximum depth low */
+    SyncRes::s_maxdepth = 4;
+    try {
+      vector<DNSRecord> ret;
+      sr->beginResolve(target, QType(QType::A), QClass::IN, ret);
+      BOOST_CHECK(false);
+    }
+    catch (const ImmediateServFailException& e) {
+      BOOST_CHECK(e.reason.find("max-recursion-depth") != string::npos);
+    }
   }
-  catch(const ImmediateServFailException& e) {
+  else {
+    // Check if the setup with high limit is OK.
+    SyncRes::s_maxdepth = 50;
+    try {
+      vector<DNSRecord> ret;
+      int rcode = sr->beginResolve(target, QType(QType::A), QClass::IN, ret);
+      BOOST_CHECK_EQUAL(rcode, RCode::NoError);
+      BOOST_REQUIRE_EQUAL(ret.size(), 1U);
+      BOOST_CHECK_EQUAL(ret[0].d_name, target);
+      BOOST_REQUIRE(ret[0].d_type == QType::A);
+      BOOST_CHECK(getRR<ARecordContent>(ret[0])->getCA() == ComboAddress("192.0.2.2"));
+    }
+    catch (const ImmediateServFailException& e) {
+      BOOST_CHECK(false);
+    }
   }
 }
 
-BOOST_AUTO_TEST_CASE(test_cname_qperq) {
+BOOST_AUTO_TEST_CASE(test_referral_depth)
+{
+  // Test with limit
+  do_test_referral_depth(true);
+}
+
+BOOST_AUTO_TEST_CASE(test_referral_depth_ok)
+{
+  // Test with default limit
+  do_test_referral_depth(false);
+}
+
+BOOST_AUTO_TEST_CASE(test_cname_qperq)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
 
@@ -73,25 +106,25 @@ BOOST_AUTO_TEST_CASE(test_cname_qperq) {
   size_t queries = 0;
   const DNSName target("cname.powerdns.com.");
 
-  sr->setAsyncCallback([target,&queries](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+  sr->setAsyncCallback([target, &queries](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    queries++;
 
-      queries++;
+    if (isRootServer(ip)) {
 
-      if (isRootServer(ip)) {
-
-        setLWResult(res, 0, false, false, true);
-        addRecordToLW(res, domain, QType::NS, "a.gtld-servers.net.", DNSResourceRecord::AUTHORITY, 172800);
-        addRecordToLW(res, "a.gtld-servers.net.", QType::A, "192.0.2.1", DNSResourceRecord::ADDITIONAL, 3600);
-        return 1;
-      } else if (ip == ComboAddress("192.0.2.1:53")) {
+      setLWResult(res, 0, false, false, true);
+      addRecordToLW(res, domain, QType::NS, "a.gtld-servers.net.", DNSResourceRecord::AUTHORITY, 172800);
+      addRecordToLW(res, "a.gtld-servers.net.", QType::A, "192.0.2.1", DNSResourceRecord::ADDITIONAL, 3600);
+      return 1;
+    }
+    else if (ip == ComboAddress("192.0.2.1:53")) {
 
-        setLWResult(res, 0, true, false, false);
-        addRecordToLW(res, domain, QType::CNAME, std::to_string(queries) + "-cname.powerdns.com");
-        return 1;
-      }
+      setLWResult(res, 0, true, false, false);
+      addRecordToLW(res, domain, QType::CNAME, std::to_string(queries) + "-cname.powerdns.com");
+      return 1;
+    }
 
-      return 0;
-    });
+    return 0;
+  });
 
   /* Set the maximum number of questions very low */
   SyncRes::s_maxqperq = 5;
@@ -101,12 +134,13 @@ BOOST_AUTO_TEST_CASE(test_cname_qperq) {
     sr->beginResolve(target, QType(QType::A), QClass::IN, ret);
     BOOST_CHECK(false);
   }
-  catch(const ImmediateServFailException& e) {
+  catch (const ImmediateServFailException& e) {
     BOOST_CHECK_EQUAL(queries, SyncRes::s_maxqperq);
   }
 }
 
-BOOST_AUTO_TEST_CASE(test_throttled_server) {
+BOOST_AUTO_TEST_CASE(test_throttled_server)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
 
@@ -116,26 +150,26 @@ BOOST_AUTO_TEST_CASE(test_throttled_server) {
   const ComboAddress ns("192.0.2.1:53");
   size_t queriesToNS = 0;
 
-  sr->setAsyncCallback([target,ns,&queriesToNS](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+  sr->setAsyncCallback([target, ns, &queriesToNS](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    if (isRootServer(ip)) {
 
-      if (isRootServer(ip)) {
-
-        setLWResult(res, 0, false, false, true);
-        addRecordToLW(res, domain, QType::NS, "a.gtld-servers.net.", DNSResourceRecord::AUTHORITY, 172800);
-        addRecordToLW(res, "a.gtld-servers.net.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 3600);
-        return 1;
-      } else if (ip == ns) {
+      setLWResult(res, 0, false, false, true);
+      addRecordToLW(res, domain, QType::NS, "a.gtld-servers.net.", DNSResourceRecord::AUTHORITY, 172800);
+      addRecordToLW(res, "a.gtld-servers.net.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 3600);
+      return 1;
+    }
+    else if (ip == ns) {
 
-        queriesToNS++;
+      queriesToNS++;
 
-        setLWResult(res, 0, true, false, false);
-        addRecordToLW(res, domain, QType::A, "192.0.2.2");
+      setLWResult(res, 0, true, false, false);
+      addRecordToLW(res, domain, QType::A, "192.0.2.2");
 
-        return 1;
-      }
+      return 1;
+    }
 
-      return 0;
-    });
+    return 0;
+  });
 
   /* mark ns as down */
   time_t now = sr->getNow().tv_sec;
@@ -149,7 +183,8 @@ BOOST_AUTO_TEST_CASE(test_throttled_server) {
   BOOST_CHECK_EQUAL(queriesToNS, 0U);
 }
 
-BOOST_AUTO_TEST_CASE(test_throttled_server_count) {
+BOOST_AUTO_TEST_CASE(test_throttled_server_count)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
 
@@ -170,7 +205,8 @@ BOOST_AUTO_TEST_CASE(test_throttled_server_count) {
   BOOST_CHECK(!SyncRes::isThrottled(now, ns));
 }
 
-BOOST_AUTO_TEST_CASE(test_throttled_server_time) {
+BOOST_AUTO_TEST_CASE(test_throttled_server_time)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
 
@@ -189,7 +225,8 @@ BOOST_AUTO_TEST_CASE(test_throttled_server_time) {
   BOOST_CHECK(!SyncRes::isThrottled(now + 2, ns));
 }
 
-BOOST_AUTO_TEST_CASE(test_dont_query_server) {
+BOOST_AUTO_TEST_CASE(test_dont_query_server)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
 
@@ -199,26 +236,26 @@ BOOST_AUTO_TEST_CASE(test_dont_query_server) {
   const ComboAddress ns("192.0.2.1:53");
   size_t queriesToNS = 0;
 
-  sr->setAsyncCallback([target,ns,&queriesToNS](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
-
-      if (isRootServer(ip)) {
+  sr->setAsyncCallback([target, ns, &queriesToNS](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    if (isRootServer(ip)) {
 
-        setLWResult(res, 0, false, false, true);
-        addRecordToLW(res, domain, QType::NS, "a.gtld-servers.net.", DNSResourceRecord::AUTHORITY, 172800);
-        addRecordToLW(res, "a.gtld-servers.net.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 3600);
-        return 1;
-      } else if (ip == ns) {
+      setLWResult(res, 0, false, false, true);
+      addRecordToLW(res, domain, QType::NS, "a.gtld-servers.net.", DNSResourceRecord::AUTHORITY, 172800);
+      addRecordToLW(res, "a.gtld-servers.net.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 3600);
+      return 1;
+    }
+    else if (ip == ns) {
 
-        queriesToNS++;
+      queriesToNS++;
 
-        setLWResult(res, 0, true, false, false);
-        addRecordToLW(res, domain, QType::A, "192.0.2.2");
+      setLWResult(res, 0, true, false, false);
+      addRecordToLW(res, domain, QType::A, "192.0.2.2");
 
-        return 1;
-      }
+      return 1;
+    }
 
-      return 0;
-    });
+    return 0;
+  });
 
   /* prevent querying this NS */
   SyncRes::addDontQuery(Netmask(ns));
@@ -231,7 +268,8 @@ BOOST_AUTO_TEST_CASE(test_dont_query_server) {
   BOOST_CHECK_EQUAL(queriesToNS, 0U);
 }
 
-BOOST_AUTO_TEST_CASE(test_root_nx_trust) {
+BOOST_AUTO_TEST_CASE(test_root_nx_trust)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
 
@@ -243,32 +281,32 @@ BOOST_AUTO_TEST_CASE(test_root_nx_trust) {
   size_t queriesCount = 0;
 
   sr->setAsyncCallback([target1, target2, ns, &queriesCount](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    queriesCount++;
 
-      queriesCount++;
-
-      if (isRootServer(ip)) {
+    if (isRootServer(ip)) {
 
-        if (domain == target1) {
-          setLWResult(res, RCode::NXDomain, true, false, true);
-          addRecordToLW(res, ".", QType::SOA, "a.root-servers.net. nstld.verisign-grs.com. 2017032800 1800 900 604800 86400", DNSResourceRecord::AUTHORITY, 86400);
-        }
-        else {
-          setLWResult(res, 0, true, false, true);
-          addRecordToLW(res, domain, QType::NS, "a.gtld-servers.net.", DNSResourceRecord::AUTHORITY, 172800);
-          addRecordToLW(res, "a.gtld-servers.net.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 3600);
-        }
+      if (domain == target1) {
+        setLWResult(res, RCode::NXDomain, true, false, true);
+        addRecordToLW(res, ".", QType::SOA, "a.root-servers.net. nstld.verisign-grs.com. 2017032800 1800 900 604800 86400", DNSResourceRecord::AUTHORITY, 86400);
+      }
+      else {
+        setLWResult(res, 0, true, false, true);
+        addRecordToLW(res, domain, QType::NS, "a.gtld-servers.net.", DNSResourceRecord::AUTHORITY, 172800);
+        addRecordToLW(res, "a.gtld-servers.net.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 3600);
+      }
 
-        return 1;
-      } else if (ip == ns) {
+      return 1;
+    }
+    else if (ip == ns) {
 
-        setLWResult(res, 0, true, false, false);
-        addRecordToLW(res, domain, QType::A, "192.0.2.2");
+      setLWResult(res, 0, true, false, false);
+      addRecordToLW(res, domain, QType::A, "192.0.2.2");
 
-        return 1;
-      }
+      return 1;
+    }
 
-      return 0;
-    });
+    return 0;
+  });
 
   SyncRes::s_maxnegttl = 3600;
 
@@ -291,7 +329,8 @@ BOOST_AUTO_TEST_CASE(test_root_nx_trust) {
   BOOST_CHECK_EQUAL(queriesCount, 1U);
 }
 
-BOOST_AUTO_TEST_CASE(test_root_nx_trust_specific) {
+BOOST_AUTO_TEST_CASE(test_root_nx_trust_specific)
+{
   std::unique_ptr<SyncRes> sr;
   initSR();
   initSR(sr, true, false);
@@ -307,32 +346,32 @@ BOOST_AUTO_TEST_CASE(test_root_nx_trust_specific) {
      We should add target1 to the negcache, but not "com.". */
 
   sr->setAsyncCallback([target1, target2, ns, &queriesCount](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    queriesCount++;
 
-      queriesCount++;
-
-      if (isRootServer(ip)) {
+    if (isRootServer(ip)) {
 
-        if (domain == target1) {
-          setLWResult(res, RCode::NXDomain, true, false, true);
-          addRecordToLW(res, "com.", QType::SOA, "a.root-servers.net. nstld.verisign-grs.com. 2017032800 1800 900 604800 86400", DNSResourceRecord::AUTHORITY, 86400);
-        }
-        else {
-          setLWResult(res, 0, true, false, true);
-          addRecordToLW(res, domain, QType::NS, "a.gtld-servers.net.", DNSResourceRecord::AUTHORITY, 172800);
-          addRecordToLW(res, "a.gtld-servers.net.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 3600);
-        }
+      if (domain == target1) {
+        setLWResult(res, RCode::NXDomain, true, false, true);
+        addRecordToLW(res, "com.", QType::SOA, "a.root-servers.net. nstld.verisign-grs.com. 2017032800 1800 900 604800 86400", DNSResourceRecord::AUTHORITY, 86400);
+      }
+      else {
+        setLWResult(res, 0, true, false, true);
+        addRecordToLW(res, domain, QType::NS, "a.gtld-servers.net.", DNSResourceRecord::AUTHORITY, 172800);
+        addRecordToLW(res, "a.gtld-servers.net.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 3600);
+      }
 
-        return 1;
-      } else if (ip == ns) {
+      return 1;
+    }
+    else if (ip == ns) {
 
-        setLWResult(res, 0, true, false, false);
-        addRecordToLW(res, domain, QType::A, "192.0.2.2");
+      setLWResult(res, 0, true, false, false);
+      addRecordToLW(res, domain, QType::A, "192.0.2.2");
 
-        return 1;
-      }
+      return 1;
+    }
 
-      return 0;
-    });
+    return 0;
+  });
 
   vector<DNSRecord> ret;
   int res = sr->beginResolve(target1, QType(QType::A), QClass::IN, ret);
@@ -356,7 +395,8 @@ BOOST_AUTO_TEST_CASE(test_root_nx_trust_specific) {
   BOOST_CHECK_EQUAL(queriesCount, 3U);
 }
 
-BOOST_AUTO_TEST_CASE(test_root_nx_dont_trust) {
+BOOST_AUTO_TEST_CASE(test_root_nx_dont_trust)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
 
@@ -368,32 +408,32 @@ BOOST_AUTO_TEST_CASE(test_root_nx_dont_trust) {
   size_t queriesCount = 0;
 
   sr->setAsyncCallback([target1, target2, ns, &queriesCount](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    queriesCount++;
 
-      queriesCount++;
-
-      if (isRootServer(ip)) {
+    if (isRootServer(ip)) {
 
-        if (domain == target1) {
-          setLWResult(res, RCode::NXDomain, true, false, true);
-          addRecordToLW(res, ".", QType::SOA, "a.root-servers.net. nstld.verisign-grs.com. 2017032800 1800 900 604800 86400", DNSResourceRecord::AUTHORITY, 86400);
-        }
-        else {
-          setLWResult(res, 0, true, false, true);
-          addRecordToLW(res, domain, QType::NS, "a.gtld-servers.net.", DNSResourceRecord::AUTHORITY, 172800);
-          addRecordToLW(res, "a.gtld-servers.net.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 3600);
-        }
+      if (domain == target1) {
+        setLWResult(res, RCode::NXDomain, true, false, true);
+        addRecordToLW(res, ".", QType::SOA, "a.root-servers.net. nstld.verisign-grs.com. 2017032800 1800 900 604800 86400", DNSResourceRecord::AUTHORITY, 86400);
+      }
+      else {
+        setLWResult(res, 0, true, false, true);
+        addRecordToLW(res, domain, QType::NS, "a.gtld-servers.net.", DNSResourceRecord::AUTHORITY, 172800);
+        addRecordToLW(res, "a.gtld-servers.net.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 3600);
+      }
 
-        return 1;
-      } else if (ip == ns) {
+      return 1;
+    }
+    else if (ip == ns) {
 
-        setLWResult(res, 0, true, false, false);
-        addRecordToLW(res, domain, QType::A, "192.0.2.2");
+      setLWResult(res, 0, true, false, false);
+      addRecordToLW(res, domain, QType::A, "192.0.2.2");
 
-        return 1;
-      }
+      return 1;
+    }
 
-      return 0;
-    });
+    return 0;
+  });
 
   SyncRes::s_rootNXTrust = false;
 
@@ -415,7 +455,8 @@ BOOST_AUTO_TEST_CASE(test_root_nx_dont_trust) {
   BOOST_CHECK_EQUAL(queriesCount, 3U);
 }
 
-BOOST_AUTO_TEST_CASE(test_rfc8020_nothing_underneath) {
+BOOST_AUTO_TEST_CASE(test_rfc8020_nothing_underneath)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
   SyncRes::s_hardenNXD = SyncRes::HardenNXD::Yes;
@@ -430,21 +471,21 @@ BOOST_AUTO_TEST_CASE(test_rfc8020_nothing_underneath) {
   size_t queriesCount = 0;
 
   sr->setAsyncCallback([ns, &queriesCount](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    queriesCount++;
 
-      queriesCount++;
-
-      if (isRootServer(ip)) {
-        setLWResult(res, 0, false, false, true);
-        addRecordToLW(res, "powerdns.com.", QType::NS, "ns1.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
-        addRecordToLW(res, "ns1.powerdns.com.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 3600);
-        return 1;
-      } else if (ip == ns) {
-        setLWResult(res, RCode::NXDomain, true, false, false);
-        addRecordToLW(res, "powerdns.com.", QType::SOA, "ns1.powerdns.com. hostmaster.powerdns.com. 2017032800 1800 900 604800 86400", DNSResourceRecord::AUTHORITY, 86400);
-        return 1;
-      }
-      return 0;
-    });
+    if (isRootServer(ip)) {
+      setLWResult(res, 0, false, false, true);
+      addRecordToLW(res, "powerdns.com.", QType::NS, "ns1.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
+      addRecordToLW(res, "ns1.powerdns.com.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 3600);
+      return 1;
+    }
+    else if (ip == ns) {
+      setLWResult(res, RCode::NXDomain, true, false, false);
+      addRecordToLW(res, "powerdns.com.", QType::SOA, "ns1.powerdns.com. hostmaster.powerdns.com. 2017032800 1800 900 604800 86400", DNSResourceRecord::AUTHORITY, 86400);
+      return 1;
+    }
+    return 0;
+  });
 
   vector<DNSRecord> ret;
   int res = sr->beginResolve(target1, QType(QType::A), QClass::IN, ret);
@@ -510,8 +551,9 @@ BOOST_AUTO_TEST_CASE(test_rfc8020_nothing_underneath) {
   // reset
   SyncRes::s_hardenNXD = SyncRes::HardenNXD::DNSSEC;
 }
-  
-BOOST_AUTO_TEST_CASE(test_rfc8020_nothing_underneath_dnssec) {
+
+BOOST_AUTO_TEST_CASE(test_rfc8020_nothing_underneath_dnssec)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr, true);
   setDNSSECValidation(sr, DNSSECMode::ValidateAll);
@@ -537,7 +579,7 @@ BOOST_AUTO_TEST_CASE(test_rfc8020_nothing_underneath_dnssec) {
 
   size_t queriesCount = 0;
 
-  sr->setAsyncCallback([target1,target2,target3,target4,&queriesCount,keys](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+  sr->setAsyncCallback([target1, target2, target3, target4, &queriesCount, keys](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
     queriesCount++;
 
     DNSName auth = domain;
@@ -549,7 +591,7 @@ BOOST_AUTO_TEST_CASE(test_rfc8020_nothing_underneath_dnssec) {
         setLWResult(res, RCode::NXDomain, true, false, true);
         addRecordToLW(res, DNSName("powerdns.com."), QType::SOA, "pdns-public-ns1.powerdns.com. pieter\\.lexis.powerdns.com. 2017032301 10800 3600 604800 3600", DNSResourceRecord::AUTHORITY, 3600);
         addRRSIG(keys, res->d_records, auth, 300);
-        addNSECRecordToLW(DNSName("wwa.powerdns.com."), DNSName("wwz.powerdns.com."), { QType::RRSIG, QType::NSEC }, 600, res->d_records);
+        addNSECRecordToLW(DNSName("wwa.powerdns.com."), DNSName("wwz.powerdns.com."), {QType::RRSIG, QType::NSEC}, 600, res->d_records);
         addRRSIG(keys, res->d_records, auth, 300);
         return 1;
       }
@@ -592,21 +634,15 @@ BOOST_AUTO_TEST_CASE(test_rfc8020_nothing_underneath_dnssec) {
             addRecordToLW(res, "ns1.powerdns.com.", QType::A, "192.0.2.2", DNSResourceRecord::ADDITIONAL, 3600);
             addRRSIG(keys, res->d_records, DNSName("powerdns.com"), 300);
           }
-          else {
-            addRecordToLW(res, domain, QType::SOA, "pdns-public-ns1.powerdns.com. pieter\\.lexis.powerdns.com. 2017032301 10800 3600 604800 3600", DNSResourceRecord::AUTHORITY, 3600);
-            addRRSIG(keys, res->d_records, DNSName("powerdns.com"), 300);
-            addNSECRecordToLW(DNSName("nx.powerdns.com."), DNSName("nz.powerdns.com."), { QType::A, QType::NSEC, QType::RRSIG }, 600, res->d_records);
-            addRRSIG(keys, res->d_records, DNSName("powerdns.com"), 300);
-          }
         }
         else {
           setLWResult(res, RCode::NXDomain, true, false, true);
           addRecordToLW(res, DNSName("powerdns.com."), QType::SOA, "pdns-public-ns1.powerdns.com. pieter\\.lexis.powerdns.com. 2017032301 10800 3600 604800 3600", DNSResourceRecord::AUTHORITY, 3600);
           addRRSIG(keys, res->d_records, auth, 300);
-          addNSECRecordToLW(DNSName("wwa.powerdns.com."), DNSName("wwz.powerdns.com."), { QType::RRSIG, QType::NSEC }, 600, res->d_records);
+          addNSECRecordToLW(DNSName("wwa.powerdns.com."), DNSName("wwz.powerdns.com."), {QType::RRSIG, QType::NSEC}, 600, res->d_records);
           addRRSIG(keys, res->d_records, auth, 300);
           /* add wildcard denial */
-          addNSECRecordToLW(DNSName("powerdns.com."), DNSName("a.powerdns.com."), { QType::RRSIG, QType::NSEC }, 600, res->d_records);
+          addNSECRecordToLW(DNSName("powerdns.com."), DNSName("a.powerdns.com."), {QType::RRSIG, QType::NSEC}, 600, res->d_records);
           addRRSIG(keys, res->d_records, auth, 300);
         }
         return 1;
@@ -689,7 +725,8 @@ BOOST_AUTO_TEST_CASE(test_rfc8020_nothing_underneath_dnssec) {
   SyncRes::s_hardenNXD = SyncRes::HardenNXD::DNSSEC;
 }
 
-BOOST_AUTO_TEST_CASE(test_rfc8020_nodata) {
+BOOST_AUTO_TEST_CASE(test_rfc8020_nodata)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
   SyncRes::s_hardenNXD = SyncRes::HardenNXD::Yes;
@@ -703,35 +740,35 @@ BOOST_AUTO_TEST_CASE(test_rfc8020_nodata) {
   size_t queriesCount = 0;
 
   sr->setAsyncCallback([ns, target1, target2, target3, &queriesCount](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    queriesCount++;
 
-      queriesCount++;
-
-      if (isRootServer(ip)) {
-        setLWResult(res, 0, false, false, true);
-        addRecordToLW(res, "powerdns.com.", QType::NS, "ns1.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
-        addRecordToLW(res, "ns1.powerdns.com.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 3600);
-        return 1;
-      } else if (ip == ns) {
-        if (domain == target1) { // NODATA for TXT, NOERROR for A
-          if (type == QType::TXT) {
-            setLWResult(res, RCode::NoError, true);
-            addRecordToLW(res, "powerdns.com.", QType::SOA, "ns1.powerdns.com. hostmaster.powerdns.com. 2017032800 1800 900 604800 86400", DNSResourceRecord::AUTHORITY, 86400);
-            return 1;
-          }
-          if (type == QType::A) {
-            setLWResult(res, RCode::NoError, true);
-            addRecordToLW(res, domain, QType::A, "192.0.2.1", DNSResourceRecord::ANSWER, 86400);
-            return 1;
-          }
-        }
-        if (domain == target2 || domain == target3) {
-          setLWResult(res, RCode::NXDomain, true);
+    if (isRootServer(ip)) {
+      setLWResult(res, 0, false, false, true);
+      addRecordToLW(res, "powerdns.com.", QType::NS, "ns1.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
+      addRecordToLW(res, "ns1.powerdns.com.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 3600);
+      return 1;
+    }
+    else if (ip == ns) {
+      if (domain == target1) { // NODATA for TXT, NOERROR for A
+        if (type == QType::TXT) {
+          setLWResult(res, RCode::NoError, true);
           addRecordToLW(res, "powerdns.com.", QType::SOA, "ns1.powerdns.com. hostmaster.powerdns.com. 2017032800 1800 900 604800 86400", DNSResourceRecord::AUTHORITY, 86400);
           return 1;
         }
+        if (type == QType::A) {
+          setLWResult(res, RCode::NoError, true);
+          addRecordToLW(res, domain, QType::A, "192.0.2.1", DNSResourceRecord::ANSWER, 86400);
+          return 1;
+        }
       }
-      return 0;
-    });
+      if (domain == target2 || domain == target3) {
+        setLWResult(res, RCode::NXDomain, true);
+        addRecordToLW(res, "powerdns.com.", QType::SOA, "ns1.powerdns.com. hostmaster.powerdns.com. 2017032800 1800 900 604800 86400", DNSResourceRecord::AUTHORITY, 86400);
+        return 1;
+      }
+    }
+    return 0;
+  });
 
   vector<DNSRecord> ret;
   int res = sr->beginResolve(target1, QType(QType::TXT), QClass::IN, ret);
@@ -762,7 +799,8 @@ BOOST_AUTO_TEST_CASE(test_rfc8020_nodata) {
   BOOST_CHECK_EQUAL(SyncRes::getNegCacheSize(), 2U);
 }
 
-BOOST_AUTO_TEST_CASE(test_rfc8020_nodata_bis) {
+BOOST_AUTO_TEST_CASE(test_rfc8020_nodata_bis)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
   SyncRes::s_hardenNXD = SyncRes::HardenNXD::Yes;
@@ -776,35 +814,35 @@ BOOST_AUTO_TEST_CASE(test_rfc8020_nodata_bis) {
   size_t queriesCount = 0;
 
   sr->setAsyncCallback([ns, target1, target2, target3, &queriesCount](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    queriesCount++;
 
-      queriesCount++;
-
-      if (isRootServer(ip)) {
-        setLWResult(res, 0, false, false, true);
-        addRecordToLW(res, "powerdns.com.", QType::NS, "ns1.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
-        addRecordToLW(res, "ns1.powerdns.com.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 3600);
-        return 1;
-      } else if (ip == ns) {
-        if (domain == target1) { // NODATA for TXT, NOERROR for A
-          if (type == QType::TXT) {
-            setLWResult(res, RCode::NoError, true);
-            addRecordToLW(res, "powerdns.com.", QType::SOA, "ns1.powerdns.com. hostmaster.powerdns.com. 2017032800 1800 900 604800 86400", DNSResourceRecord::AUTHORITY, 86400);
-            return 1;
-          }
-          if (type == QType::A) {
-            setLWResult(res, RCode::NoError, true);
-            addRecordToLW(res, domain, QType::A, "192.0.2.1", DNSResourceRecord::ANSWER, 86400);
-            return 1;
-          }
-        }
-        if (domain == target2 || domain == target3) {
-          setLWResult(res, RCode::NXDomain, true);
+    if (isRootServer(ip)) {
+      setLWResult(res, 0, false, false, true);
+      addRecordToLW(res, "powerdns.com.", QType::NS, "ns1.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
+      addRecordToLW(res, "ns1.powerdns.com.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 3600);
+      return 1;
+    }
+    else if (ip == ns) {
+      if (domain == target1) { // NODATA for TXT, NOERROR for A
+        if (type == QType::TXT) {
+          setLWResult(res, RCode::NoError, true);
           addRecordToLW(res, "powerdns.com.", QType::SOA, "ns1.powerdns.com. hostmaster.powerdns.com. 2017032800 1800 900 604800 86400", DNSResourceRecord::AUTHORITY, 86400);
           return 1;
         }
+        if (type == QType::A) {
+          setLWResult(res, RCode::NoError, true);
+          addRecordToLW(res, domain, QType::A, "192.0.2.1", DNSResourceRecord::ANSWER, 86400);
+          return 1;
+        }
       }
-      return 0;
-    });
+      if (domain == target2 || domain == target3) {
+        setLWResult(res, RCode::NXDomain, true);
+        addRecordToLW(res, "powerdns.com.", QType::SOA, "ns1.powerdns.com. hostmaster.powerdns.com. 2017032800 1800 900 604800 86400", DNSResourceRecord::AUTHORITY, 86400);
+        return 1;
+      }
+    }
+    return 0;
+  });
 
   vector<DNSRecord> ret;
   int res = sr->beginResolve(target1, QType(QType::TXT), QClass::IN, ret);
@@ -835,7 +873,8 @@ BOOST_AUTO_TEST_CASE(test_rfc8020_nodata_bis) {
   BOOST_CHECK_EQUAL(SyncRes::getNegCacheSize(), 2U);
 }
 
-BOOST_AUTO_TEST_CASE(test_skip_negcache_for_variable_response) {
+BOOST_AUTO_TEST_CASE(test_skip_negcache_for_variable_response)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
 
@@ -850,38 +889,38 @@ BOOST_AUTO_TEST_CASE(test_skip_negcache_for_variable_response) {
   incomingECS.source = Netmask("192.0.2.128/32");
   sr->setQuerySource(ComboAddress(), boost::optional<const EDNSSubnetOpts&>(incomingECS));
 
-  sr->setAsyncCallback([target,cnameTarget](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+  sr->setAsyncCallback([target, cnameTarget](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    BOOST_REQUIRE(srcmask);
+    BOOST_CHECK_EQUAL(srcmask->toString(), "192.0.2.0/24");
 
-      BOOST_REQUIRE(srcmask);
-      BOOST_CHECK_EQUAL(srcmask->toString(), "192.0.2.0/24");
+    if (isRootServer(ip)) {
+      setLWResult(res, 0, false, false, true);
+      addRecordToLW(res, "powerdns.com.", QType::NS, "pdns-public-ns1.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
+      addRecordToLW(res, "pdns-public-ns1.powerdns.com.", QType::A, "192.0.2.1", DNSResourceRecord::ADDITIONAL, 3600);
 
-      if (isRootServer(ip)) {
-        setLWResult(res, 0, false, false, true);
-        addRecordToLW(res, "powerdns.com.", QType::NS, "pdns-public-ns1.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
-        addRecordToLW(res, "pdns-public-ns1.powerdns.com.", QType::A, "192.0.2.1", DNSResourceRecord::ADDITIONAL, 3600);
-
-        srcmask = boost::none;
+      srcmask = boost::none;
 
-        return 1;
-      } else if (ip == ComboAddress("192.0.2.1:53")) {
-        if (domain == target) {
-          /* Type 2 NXDOMAIN (rfc2308 section-2.1) */
-          setLWResult(res, RCode::NXDomain, true, false, true);
-          addRecordToLW(res, domain, QType::CNAME, cnameTarget.toString());
-          addRecordToLW(res, "powerdns.com", QType::SOA, "pdns-public-ns1.powerdns.com. pieter\\.lexis.powerdns.com. 2017032301 10800 3600 604800 3600", DNSResourceRecord::AUTHORITY, 3600);
-        }
-        else if (domain == cnameTarget) {
-          /* we shouldn't get there since the Type NXDOMAIN should have been enough,
+      return 1;
+    }
+    else if (ip == ComboAddress("192.0.2.1:53")) {
+      if (domain == target) {
+        /* Type 2 NXDOMAIN (rfc2308 section-2.1) */
+        setLWResult(res, RCode::NXDomain, true, false, true);
+        addRecordToLW(res, domain, QType::CNAME, cnameTarget.toString());
+        addRecordToLW(res, "powerdns.com", QType::SOA, "pdns-public-ns1.powerdns.com. pieter\\.lexis.powerdns.com. 2017032301 10800 3600 604800 3600", DNSResourceRecord::AUTHORITY, 3600);
+      }
+      else if (domain == cnameTarget) {
+        /* we shouldn't get there since the Type NXDOMAIN should have been enough,
              but we might if we still chase the CNAME. */
-          setLWResult(res, RCode::NXDomain, true, false, true);
-          addRecordToLW(res, "powerdns.com", QType::SOA, "pdns-public-ns1.powerdns.com. pieter\\.lexis.powerdns.com. 2017032301 10800 3600 604800 3600", DNSResourceRecord::AUTHORITY, 3600);
-        }
-
-        return 1;
+        setLWResult(res, RCode::NXDomain, true, false, true);
+        addRecordToLW(res, "powerdns.com", QType::SOA, "pdns-public-ns1.powerdns.com. pieter\\.lexis.powerdns.com. 2017032301 10800 3600 604800 3600", DNSResourceRecord::AUTHORITY, 3600);
       }
 
-      return 0;
-    });
+      return 1;
+    }
+
+    return 0;
+  });
 
   vector<DNSRecord> ret;
   int res = sr->beginResolve(target, QType(QType::A), QClass::IN, ret);
@@ -891,7 +930,8 @@ BOOST_AUTO_TEST_CASE(test_skip_negcache_for_variable_response) {
   BOOST_CHECK_EQUAL(SyncRes::getNegCacheSize(), 0U);
 }
 
-BOOST_AUTO_TEST_CASE(test_ecs_cache_limit_allowed) {
+BOOST_AUTO_TEST_CASE(test_ecs_cache_limit_allowed)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
 
@@ -907,15 +947,14 @@ BOOST_AUTO_TEST_CASE(test_ecs_cache_limit_allowed) {
   SyncRes::s_ecsipv4cachelimit = 24;
 
   sr->setAsyncCallback([target](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    BOOST_REQUIRE(srcmask);
+    BOOST_CHECK_EQUAL(srcmask->toString(), "192.0.2.0/24");
 
-      BOOST_REQUIRE(srcmask);
-      BOOST_CHECK_EQUAL(srcmask->toString(), "192.0.2.0/24");
-
-      setLWResult(res, 0, true, false, true);
-      addRecordToLW(res, target, QType::A, "192.0.2.1");
+    setLWResult(res, 0, true, false, true);
+    addRecordToLW(res, target, QType::A, "192.0.2.1");
 
-      return 1;
-    });
+    return 1;
+  });
 
   const time_t now = sr->getNow().tv_sec;
   vector<DNSRecord> ret;
@@ -926,11 +965,12 @@ BOOST_AUTO_TEST_CASE(test_ecs_cache_limit_allowed) {
   /* should have been cached */
   const ComboAddress who("192.0.2.128");
   vector<DNSRecord> cached;
-  BOOST_REQUIRE_GT(t_RC->get(now, target, QType(QType::A), true, &cached, who), 0);
+  BOOST_REQUIRE_GT(s_RC->get(now, target, QType(QType::A), true, &cached, who), 0);
   BOOST_REQUIRE_EQUAL(cached.size(), 1U);
 }
 
-BOOST_AUTO_TEST_CASE(test_ecs_cache_limit_no_ttl_limit_allowed) {
+BOOST_AUTO_TEST_CASE(test_ecs_cache_limit_no_ttl_limit_allowed)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
 
@@ -946,15 +986,14 @@ BOOST_AUTO_TEST_CASE(test_ecs_cache_limit_no_ttl_limit_allowed) {
   SyncRes::s_ecsipv4cachelimit = 16;
 
   sr->setAsyncCallback([target](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    BOOST_REQUIRE(srcmask);
+    BOOST_CHECK_EQUAL(srcmask->toString(), "192.0.2.0/24");
 
-      BOOST_REQUIRE(srcmask);
-      BOOST_CHECK_EQUAL(srcmask->toString(), "192.0.2.0/24");
-
-      setLWResult(res, 0, true, false, true);
-      addRecordToLW(res, target, QType::A, "192.0.2.1");
+    setLWResult(res, 0, true, false, true);
+    addRecordToLW(res, target, QType::A, "192.0.2.1");
 
-      return 1;
-    });
+    return 1;
+  });
 
   const time_t now = sr->getNow().tv_sec;
   vector<DNSRecord> ret;
@@ -965,131 +1004,131 @@ BOOST_AUTO_TEST_CASE(test_ecs_cache_limit_no_ttl_limit_allowed) {
   /* should have been cached because /24 is more specific than /16 but TTL limit is nof effective */
   const ComboAddress who("192.0.2.128");
   vector<DNSRecord> cached;
-  BOOST_REQUIRE_GT(t_RC->get(now, target, QType(QType::A), true, &cached, who), 0);
+  BOOST_REQUIRE_GT(s_RC->get(now, target, QType(QType::A), true, &cached, who), 0);
   BOOST_REQUIRE_EQUAL(cached.size(), 1U);
 }
 
-BOOST_AUTO_TEST_CASE(test_ecs_cache_ttllimit_allowed) {
-    std::unique_ptr<SyncRes> sr;
-    initSR(sr);
+BOOST_AUTO_TEST_CASE(test_ecs_cache_ttllimit_allowed)
+{
+  std::unique_ptr<SyncRes> sr;
+  initSR(sr);
 
-    primeHints();
+  primeHints();
 
-    const DNSName target("www.powerdns.com.");
+  const DNSName target("www.powerdns.com.");
 
-    SyncRes::addEDNSDomain(DNSName("powerdns.com."));
+  SyncRes::addEDNSDomain(DNSName("powerdns.com."));
 
-    EDNSSubnetOpts incomingECS;
-    incomingECS.source = Netmask("192.0.2.128/32");
-    sr->setQuerySource(ComboAddress(), boost::optional<const EDNSSubnetOpts&>(incomingECS));
-    SyncRes::s_ecscachelimitttl = 30;
+  EDNSSubnetOpts incomingECS;
+  incomingECS.source = Netmask("192.0.2.128/32");
+  sr->setQuerySource(ComboAddress(), boost::optional<const EDNSSubnetOpts&>(incomingECS));
+  SyncRes::s_ecscachelimitttl = 30;
 
-    sr->setAsyncCallback([target](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+  sr->setAsyncCallback([target](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    BOOST_REQUIRE(srcmask);
+    BOOST_CHECK_EQUAL(srcmask->toString(), "192.0.2.0/24");
 
-      BOOST_REQUIRE(srcmask);
-      BOOST_CHECK_EQUAL(srcmask->toString(), "192.0.2.0/24");
+    setLWResult(res, 0, true, false, true);
+    addRecordToLW(res, target, QType::A, "192.0.2.1");
 
-      setLWResult(res, 0, true, false, true);
-      addRecordToLW(res, target, QType::A, "192.0.2.1");
+    return 1;
+  });
 
-      return 1;
-    });
+  const time_t now = sr->getNow().tv_sec;
+  vector<DNSRecord> ret;
+  int res = sr->beginResolve(target, QType(QType::A), QClass::IN, ret);
+  BOOST_CHECK_EQUAL(res, RCode::NoError);
+  BOOST_CHECK_EQUAL(ret.size(), 1U);
 
-    const time_t now = sr->getNow().tv_sec;
-    vector<DNSRecord> ret;
-    int res = sr->beginResolve(target, QType(QType::A), QClass::IN, ret);
-    BOOST_CHECK_EQUAL(res, RCode::NoError);
-    BOOST_CHECK_EQUAL(ret.size(), 1U);
-
-    /* should have been cached */
-    const ComboAddress who("192.0.2.128");
-    vector<DNSRecord> cached;
-    BOOST_REQUIRE_GT(t_RC->get(now, target, QType(QType::A), true, &cached, who), 0);
-    BOOST_REQUIRE_EQUAL(cached.size(), 1U);
+  /* should have been cached */
+  const ComboAddress who("192.0.2.128");
+  vector<DNSRecord> cached;
+  BOOST_REQUIRE_GT(s_RC->get(now, target, QType(QType::A), true, &cached, who), 0);
+  BOOST_REQUIRE_EQUAL(cached.size(), 1U);
 }
 
-BOOST_AUTO_TEST_CASE(test_ecs_cache_ttllimit_and_scope_allowed) {
-    std::unique_ptr<SyncRes> sr;
-    initSR(sr);
+BOOST_AUTO_TEST_CASE(test_ecs_cache_ttllimit_and_scope_allowed)
+{
+  std::unique_ptr<SyncRes> sr;
+  initSR(sr);
 
-    primeHints();
+  primeHints();
 
-    const DNSName target("www.powerdns.com.");
+  const DNSName target("www.powerdns.com.");
 
-    SyncRes::addEDNSDomain(DNSName("powerdns.com."));
+  SyncRes::addEDNSDomain(DNSName("powerdns.com."));
 
-    EDNSSubnetOpts incomingECS;
-    incomingECS.source = Netmask("192.0.2.128/32");
-    sr->setQuerySource(ComboAddress(), boost::optional<const EDNSSubnetOpts&>(incomingECS));
-    SyncRes::s_ecscachelimitttl = 100;
-    SyncRes::s_ecsipv4cachelimit = 24;
+  EDNSSubnetOpts incomingECS;
+  incomingECS.source = Netmask("192.0.2.128/32");
+  sr->setQuerySource(ComboAddress(), boost::optional<const EDNSSubnetOpts&>(incomingECS));
+  SyncRes::s_ecscachelimitttl = 100;
+  SyncRes::s_ecsipv4cachelimit = 24;
 
-    sr->setAsyncCallback([target](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+  sr->setAsyncCallback([target](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    BOOST_REQUIRE(srcmask);
+    BOOST_CHECK_EQUAL(srcmask->toString(), "192.0.2.0/24");
 
-      BOOST_REQUIRE(srcmask);
-      BOOST_CHECK_EQUAL(srcmask->toString(), "192.0.2.0/24");
+    setLWResult(res, 0, true, false, true);
+    addRecordToLW(res, target, QType::A, "192.0.2.1");
 
-      setLWResult(res, 0, true, false, true);
-      addRecordToLW(res, target, QType::A, "192.0.2.1");
+    return 1;
+  });
 
-      return 1;
-    });
+  const time_t now = sr->getNow().tv_sec;
+  vector<DNSRecord> ret;
+  int res = sr->beginResolve(target, QType(QType::A), QClass::IN, ret);
+  BOOST_CHECK_EQUAL(res, RCode::NoError);
+  BOOST_CHECK_EQUAL(ret.size(), 1U);
 
-    const time_t now = sr->getNow().tv_sec;
-    vector<DNSRecord> ret;
-    int res = sr->beginResolve(target, QType(QType::A), QClass::IN, ret);
-    BOOST_CHECK_EQUAL(res, RCode::NoError);
-    BOOST_CHECK_EQUAL(ret.size(), 1U);
-
-    /* should have been cached */
-    const ComboAddress who("192.0.2.128");
-    vector<DNSRecord> cached;
-    BOOST_REQUIRE_GT(t_RC->get(now, target, QType(QType::A), true, &cached, who), 0);
-    BOOST_REQUIRE_EQUAL(cached.size(), 1U);
+  /* should have been cached */
+  const ComboAddress who("192.0.2.128");
+  vector<DNSRecord> cached;
+  BOOST_REQUIRE_GT(s_RC->get(now, target, QType(QType::A), true, &cached, who), 0);
+  BOOST_REQUIRE_EQUAL(cached.size(), 1U);
 }
 
-BOOST_AUTO_TEST_CASE(test_ecs_cache_ttllimit_notallowed) {
-    std::unique_ptr<SyncRes> sr;
-    initSR(sr);
+BOOST_AUTO_TEST_CASE(test_ecs_cache_ttllimit_notallowed)
+{
+  std::unique_ptr<SyncRes> sr;
+  initSR(sr);
 
-    primeHints();
+  primeHints();
 
-    const DNSName target("www.powerdns.com.");
+  const DNSName target("www.powerdns.com.");
 
-    SyncRes::addEDNSDomain(DNSName("powerdns.com."));
+  SyncRes::addEDNSDomain(DNSName("powerdns.com."));
 
-    EDNSSubnetOpts incomingECS;
-    incomingECS.source = Netmask("192.0.2.128/32");
-    sr->setQuerySource(ComboAddress(), boost::optional<const EDNSSubnetOpts&>(incomingECS));
-    SyncRes::s_ecscachelimitttl = 100;
-    SyncRes::s_ecsipv4cachelimit = 16;
+  EDNSSubnetOpts incomingECS;
+  incomingECS.source = Netmask("192.0.2.128/32");
+  sr->setQuerySource(ComboAddress(), boost::optional<const EDNSSubnetOpts&>(incomingECS));
+  SyncRes::s_ecscachelimitttl = 100;
+  SyncRes::s_ecsipv4cachelimit = 16;
 
-    sr->setAsyncCallback([target](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+  sr->setAsyncCallback([target](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    BOOST_REQUIRE(srcmask);
+    BOOST_CHECK_EQUAL(srcmask->toString(), "192.0.2.0/24");
 
-      BOOST_REQUIRE(srcmask);
-      BOOST_CHECK_EQUAL(srcmask->toString(), "192.0.2.0/24");
+    setLWResult(res, 0, true, false, true);
+    addRecordToLW(res, target, QType::A, "192.0.2.1");
 
-      setLWResult(res, 0, true, false, true);
-      addRecordToLW(res, target, QType::A, "192.0.2.1");
+    return 1;
+  });
 
-      return 1;
-    });
+  const time_t now = sr->getNow().tv_sec;
+  vector<DNSRecord> ret;
+  int res = sr->beginResolve(target, QType(QType::A), QClass::IN, ret);
+  BOOST_CHECK_EQUAL(res, RCode::NoError);
+  BOOST_CHECK_EQUAL(ret.size(), 1U);
 
-    const time_t now = sr->getNow().tv_sec;
-    vector<DNSRecord> ret;
-    int res = sr->beginResolve(target, QType(QType::A), QClass::IN, ret);
-    BOOST_CHECK_EQUAL(res, RCode::NoError);
-    BOOST_CHECK_EQUAL(ret.size(), 1U);
-
-    /* should have NOT been cached because TTL of 60 is too small and /24 is more specific than /16 */
-    const ComboAddress who("192.0.2.128");
-    vector<DNSRecord> cached;
-    BOOST_REQUIRE_LT(t_RC->get(now, target, QType(QType::A), true, &cached, who), 0);
-    BOOST_REQUIRE_EQUAL(cached.size(), 0U);
+  /* should have NOT been cached because TTL of 60 is too small and /24 is more specific than /16 */
+  const ComboAddress who("192.0.2.128");
+  vector<DNSRecord> cached;
+  BOOST_REQUIRE_LT(s_RC->get(now, target, QType(QType::A), true, &cached, who), 0);
+  BOOST_REQUIRE_EQUAL(cached.size(), 0U);
 }
 
-
-BOOST_AUTO_TEST_CASE(test_ns_speed) {
+BOOST_AUTO_TEST_CASE(test_ns_speed)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
 
@@ -1099,55 +1138,55 @@ BOOST_AUTO_TEST_CASE(test_ns_speed) {
 
   std::map<ComboAddress, uint64_t> nsCounts;
 
-  sr->setAsyncCallback([target,&nsCounts](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+  sr->setAsyncCallback([target, &nsCounts](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    if (isRootServer(ip)) {
+      setLWResult(res, 0, false, false, true);
+      addRecordToLW(res, domain, QType::NS, "pdns-public-ns1.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
+      addRecordToLW(res, domain, QType::NS, "pdns-public-ns2.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
+      addRecordToLW(res, domain, QType::NS, "pdns-public-ns3.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
 
-      if (isRootServer(ip)) {
-        setLWResult(res, 0, false, false, true);
-        addRecordToLW(res, domain, QType::NS, "pdns-public-ns1.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
-        addRecordToLW(res, domain, QType::NS, "pdns-public-ns2.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
-        addRecordToLW(res, domain, QType::NS, "pdns-public-ns3.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
+      addRecordToLW(res, "pdns-public-ns1.powerdns.com.", QType::A, "192.0.2.1", DNSResourceRecord::ADDITIONAL, 3600);
+      addRecordToLW(res, "pdns-public-ns1.powerdns.com.", QType::AAAA, "2001:DB8::1", DNSResourceRecord::ADDITIONAL, 3600);
+      addRecordToLW(res, "pdns-public-ns2.powerdns.com.", QType::A, "192.0.2.2", DNSResourceRecord::ADDITIONAL, 3600);
+      addRecordToLW(res, "pdns-public-ns2.powerdns.com.", QType::AAAA, "2001:DB8::2", DNSResourceRecord::ADDITIONAL, 3600);
+      addRecordToLW(res, "pdns-public-ns3.powerdns.com.", QType::A, "192.0.2.3", DNSResourceRecord::ADDITIONAL, 3600);
+      addRecordToLW(res, "pdns-public-ns3.powerdns.com.", QType::AAAA, "2001:DB8::3", DNSResourceRecord::ADDITIONAL, 3600);
 
-        addRecordToLW(res, "pdns-public-ns1.powerdns.com.", QType::A, "192.0.2.1", DNSResourceRecord::ADDITIONAL, 3600);
-        addRecordToLW(res, "pdns-public-ns1.powerdns.com.", QType::AAAA, "2001:DB8::1", DNSResourceRecord::ADDITIONAL, 3600);
-        addRecordToLW(res, "pdns-public-ns2.powerdns.com.", QType::A, "192.0.2.2", DNSResourceRecord::ADDITIONAL, 3600);
-        addRecordToLW(res, "pdns-public-ns2.powerdns.com.", QType::AAAA, "2001:DB8::2", DNSResourceRecord::ADDITIONAL, 3600);
-        addRecordToLW(res, "pdns-public-ns3.powerdns.com.", QType::A, "192.0.2.3", DNSResourceRecord::ADDITIONAL, 3600);
-        addRecordToLW(res, "pdns-public-ns3.powerdns.com.", QType::AAAA, "2001:DB8::3", DNSResourceRecord::ADDITIONAL, 3600);
-
-        return 1;
-      } else {
-        nsCounts[ip]++;
-
-        if (ip == ComboAddress("[2001:DB8::2]:53") || ip == ComboAddress("192.0.2.2:53")) {
-          BOOST_CHECK_LT(nsCounts.size(), 3U);
-
-          /* let's time out on pdns-public-ns2.powerdns.com. */
-          return 0;
-        }
-        else if (ip == ComboAddress("192.0.2.1:53")) {
-          BOOST_CHECK_EQUAL(nsCounts.size(), 3U);
+      return 1;
+    }
+    else {
+      nsCounts[ip]++;
 
-          setLWResult(res, 0, true, false, true);
-          addRecordToLW(res, domain, QType::A, "192.0.2.254");
-          return 1;
-        }
+      if (ip == ComboAddress("[2001:DB8::2]:53") || ip == ComboAddress("192.0.2.2:53")) {
+        BOOST_CHECK_LT(nsCounts.size(), 3U);
 
+        /* let's time out on pdns-public-ns2.powerdns.com. */
         return 0;
       }
+      else if (ip == ComboAddress("192.0.2.1:53")) {
+        BOOST_CHECK_EQUAL(nsCounts.size(), 3U);
+
+        setLWResult(res, 0, true, false, true);
+        addRecordToLW(res, domain, QType::A, "192.0.2.254");
+        return 1;
+      }
 
       return 0;
-    });
+    }
+
+    return 0;
+  });
 
   struct timeval now = sr->getNow();
 
   /* make pdns-public-ns2.powerdns.com. the fastest NS, with its IPv6 address faster than the IPV4 one,
      then pdns-public-ns1.powerdns.com. on IPv4 */
-  SyncRes::submitNSSpeed(DNSName("pdns-public-ns1.powerdns.com."), ComboAddress("192.0.2.1:53"), 100, &now);
-  SyncRes::submitNSSpeed(DNSName("pdns-public-ns1.powerdns.com."), ComboAddress("[2001:DB8::1]:53"), 10000, &now);
-  SyncRes::submitNSSpeed(DNSName("pdns-public-ns2.powerdns.com."), ComboAddress("192.0.2.2:53"), 10, &now);
-  SyncRes::submitNSSpeed(DNSName("pdns-public-ns2.powerdns.com."), ComboAddress("[2001:DB8::2]:53"), 1, &now);
-  SyncRes::submitNSSpeed(DNSName("pdns-public-ns3.powerdns.com."), ComboAddress("192.0.2.3:53"), 10000, &now);
-  SyncRes::submitNSSpeed(DNSName("pdns-public-ns3.powerdns.com."), ComboAddress("[2001:DB8::3]:53"), 10000, &now);
+  SyncRes::submitNSSpeed(DNSName("pdns-public-ns1.powerdns.com."), ComboAddress("192.0.2.1:53"), 100, now);
+  SyncRes::submitNSSpeed(DNSName("pdns-public-ns1.powerdns.com."), ComboAddress("[2001:DB8::1]:53"), 10000, now);
+  SyncRes::submitNSSpeed(DNSName("pdns-public-ns2.powerdns.com."), ComboAddress("192.0.2.2:53"), 10, now);
+  SyncRes::submitNSSpeed(DNSName("pdns-public-ns2.powerdns.com."), ComboAddress("[2001:DB8::2]:53"), 1, now);
+  SyncRes::submitNSSpeed(DNSName("pdns-public-ns3.powerdns.com."), ComboAddress("192.0.2.3:53"), 10000, now);
+  SyncRes::submitNSSpeed(DNSName("pdns-public-ns3.powerdns.com."), ComboAddress("[2001:DB8::3]:53"), 10000, now);
 
   vector<DNSRecord> ret;
   int res = sr->beginResolve(target, QType(QType::A), QClass::IN, ret);
@@ -1159,7 +1198,8 @@ BOOST_AUTO_TEST_CASE(test_ns_speed) {
   BOOST_CHECK_EQUAL(nsCounts[ComboAddress("[2001:DB8::2]:53")], 1U);
 }
 
-BOOST_AUTO_TEST_CASE(test_flawed_nsset) {
+BOOST_AUTO_TEST_CASE(test_flawed_nsset)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
 
@@ -1168,30 +1208,30 @@ BOOST_AUTO_TEST_CASE(test_flawed_nsset) {
   const DNSName target("powerdns.com.");
 
   sr->setAsyncCallback([target](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    if (isRootServer(ip)) {
+      setLWResult(res, 0, false, false, true);
+      addRecordToLW(res, domain, QType::NS, "pdns-public-ns1.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
 
-      if (isRootServer(ip)) {
-        setLWResult(res, 0, false, false, true);
-        addRecordToLW(res, domain, QType::NS, "pdns-public-ns1.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
-
-        addRecordToLW(res, "pdns-public-ns1.powerdns.com.", QType::A, "192.0.2.1", DNSResourceRecord::ADDITIONAL, 3600);
+      addRecordToLW(res, "pdns-public-ns1.powerdns.com.", QType::A, "192.0.2.1", DNSResourceRecord::ADDITIONAL, 3600);
 
-        return 1;
-      } else if (ip == ComboAddress("192.0.2.1:53")) {
-        setLWResult(res, 0, true, false, true);
-        addRecordToLW(res, domain, QType::A, "192.0.2.254");
-        return 1;
-      }
+      return 1;
+    }
+    else if (ip == ComboAddress("192.0.2.1:53")) {
+      setLWResult(res, 0, true, false, true);
+      addRecordToLW(res, domain, QType::A, "192.0.2.254");
+      return 1;
+    }
 
-      return 0;
-    });
+    return 0;
+  });
 
   /* we populate the cache with a flawed NSset, i.e. there is a NS entry but no corresponding glue */
   time_t now = sr->getNow().tv_sec;
   std::vector<DNSRecord> records;
-  std::vector<shared_ptr<RRSIGRecordContent> > sigs;
+  std::vector<shared_ptr<RRSIGRecordContent>> sigs;
   addRecordToList(records, target, QType::NS, "pdns-public-ns1.powerdns.com.", DNSResourceRecord::AUTHORITY, now + 3600);
 
-  t_RC->replace(now, target, QType(QType::NS), records, sigs, vector<std::shared_ptr<DNSRecord>>(), true, boost::optional<Netmask>());
+  s_RC->replace(now, target, QType(QType::NS), records, sigs, vector<std::shared_ptr<DNSRecord>>(), true, boost::optional<Netmask>());
 
   vector<DNSRecord> ret;
   int res = sr->beginResolve(target, QType(QType::A), QClass::IN, ret);
@@ -1199,7 +1239,8 @@ BOOST_AUTO_TEST_CASE(test_flawed_nsset) {
   BOOST_CHECK_EQUAL(ret.size(), 1U);
 }
 
-BOOST_AUTO_TEST_CASE(test_completely_flawed_nsset) {
+BOOST_AUTO_TEST_CASE(test_completely_flawed_nsset)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
 
@@ -1208,23 +1249,23 @@ BOOST_AUTO_TEST_CASE(test_completely_flawed_nsset) {
   const DNSName target("powerdns.com.");
   size_t queriesCount = 0;
 
-  sr->setAsyncCallback([&queriesCount,target](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
-
-      queriesCount++;
+  sr->setAsyncCallback([&queriesCount, target](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    queriesCount++;
 
-      if (isRootServer(ip) && domain == target) {
-        setLWResult(res, 0, false, false, true);
-        addRecordToLW(res, domain, QType::NS, "pdns-public-ns2.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
-        addRecordToLW(res, domain, QType::NS, "pdns-public-ns3.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
-        return 1;
-      } else if (domain == DNSName("pdns-public-ns2.powerdns.com.") || domain == DNSName("pdns-public-ns3.powerdns.com.")){
-        setLWResult(res, 0, true, false, true);
-        addRecordToLW(res, ".", QType::SOA, "a.root-servers.net. nstld.verisign-grs.com. 2017032800 1800 900 604800 86400", DNSResourceRecord::AUTHORITY, 86400);
-        return 1;
-      }
+    if (isRootServer(ip) && domain == target) {
+      setLWResult(res, 0, false, false, true);
+      addRecordToLW(res, domain, QType::NS, "pdns-public-ns2.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
+      addRecordToLW(res, domain, QType::NS, "pdns-public-ns3.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
+      return 1;
+    }
+    else if (domain == DNSName("pdns-public-ns2.powerdns.com.") || domain == DNSName("pdns-public-ns3.powerdns.com.")) {
+      setLWResult(res, 0, true, false, true);
+      addRecordToLW(res, ".", QType::SOA, "a.root-servers.net. nstld.verisign-grs.com. 2017032800 1800 900 604800 86400", DNSResourceRecord::AUTHORITY, 86400);
+      return 1;
+    }
 
-      return 0;
-    });
+    return 0;
+  });
 
   vector<DNSRecord> ret;
   int res = sr->beginResolve(target, QType(QType::A), QClass::IN, ret);
@@ -1234,26 +1275,69 @@ BOOST_AUTO_TEST_CASE(test_completely_flawed_nsset) {
   BOOST_CHECK_EQUAL(queriesCount, 5U);
 }
 
-BOOST_AUTO_TEST_CASE(test_cache_hit) {
+BOOST_AUTO_TEST_CASE(test_completely_flawed_big_nsset)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
 
   primeHints();
 
   const DNSName target("powerdns.com.");
+  size_t queriesCount = 0;
 
-  sr->setAsyncCallback([target](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+  sr->setAsyncCallback([&queriesCount, target](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    queriesCount++;
 
-      return 0;
-    });
+    if (isRootServer(ip) && domain == target) {
+      setLWResult(res, 0, false, false, true);
+      // 20 NS records
+      for (int i = 0; i < 20; i++) {
+        string n = string("pdns-public-ns") + std::to_string(i) + string(".powerdns.com.");
+        addRecordToLW(res, domain, QType::NS, n, DNSResourceRecord::AUTHORITY, 172800);
+      }
+      return 1;
+    }
+    else if (domain.toString().length() > 14 && domain.toString().substr(0, 14) == "pdns-public-ns") {
+      setLWResult(res, 0, true, false, true);
+      addRecordToLW(res, ".", QType::SOA, "a.root-servers.net. nstld.verisign-grs.com. 2017032800 1800 900 604800 86400", DNSResourceRecord::AUTHORITY, 86400);
+      return 1;
+    }
+    return 0;
+  });
+
+  vector<DNSRecord> ret;
+  try {
+    sr->beginResolve(target, QType(QType::A), QClass::IN, ret);
+    BOOST_CHECK(0);
+  }
+  catch (const ImmediateServFailException& ex) {
+    BOOST_CHECK_EQUAL(ret.size(), 0U);
+    // one query to get NSs, then A and AAAA for each NS, 5th NS hits the limit
+    // limit is reduced to 5, because zone publishes many (20) NS
+    BOOST_CHECK_EQUAL(queriesCount, 11);
+  }
+}
 
-  /* we populate the cache with eveything we need */
+BOOST_AUTO_TEST_CASE(test_cache_hit)
+{
+  std::unique_ptr<SyncRes> sr;
+  initSR(sr);
+
+  primeHints();
+
+  const DNSName target("powerdns.com.");
+
+  sr->setAsyncCallback([target](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    return 0;
+  });
+
+  /* we populate the cache with everything we need */
   time_t now = sr->getNow().tv_sec;
   std::vector<DNSRecord> records;
-  std::vector<shared_ptr<RRSIGRecordContent> > sigs;
+  std::vector<shared_ptr<RRSIGRecordContent>> sigs;
 
   addRecordToList(records, target, QType::A, "192.0.2.1", DNSResourceRecord::ANSWER, now + 3600);
-  t_RC->replace(now, target , QType(QType::A), records, sigs, vector<std::shared_ptr<DNSRecord>>(), true, boost::optional<Netmask>());
+  s_RC->replace(now, target, QType(QType::A), records, sigs, vector<std::shared_ptr<DNSRecord>>(), true, boost::optional<Netmask>());
 
   vector<DNSRecord> ret;
   int res = sr->beginResolve(target, QType(QType::A), QClass::IN, ret);
@@ -1261,7 +1345,8 @@ BOOST_AUTO_TEST_CASE(test_cache_hit) {
   BOOST_CHECK_EQUAL(ret.size(), 1U);
 }
 
-BOOST_AUTO_TEST_CASE(test_no_rd) {
+BOOST_AUTO_TEST_CASE(test_no_rd)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
 
@@ -1272,11 +1357,10 @@ BOOST_AUTO_TEST_CASE(test_no_rd) {
 
   sr->setCacheOnly();
 
-  sr->setAsyncCallback([target,&queriesCount](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
-
-      queriesCount++;
-      return 0;
-    });
+  sr->setAsyncCallback([target, &queriesCount](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    queriesCount++;
+    return 0;
+  });
 
   vector<DNSRecord> ret;
   int res = sr->beginResolve(target, QType(QType::A), QClass::IN, ret);
@@ -1285,7 +1369,8 @@ BOOST_AUTO_TEST_CASE(test_no_rd) {
   BOOST_CHECK_EQUAL(queriesCount, 0U);
 }
 
-BOOST_AUTO_TEST_CASE(test_cache_min_max_ttl) {
+BOOST_AUTO_TEST_CASE(test_cache_min_max_ttl)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
 
@@ -1294,24 +1379,24 @@ BOOST_AUTO_TEST_CASE(test_cache_min_max_ttl) {
   const DNSName target("cachettl.powerdns.com.");
   const ComboAddress ns("192.0.2.1:53");
 
-  sr->setAsyncCallback([target,ns](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
-
-      if (isRootServer(ip)) {
+  sr->setAsyncCallback([target, ns](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    if (isRootServer(ip)) {
 
-        setLWResult(res, 0, false, false, true);
-        addRecordToLW(res, domain, QType::NS, "a.gtld-servers.net.", DNSResourceRecord::AUTHORITY, 172800);
-        addRecordToLW(res, "a.gtld-servers.net.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 7200);
-        return 1;
-      } else if (ip == ns) {
+      setLWResult(res, 0, false, false, true);
+      addRecordToLW(res, domain, QType::NS, "a.gtld-servers.net.", DNSResourceRecord::AUTHORITY, 172800);
+      addRecordToLW(res, "a.gtld-servers.net.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 7200);
+      return 1;
+    }
+    else if (ip == ns) {
 
-        setLWResult(res, 0, true, false, false);
-        addRecordToLW(res, domain, QType::A, "192.0.2.2", DNSResourceRecord::ANSWER, 10);
+      setLWResult(res, 0, true, false, false);
+      addRecordToLW(res, domain, QType::A, "192.0.2.2", DNSResourceRecord::ANSWER, 10);
 
-        return 1;
-      }
+      return 1;
+    }
 
-      return 0;
-    });
+    return 0;
+  });
 
   const time_t now = sr->getNow().tv_sec;
   SyncRes::s_minimumTTL = 60;
@@ -1325,19 +1410,20 @@ BOOST_AUTO_TEST_CASE(test_cache_min_max_ttl) {
 
   const ComboAddress who;
   vector<DNSRecord> cached;
-  BOOST_REQUIRE_GT(t_RC->get(now, target, QType(QType::A), true, &cached, who), 0);
+  BOOST_REQUIRE_GT(s_RC->get(now, target, QType(QType::A), true, &cached, who), 0);
   BOOST_REQUIRE_EQUAL(cached.size(), 1U);
   BOOST_REQUIRE_GT(cached[0].d_ttl, now);
   BOOST_CHECK_EQUAL((cached[0].d_ttl - now), SyncRes::s_minimumTTL);
 
   cached.clear();
-  BOOST_REQUIRE_GT(t_RC->get(now, target, QType(QType::NS), false, &cached, who), 0);
+  BOOST_REQUIRE_GT(s_RC->get(now, target, QType(QType::NS), false, &cached, who), 0);
   BOOST_REQUIRE_EQUAL(cached.size(), 1U);
   BOOST_REQUIRE_GT(cached[0].d_ttl, now);
   BOOST_CHECK_LE((cached[0].d_ttl - now), SyncRes::s_maxcachettl);
 }
 
-BOOST_AUTO_TEST_CASE(test_cache_min_max_ecs_ttl) {
+BOOST_AUTO_TEST_CASE(test_cache_min_max_ecs_ttl)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
 
@@ -1351,29 +1437,29 @@ BOOST_AUTO_TEST_CASE(test_cache_min_max_ecs_ttl) {
   sr->setQuerySource(ComboAddress(), boost::optional<const EDNSSubnetOpts&>(incomingECS));
   SyncRes::addEDNSDomain(target);
 
-  sr->setAsyncCallback([target,ns](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
-
-      BOOST_REQUIRE(srcmask);
-      BOOST_CHECK_EQUAL(srcmask->toString(), "192.0.2.0/24");
+  sr->setAsyncCallback([target, ns](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    BOOST_REQUIRE(srcmask);
+    BOOST_CHECK_EQUAL(srcmask->toString(), "192.0.2.0/24");
 
-      if (isRootServer(ip)) {
+    if (isRootServer(ip)) {
 
-        setLWResult(res, 0, false, false, true);
-        addRecordToLW(res, domain, QType::NS, "a.gtld-servers.net.", DNSResourceRecord::AUTHORITY, 172800);
-        addRecordToLW(res, "a.gtld-servers.net.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 20);
-        srcmask = boost::none;
+      setLWResult(res, 0, false, false, true);
+      addRecordToLW(res, domain, QType::NS, "a.gtld-servers.net.", DNSResourceRecord::AUTHORITY, 172800);
+      addRecordToLW(res, "a.gtld-servers.net.", QType::A, ns.toString(), DNSResourceRecord::ADDITIONAL, 20);
+      srcmask = boost::none;
 
-        return 1;
-      } else if (ip == ns) {
+      return 1;
+    }
+    else if (ip == ns) {
 
-        setLWResult(res, 0, true, false, false);
-        addRecordToLW(res, domain, QType::A, "192.0.2.2", DNSResourceRecord::ANSWER, 10);
+      setLWResult(res, 0, true, false, false);
+      addRecordToLW(res, domain, QType::A, "192.0.2.2", DNSResourceRecord::ANSWER, 10);
 
-        return 1;
-      }
+      return 1;
+    }
 
-      return 0;
-    });
+    return 0;
+  });
 
   const time_t now = sr->getNow().tv_sec;
   SyncRes::s_minimumTTL = 60;
@@ -1388,25 +1474,26 @@ BOOST_AUTO_TEST_CASE(test_cache_min_max_ecs_ttl) {
 
   const ComboAddress who("192.0.2.128");
   vector<DNSRecord> cached;
-  BOOST_REQUIRE_GT(t_RC->get(now, target, QType(QType::A), true, &cached, who), 0);
+  BOOST_REQUIRE_GT(s_RC->get(now, target, QType(QType::A), true, &cached, who), 0);
   BOOST_REQUIRE_EQUAL(cached.size(), 1U);
   BOOST_REQUIRE_GT(cached[0].d_ttl, now);
   BOOST_CHECK_EQUAL((cached[0].d_ttl - now), SyncRes::s_minimumECSTTL);
 
   cached.clear();
-  BOOST_REQUIRE_GT(t_RC->get(now, target, QType(QType::NS), false, &cached, who), 0);
+  BOOST_REQUIRE_GT(s_RC->get(now, target, QType(QType::NS), false, &cached, who), 0);
   BOOST_REQUIRE_EQUAL(cached.size(), 1U);
   BOOST_REQUIRE_GT(cached[0].d_ttl, now);
   BOOST_CHECK_LE((cached[0].d_ttl - now), SyncRes::s_maxcachettl);
 
   cached.clear();
-  BOOST_REQUIRE_GT(t_RC->get(now, DNSName("a.gtld-servers.net."), QType(QType::A), false, &cached, who), 0);
+  BOOST_REQUIRE_GT(s_RC->get(now, DNSName("a.gtld-servers.net."), QType(QType::A), false, &cached, who), 0);
   BOOST_REQUIRE_EQUAL(cached.size(), 1U);
   BOOST_REQUIRE_GT(cached[0].d_ttl, now);
   BOOST_CHECK_LE((cached[0].d_ttl - now), SyncRes::s_minimumTTL);
 }
 
-BOOST_AUTO_TEST_CASE(test_cache_expired_ttl) {
+BOOST_AUTO_TEST_CASE(test_cache_expired_ttl)
+{
   std::unique_ptr<SyncRes> sr;
   initSR(sr);
 
@@ -1415,31 +1502,31 @@ BOOST_AUTO_TEST_CASE(test_cache_expired_ttl) {
   const DNSName target("powerdns.com.");
 
   sr->setAsyncCallback([target](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+    if (isRootServer(ip)) {
+      setLWResult(res, 0, false, false, true);
+      addRecordToLW(res, domain, QType::NS, "pdns-public-ns1.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
 
-      if (isRootServer(ip)) {
-        setLWResult(res, 0, false, false, true);
-        addRecordToLW(res, domain, QType::NS, "pdns-public-ns1.powerdns.com.", DNSResourceRecord::AUTHORITY, 172800);
-
-        addRecordToLW(res, "pdns-public-ns1.powerdns.com.", QType::A, "192.0.2.1", DNSResourceRecord::ADDITIONAL, 3600);
+      addRecordToLW(res, "pdns-public-ns1.powerdns.com.", QType::A, "192.0.2.1", DNSResourceRecord::ADDITIONAL, 3600);
 
-        return 1;
-      } else if (ip == ComboAddress("192.0.2.1:53")) {
-        setLWResult(res, 0, true, false, true);
-        addRecordToLW(res, domain, QType::A, "192.0.2.2");
-        return 1;
-      }
+      return 1;
+    }
+    else if (ip == ComboAddress("192.0.2.1:53")) {
+      setLWResult(res, 0, true, false, true);
+      addRecordToLW(res, domain, QType::A, "192.0.2.2");
+      return 1;
+    }
 
-      return 0;
-    });
+    return 0;
+  });
 
   /* we populate the cache with entries that expired 60s ago*/
   const time_t now = sr->getNow().tv_sec;
 
   std::vector<DNSRecord> records;
-  std::vector<shared_ptr<RRSIGRecordContent> > sigs;
+  std::vector<shared_ptr<RRSIGRecordContent>> sigs;
   addRecordToList(records, target, QType::A, "192.0.2.42", DNSResourceRecord::ANSWER, now - 60);
 
-  t_RC->replace(now - 3600, target, QType(QType::A), records, sigs, vector<std::shared_ptr<DNSRecord>>(), true, boost::optional<Netmask>());
+  s_RC->replace(now - 3600, target, QType(QType::A), records, sigs, vector<std::shared_ptr<DNSRecord>>(), true, boost::optional<Netmask>());
 
   vector<DNSRecord> ret;
   int res = sr->beginResolve(target, QType(QType::A), QClass::IN, ret);