|
@@ -68,33 +68,24 @@ getNode(isc::util::MemorySegment& mem_sgmt, const Name& name,
|
|
|
return (node);
|
|
|
}
|
|
|
|
|
|
-// Just the same as ZoneDataUpdater, but it lets get in to some guts.
|
|
|
-class TestZoneDataUpdater : public ZoneDataUpdater {
|
|
|
-public:
|
|
|
- TestZoneDataUpdater(isc::util::MemorySegment& mem_sgmt,
|
|
|
- isc::dns::RRClass rrclass,
|
|
|
- const isc::dns::Name& zone_name,
|
|
|
- ZoneData& zone_data):
|
|
|
- ZoneDataUpdater(mem_sgmt, rrclass, zone_name, zone_data)
|
|
|
- {}
|
|
|
- ZoneData* getZoneData() const { return (zone_data_); }
|
|
|
-};
|
|
|
-
|
|
|
class ZoneDataUpdaterTest : public ::testing::TestWithParam<SegmentCreator*> {
|
|
|
protected:
|
|
|
ZoneDataUpdaterTest() :
|
|
|
zname_("example.org"), zclass_(RRClass::IN()),
|
|
|
- mem_sgmt_(GetParam()->create()),
|
|
|
- updater_(new
|
|
|
- TestZoneDataUpdater(*mem_sgmt_, zclass_, zname_,
|
|
|
- *ZoneData::create(*mem_sgmt_, zname_)))
|
|
|
- {}
|
|
|
+ mem_sgmt_(GetParam()->create())
|
|
|
+ {
|
|
|
+ ZoneData *data = ZoneData::create(*mem_sgmt_, zname_);
|
|
|
+ mem_sgmt_->setNamedAddress("Test zone data", data);
|
|
|
+ updater_.reset(new ZoneDataUpdater(*mem_sgmt_, zclass_, zname_,
|
|
|
+ *data));
|
|
|
+ }
|
|
|
|
|
|
~ZoneDataUpdaterTest() {
|
|
|
if (updater_) {
|
|
|
- ZoneData::destroy(*mem_sgmt_, updater_->getZoneData(), zclass_);
|
|
|
+ ZoneData::destroy(*mem_sgmt_, getZoneData(), zclass_);
|
|
|
// Release the updater, so it frees all memory inside the segment too
|
|
|
updater_.reset();
|
|
|
+ mem_sgmt_->clearNamedAddress("Test zone data");
|
|
|
}
|
|
|
if (!mem_sgmt_->allMemoryDeallocated()) {
|
|
|
ADD_FAILURE() << "Memory leak detected";
|
|
@@ -104,17 +95,24 @@ protected:
|
|
|
|
|
|
void clearZoneData() {
|
|
|
assert(updater_);
|
|
|
- ZoneData::destroy(*mem_sgmt_, updater_->getZoneData(), zclass_);
|
|
|
+ ZoneData::destroy(*mem_sgmt_, getZoneData(), zclass_);
|
|
|
+ mem_sgmt_->clearNamedAddress("Test zone data");
|
|
|
updater_.reset();
|
|
|
- updater_.reset(new TestZoneDataUpdater(*mem_sgmt_, zclass_, zname_,
|
|
|
- *ZoneData::create(*mem_sgmt_,
|
|
|
- zname_)));
|
|
|
+ ZoneData *data = ZoneData::create(*mem_sgmt_, zname_);
|
|
|
+ mem_sgmt_->setNamedAddress("Test zone data", data);
|
|
|
+ updater_.reset(new ZoneDataUpdater(*mem_sgmt_, zclass_, zname_,
|
|
|
+ *data));
|
|
|
+ }
|
|
|
+
|
|
|
+ ZoneData* getZoneData() {
|
|
|
+ return (static_cast<ZoneData*>(
|
|
|
+ mem_sgmt_->getNamedAddress("Test zone data")));
|
|
|
}
|
|
|
|
|
|
const Name zname_;
|
|
|
const RRClass zclass_;
|
|
|
boost::shared_ptr<isc::util::MemorySegment> mem_sgmt_;
|
|
|
- boost::scoped_ptr<TestZoneDataUpdater> updater_;
|
|
|
+ boost::scoped_ptr<ZoneDataUpdater> updater_;
|
|
|
};
|
|
|
|
|
|
class TestSegmentCreator : public SegmentCreator {
|
|
@@ -186,8 +184,7 @@ TEST_P(ZoneDataUpdaterTest, zoneMinTTL) {
|
|
|
"example.org. 3600 IN SOA . . 0 0 0 0 1200",
|
|
|
zclass_, zname_),
|
|
|
ConstRRsetPtr());
|
|
|
- isc::util::InputBuffer b(updater_->getZoneData()->getMinTTLData(),
|
|
|
- sizeof(uint32_t));
|
|
|
+ isc::util::InputBuffer b(getZoneData()->getMinTTLData(), sizeof(uint32_t));
|
|
|
EXPECT_EQ(RRTTL(1200), RRTTL(b));
|
|
|
}
|
|
|
|
|
@@ -198,7 +195,7 @@ TEST_P(ZoneDataUpdaterTest, rrsigOnly) {
|
|
|
"www.example.org. 3600 IN RRSIG A 5 3 3600 "
|
|
|
"20150420235959 20051021000000 1 example.org. FAKE"));
|
|
|
ZoneNode* node = getNode(*mem_sgmt_, Name("www.example.org"),
|
|
|
- updater_->getZoneData());
|
|
|
+ getZoneData());
|
|
|
const RdataSet* rdset = node->getData();
|
|
|
ASSERT_NE(static_cast<RdataSet*>(NULL), rdset);
|
|
|
rdset = RdataSet::find(rdset, RRType::A(), true);
|
|
@@ -216,8 +213,7 @@ TEST_P(ZoneDataUpdaterTest, rrsigOnly) {
|
|
|
updater_->add(ConstRRsetPtr(), textToRRset(
|
|
|
"*.wild.example.org. 3600 IN RRSIG A 5 3 3600 "
|
|
|
"20150420235959 20051021000000 1 example.org. FAKE"));
|
|
|
- node = getNode(*mem_sgmt_, Name("wild.example.org"),
|
|
|
- updater_->getZoneData());
|
|
|
+ node = getNode(*mem_sgmt_, Name("wild.example.org"), getZoneData());
|
|
|
EXPECT_TRUE(node->getFlag(ZoneData::WILDCARD_NODE));
|
|
|
|
|
|
// Simply adding RRSIG covering (delegating NS) shouldn't enable callback
|
|
@@ -225,16 +221,14 @@ TEST_P(ZoneDataUpdaterTest, rrsigOnly) {
|
|
|
updater_->add(ConstRRsetPtr(), textToRRset(
|
|
|
"child.example.org. 3600 IN RRSIG NS 5 3 3600 "
|
|
|
"20150420235959 20051021000000 1 example.org. FAKE"));
|
|
|
- node = getNode(*mem_sgmt_, Name("child.example.org"),
|
|
|
- updater_->getZoneData());
|
|
|
+ node = getNode(*mem_sgmt_, Name("child.example.org"), getZoneData());
|
|
|
EXPECT_FALSE(node->getFlag(ZoneNode::FLAG_CALLBACK));
|
|
|
|
|
|
// Same for DNAME
|
|
|
updater_->add(ConstRRsetPtr(), textToRRset(
|
|
|
"dname.example.org. 3600 IN RRSIG DNAME 5 3 3600 "
|
|
|
"20150420235959 20051021000000 1 example.org. FAKE"));
|
|
|
- node = getNode(*mem_sgmt_, Name("dname.example.org"),
|
|
|
- updater_->getZoneData());
|
|
|
+ node = getNode(*mem_sgmt_, Name("dname.example.org"), getZoneData());
|
|
|
EXPECT_FALSE(node->getFlag(ZoneNode::FLAG_CALLBACK));
|
|
|
|
|
|
// Likewise, RRSIG for NSEC3PARAM alone shouldn't make the zone
|
|
@@ -242,13 +236,13 @@ TEST_P(ZoneDataUpdaterTest, rrsigOnly) {
|
|
|
updater_->add(ConstRRsetPtr(), textToRRset(
|
|
|
"example.org. 3600 IN RRSIG NSEC3PARAM 5 3 3600 "
|
|
|
"20150420235959 20051021000000 1 example.org. FAKE"));
|
|
|
- EXPECT_FALSE(updater_->getZoneData()->isNSEC3Signed());
|
|
|
+ EXPECT_FALSE(getZoneData()->isNSEC3Signed());
|
|
|
|
|
|
// And same for (RRSIG for) NSEC and "is signed".
|
|
|
updater_->add(ConstRRsetPtr(), textToRRset(
|
|
|
"example.org. 3600 IN RRSIG NSEC 5 3 3600 "
|
|
|
"20150420235959 20051021000000 1 example.org. FAKE"));
|
|
|
- EXPECT_FALSE(updater_->getZoneData()->isSigned());
|
|
|
+ EXPECT_FALSE(getZoneData()->isSigned());
|
|
|
}
|
|
|
|
|
|
// Commonly used checks for rrsigForNSEC3Only
|
|
@@ -281,13 +275,12 @@ TEST_P(ZoneDataUpdaterTest, rrsigForNSEC3Only) {
|
|
|
textToRRset(
|
|
|
"example.org. 3600 IN RRSIG NSEC3PARAM 5 3 3600 "
|
|
|
"20150420235959 20051021000000 1 example.org. FAKE"));
|
|
|
- EXPECT_TRUE(updater_->getZoneData()->isNSEC3Signed());
|
|
|
+ EXPECT_TRUE(getZoneData()->isNSEC3Signed());
|
|
|
updater_->add(ConstRRsetPtr(),
|
|
|
textToRRset(
|
|
|
"09GM.example.org. 3600 IN RRSIG NSEC3 5 3 3600 "
|
|
|
"20150420235959 20051021000000 1 example.org. FAKE"));
|
|
|
- checkNSEC3Rdata(*mem_sgmt_, Name("09GM.example.org"),
|
|
|
- updater_->getZoneData());
|
|
|
+ checkNSEC3Rdata(*mem_sgmt_, Name("09GM.example.org"), getZoneData());
|
|
|
|
|
|
// Clear the current content of zone, then add NSEC3
|
|
|
clearZoneData();
|
|
@@ -300,8 +293,7 @@ TEST_P(ZoneDataUpdaterTest, rrsigForNSEC3Only) {
|
|
|
textToRRset(
|
|
|
"09GM.example.org. 3600 IN RRSIG NSEC3 5 3 3600 "
|
|
|
"20150420235959 20051021000000 1 example.org. FAKE"));
|
|
|
- checkNSEC3Rdata(*mem_sgmt_, Name("09GM.example.org"),
|
|
|
- updater_->getZoneData());
|
|
|
+ checkNSEC3Rdata(*mem_sgmt_, Name("09GM.example.org"), getZoneData());
|
|
|
|
|
|
// If we add only RRSIG without any NSEC3 related data beforehand,
|
|
|
// it will be rejected; it's a limitation of the current implementation.
|
|
@@ -329,8 +321,7 @@ TEST_P(ZoneDataUpdaterTest, manySmallRRsets) {
|
|
|
"example.org. FAKE"));
|
|
|
ZoneNode* node = getNode(*mem_sgmt_,
|
|
|
Name(boost::lexical_cast<std::string>(i) +
|
|
|
- ".example.org"),
|
|
|
- updater_->getZoneData());
|
|
|
+ ".example.org"), getZoneData());
|
|
|
const RdataSet* rdset = node->getData();
|
|
|
ASSERT_NE(static_cast<RdataSet*>(NULL), rdset);
|
|
|
rdset = RdataSet::find(rdset, RRType::TXT(), true);
|