Commit abe78fae authored by JINMEI Tatuya's avatar JINMEI Tatuya
Browse files

[master] Merge branch 'trac2585'

parents 06ab4db1 be156ccb
......@@ -1167,12 +1167,6 @@ TEST_P(QueryTest, apexNSMatch) {
// test type any query logic
TEST_P(QueryTest, exactAnyMatch) {
// This is an in-memory specific bug (#2585), until it's fixed we
// tentatively skip the test for in-memory
if (GetParam() == INMEMORY) {
return;
}
// find match rrset, omit additional data which has already been provided
// in the answer section from the additional.
EXPECT_NO_THROW(query.process(*list_, Name("noglue.example.com"),
......@@ -1705,12 +1699,6 @@ TEST_F(QueryTestForMockOnly, badWildcardProof3) {
}
TEST_P(QueryTest, wildcardNxrrsetWithDuplicateNSEC) {
// This is an in-memory specific bug (#2585), until it's fixed we
// tentatively skip the test for in-memory
if (GetParam() == INMEMORY) {
return;
}
// NXRRSET on WILDCARD with DNSSEC proof. We should have SOA, NSEC that
// proves the NXRRSET and their RRSIGs. In this case we only need one NSEC,
// which proves both NXDOMAIN and the non existence RRSETs of wildcard.
......@@ -1728,12 +1716,6 @@ TEST_P(QueryTest, wildcardNxrrsetWithDuplicateNSEC) {
}
TEST_P(QueryTest, wildcardNxrrsetWithNSEC) {
// This is an in-memory specific bug (#2585), until it's fixed we
// tentatively skip the test for in-memory
if (GetParam() == INMEMORY) {
return;
}
// WILDCARD + NXRRSET with DNSSEC proof. We should have SOA, NSEC that
// proves the NXRRSET and their RRSIGs. In this case we need two NSEC RRs,
// one proves NXDOMAIN and the other proves non existence RRSETs of
......
......@@ -866,7 +866,8 @@ InMemoryZoneFinder::findInternal(const isc::dns::Name& name,
const RdataSet* cur_rds = node->getData();
while (cur_rds != NULL) {
target->push_back(createTreeNodeRRset(node, cur_rds, rrclass_,
options, &name));
options,
wild ? &name : NULL));
cur_rds = cur_rds->getNext();
}
LOG_DEBUG(logger, DBG_TRACE_DATA, DATASRC_MEM_ANY_SUCCESS).
......@@ -893,9 +894,13 @@ InMemoryZoneFinder::findInternal(const isc::dns::Name& name,
}
}
// No exact match or CNAME. Get NSEC if necessary and return NXRRSET.
// Note that we don't have to provide the "real name" even if this is
// a wildcard; if NSEC is needed its owner name shouldn't be subject to
// wildcard substitution; if NSEC isn't needed the "real name" doesn't
// matter anyway.
return (createFindResult(rrclass_, zone_data_, NXRRSET, node,
getNSECForNXRRSET(zone_data_, options, node),
options, wild, &name));
options, wild));
}
isc::datasrc::ZoneFinder::FindNSEC3Result
......
......@@ -442,14 +442,23 @@ protected:
}
EXPECT_EQ((expected_flags & ZoneFinder::RESULT_WILDCARD) != 0,
find_result->isWildcard());
EXPECT_EQ((expected_flags & ZoneFinder::RESULT_NSEC_SIGNED)
!= 0, find_result->isNSECSigned());
EXPECT_EQ((expected_flags & ZoneFinder::RESULT_NSEC3_SIGNED)
!= 0, find_result->isNSEC3Signed());
// Convert all rrsets to 'full' ones before checking
EXPECT_EQ((expected_flags & ZoneFinder::RESULT_NSEC_SIGNED) != 0,
find_result->isNSECSigned());
EXPECT_EQ((expected_flags & ZoneFinder::RESULT_NSEC3_SIGNED) != 0,
find_result->isNSEC3Signed());
// Convert all rrsets to 'full' ones before checking. Also, confirm
// each RRset of the vector is of the "same kind" as one would be
// found by the find() method.
std::vector<ConstRRsetPtr> converted_rrsets;
BOOST_FOREACH(ConstRRsetPtr cur_rrset, target) {
converted_rrsets.push_back(convertRRset(cur_rrset));
// As we know findAll() succeeded, this find() should also
// succeed, and the two sets should be "identical".
const ZoneFinderContextPtr result =
finder->find(name, cur_rrset->getType());
ASSERT_TRUE(result->rrset);
EXPECT_TRUE(result->rrset->isSameKind(*cur_rrset));
}
rrsetsCheck(expected_rrsets.begin(), expected_rrsets.end(),
converted_rrsets.begin(), converted_rrsets.end());
......@@ -1133,21 +1142,42 @@ InMemoryZoneFinderTest::wildcardCheck(
}
}
// We have combinations of these cases (6 in total)
// expected_flags: NSEC, NSEC3, RESULT_DEFAULT
// options: NO_WILDCARD, FIND_DEFAULT
// 1. Normal case: expected = DEFAULT, options = DEFAULT
TEST_F(InMemoryZoneFinderTest, wildcard) {
// Normal case
wildcardCheck();
}
// 2. options: expected = DEFAULT, options = NO_WILDCARD
TEST_F(InMemoryZoneFinderTest, wildcardDisabled) {
// Similar to the previous once, but check the behavior for a non signed
// zone just in case.
wildcardCheck(ZoneFinder::RESULT_DEFAULT, ZoneFinder::NO_WILDCARD);
}
// 3. options: expected = NSEC_SIGNED, options = DEFAULT
TEST_F(InMemoryZoneFinderTest, wildcardWithNSEC) {
wildcardCheck(ZoneFinder::RESULT_NSEC_SIGNED, ZoneFinder::FIND_DEFAULT);
}
// 4. options: expected = NSEC_SIGNED, options = NO_WILDCARD
TEST_F(InMemoryZoneFinderTest, wildcardDisabledWithNSEC) {
// Wildcard is disabled. In practice, this is used as part of query
// processing for an NSEC-signed zone, so we test that case specifically.
wildcardCheck(ZoneFinder::RESULT_NSEC_SIGNED, ZoneFinder::NO_WILDCARD);
}
TEST_F(InMemoryZoneFinderTest, wildcardDisabledWithoutNSEC) {
// Similar to the previous once, but check the behavior for a non signed
// zone just in case.
wildcardCheck(ZoneFinder::RESULT_DEFAULT, ZoneFinder::NO_WILDCARD);
// 5. options: expected = NSEC3_SIGNED, options = DEFAULT
TEST_F(InMemoryZoneFinderTest, wildcardWithNSEC3) {
wildcardCheck(ZoneFinder::RESULT_NSEC3_SIGNED, ZoneFinder::FIND_DEFAULT);
}
// 6. options: expected = NSEC3_SIGNED, options = DEFAULT
TEST_F(InMemoryZoneFinderTest, wildcardDisabledWithNSEC3) {
wildcardCheck(ZoneFinder::RESULT_NSEC3_SIGNED, ZoneFinder::NO_WILDCARD);
}
/*
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment