From: Otto Moerbeek Date: Fri, 4 Sep 2020 09:13:17 +0000 (+0200) Subject: Fix test X-Git-Tag: rec-4.5.0-alpha0~17^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4459dcf53f77a6de1b2802567146622cd80db276;p=thirdparty%2Fpdns.git Fix test --- diff --git a/pdns/recursordist/test-syncres_cc3.cc b/pdns/recursordist/test-syncres_cc3.cc index 138f23fca4..038f8595e1 100644 --- a/pdns/recursordist/test-syncres_cc3.cc +++ b/pdns/recursordist/test-syncres_cc3.cc @@ -885,12 +885,13 @@ BOOST_AUTO_TEST_CASE(test_forward_zone_recurse_rd_dnssec) BOOST_AUTO_TEST_CASE(test_forward_zone_recurse_nord_dnssec) { std::unique_ptr sr; - initSR(sr, true, true); + initSR(sr, true); setDNSSECValidation(sr, DNSSECMode::ValidateAll); primeHints(); /* signed */ + const DNSName parent("test."); const DNSName target1("a.test."); const DNSName target2("b.test."); @@ -904,30 +905,46 @@ BOOST_AUTO_TEST_CASE(test_forward_zone_recurse_nord_dnssec) const ComboAddress forwardedNS("192.0.2.42:53"); size_t queriesCount = 0; + size_t DSforParentCount = 0; SyncRes::AuthDomain ad; ad.d_rdForward = false; ad.d_servers.push_back(forwardedNS); - (*SyncRes::t_sstorage.domainmap)[g_rootdnsname] = ad; + (*SyncRes::t_sstorage.domainmap)[DNSName("test.")] = ad; - sr->setAsyncCallback([target1, target2, keys, forwardedNS, &queriesCount](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional& srcmask, boost::optional context, LWResult* res, bool* chained) { + sr->setAsyncCallback([parent, target1, target2, keys, forwardedNS, &queriesCount, &DSforParentCount](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional& srcmask, boost::optional context, LWResult* res, bool* chained) { queriesCount++; BOOST_CHECK_EQUAL(sendRDQuery, false); + if (type == QType::DS && domain == parent) { + DSforParentCount++; + } if (type == QType::DS || type == QType::DNSKEY) { - return genericDSAndDNSKEYHandler(res, domain, DNSName(".") , type, keys); + if (domain != parent && domain.isPartOf(parent)) { + return genericDSAndDNSKEYHandler(res, domain, domain, type, keys, false /* no cut / delegation */); + } + else { + return genericDSAndDNSKEYHandler(res, domain, domain, type, keys); + } + } + + if (isRootServer(ip)) { + setLWResult(res, 0, false, false, true); + addRecordToLW(res, parent, QType::NS, "a.gtld-servers.net.", DNSResourceRecord::AUTHORITY, 42); + addRRSIG(keys, res->d_records, g_rootdnsname, 300); + addRecordToLW(res, "a.gtld-servers.net.", QType::A, "192.0.2.1", DNSResourceRecord::ADDITIONAL, 3600); } if (ip != forwardedNS) { - //return 0; + return 0; } if (domain == target1 && type == QType::A) { setLWResult(res, 0, true, false, true); addRecordToLW(res, target1, QType::A, "192.0.2.1"); - addRRSIG(keys, res->d_records, DNSName("test."), 300); + addRRSIG(keys, res->d_records, parent, 300); return 1; } @@ -935,10 +952,11 @@ BOOST_AUTO_TEST_CASE(test_forward_zone_recurse_nord_dnssec) setLWResult(res, 0, true, false, true); addRecordToLW(res, target2, QType::A, "192.0.2.2"); - addRRSIG(keys, res->d_records, DNSName("test."), 300); + addRRSIG(keys, res->d_records, parent, 300); return 1; } + return 0; }); @@ -947,7 +965,8 @@ BOOST_AUTO_TEST_CASE(test_forward_zone_recurse_nord_dnssec) BOOST_CHECK_EQUAL(res, RCode::NoError); BOOST_CHECK_EQUAL(sr->getValidationState(), vState::Secure); BOOST_REQUIRE_EQUAL(ret.size(), 2U); - BOOST_CHECK_EQUAL(queriesCount, 4U); + BOOST_CHECK_EQUAL(queriesCount, 5U); + BOOST_CHECK_EQUAL(DSforParentCount, 1U); /* again, to test the cache */ ret.clear(); @@ -955,18 +974,19 @@ BOOST_AUTO_TEST_CASE(test_forward_zone_recurse_nord_dnssec) BOOST_CHECK_EQUAL(res, RCode::NoError); BOOST_CHECK_EQUAL(sr->getValidationState(), vState::Secure); BOOST_REQUIRE_EQUAL(ret.size(), 2U); - BOOST_CHECK_EQUAL(queriesCount, 4U); + BOOST_CHECK_EQUAL(queriesCount, 5U); + BOOST_CHECK_EQUAL(DSforParentCount, 1U); - /* target2 query should not lead to DS query */ - // ret.clear(); - // res = sr->beginResolve(target2, QType(QType::A), QClass::IN, ret); - // BOOST_CHECK_EQUAL(res, RCode::NoError); - // BOOST_CHECK_EQUAL(sr->getValidationState(), vState::Secure); - // BOOST_REQUIRE_EQUAL(ret.size(), 2U); - // BOOST_CHECK_EQUAL(queriesCount, 6U); + /* new target should no cause a DS query for tets. */ + ret.clear(); + res = sr->beginResolve(target2, QType(QType::A), QClass::IN, ret); + BOOST_CHECK_EQUAL(res, RCode::NoError); + BOOST_CHECK_EQUAL(sr->getValidationState(), vState::Secure); + BOOST_REQUIRE_EQUAL(ret.size(), 2U); + BOOST_CHECK_EQUAL(queriesCount, 7U); + BOOST_CHECK_EQUAL(DSforParentCount, 1U); } - BOOST_AUTO_TEST_CASE(test_forward_zone_recurse_rd_dnssec_bogus) { std::unique_ptr sr;