#include <gtest/gtest.h>
+#include <boost/scoped_ptr.hpp>
+
#include <cassert>
using isc::testutils::textToRRset;
ZoneDataUpdaterTest() :
zname_("example.org"), zclass_(RRClass::IN()),
zone_data_(ZoneData::create(mem_sgmt_, zname_)),
- updater_(mem_sgmt_, zclass_, zname_, *zone_data_)
+ updater_(new ZoneDataUpdater(mem_sgmt_, zclass_, zname_, *zone_data_))
{}
~ZoneDataUpdaterTest() {
// Make sure zone data is destroyed even if a test results in exception
assert(zone_data_ != NULL);
ZoneData::destroy(mem_sgmt_, zone_data_, zclass_);
zone_data_ = ZoneData::create(mem_sgmt_, zname_);
+ updater_.reset(new ZoneDataUpdater(mem_sgmt_, zclass_, zname_,
+ *zone_data_));
}
void TearDown() {
const RRClass zclass_;
test::MemorySegmentTest mem_sgmt_;
ZoneData* zone_data_;
- ZoneDataUpdater updater_;
+ boost::scoped_ptr<ZoneDataUpdater> updater_;
};
TEST_F(ZoneDataUpdaterTest, bothNull) {
// At least either covered RRset or RRSIG must be non NULL.
- EXPECT_THROW(updater_.add(ConstRRsetPtr(), ConstRRsetPtr()),
+ EXPECT_THROW(updater_->add(ConstRRsetPtr(), ConstRRsetPtr()),
ZoneDataUpdater::NullRRset);
}
TEST_F(ZoneDataUpdaterTest, rrsigOnly) {
// RRSIG that doesn't have covered RRset can be added. The resulting
// rdataset won't have "normal" RDATA but sig RDATA.
- updater_.add(ConstRRsetPtr(), textToRRset(
- "www.example.org. 3600 IN RRSIG A 5 3 3600 20150420235959"
- " 20051021000000 1 example.org. FAKE"));
+ updater_->add(ConstRRsetPtr(), textToRRset(
+ "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"), zone_data_);
const RdataSet* rdset = node->getData();
ASSERT_NE(static_cast<RdataSet*>(NULL), rdset);
// The RRSIG covering A prohibits an actual A RRset from being added.
// This should be loosened in future version, but we check the current
// behavior.
- EXPECT_THROW(updater_.add(
+ EXPECT_THROW(updater_->add(
textToRRset("www.example.org. 3600 IN A 192.0.2.1"),
ConstRRsetPtr()), ZoneDataUpdater::AddError);
// The special "wildcarding" node mark should be added for the RRSIG-only
// case, too.
- updater_.add(ConstRRsetPtr(), textToRRset(
- "*.wild.example.org. 3600 IN RRSIG A 5 3 3600 "
- "20150420235959 20051021000000 1 example.org. FAKE"));
+ 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"), zone_data_);
EXPECT_TRUE(node->getFlag(ZoneData::WILDCARD_NODE));
// Simply adding RRSIG covering (delegating NS) shouldn't enable callback
// in search.
- updater_.add(ConstRRsetPtr(), textToRRset(
- "child.example.org. 3600 IN RRSIG NS 5 3 3600 "
- "20150420235959 20051021000000 1 example.org. FAKE"));
+ 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"), zone_data_);
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"));
+ 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"), zone_data_);
EXPECT_FALSE(node->getFlag(ZoneNode::FLAG_CALLBACK));
// Likewise, RRSIG for NSEC3PARAM alone shouldn't make the zone
// "NSEC3-signed".
- updater_.add(ConstRRsetPtr(), textToRRset(
- "example.org. 3600 IN RRSIG NSEC3PARAM 5 3 3600 "
- "20150420235959 20051021000000 1 example.org. FAKE"));
+ updater_->add(ConstRRsetPtr(), textToRRset(
+ "example.org. 3600 IN RRSIG NSEC3PARAM 5 3 3600 "
+ "20150420235959 20051021000000 1 example.org. FAKE"));
EXPECT_FALSE(zone_data_->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"));
+ updater_->add(ConstRRsetPtr(), textToRRset(
+ "example.org. 3600 IN RRSIG NSEC 5 3 3600 "
+ "20150420235959 20051021000000 1 example.org. FAKE"));
EXPECT_FALSE(zone_data_->isSigned());
}
// but that doesn't matter for this test.
// Add NSEC3PARAM, then RRSIG-only, which is okay.
- updater_.add(textToRRset(
- "example.org. 3600 IN NSEC3PARAM 1 0 12 AABBCCDD"),
- textToRRset(
- "example.org. 3600 IN RRSIG NSEC3PARAM 5 3 3600 "
- "20150420235959 20051021000000 1 example.org. FAKE"));
+ updater_->add(textToRRset(
+ "example.org. 3600 IN NSEC3PARAM 1 0 12 AABBCCDD"),
+ textToRRset(
+ "example.org. 3600 IN RRSIG NSEC3PARAM 5 3 3600 "
+ "20150420235959 20051021000000 1 example.org. FAKE"));
EXPECT_TRUE(zone_data_->isNSEC3Signed());
- updater_.add(ConstRRsetPtr(),
- textToRRset(
- "09GM.example.org. 3600 IN RRSIG NSEC3 5 3 3600 "
- "20150420235959 20051021000000 1 example.org. FAKE"));
+ 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"), zone_data_);
// Clear the current content of zone, then add NSEC3
clearZoneData();
- updater_.add(textToRRset(
- "AABB.example.org. 3600 IN NSEC3 1 0 10 AA 00000000 A"),
- textToRRset(
- "AABB.example.org. 3600 IN RRSIG NSEC3 5 3 3600 "
- "20150420235959 20051021000000 1 example.org. FAKE"));
- updater_.add(ConstRRsetPtr(),
- textToRRset(
- "09GM.example.org. 3600 IN RRSIG NSEC3 5 3 3600 "
- "20150420235959 20051021000000 1 example.org. FAKE"));
+ updater_->add(textToRRset(
+ "AABB.example.org. 3600 IN NSEC3 1 0 10 AA 00000000 A"),
+ textToRRset(
+ "AABB.example.org. 3600 IN RRSIG NSEC3 5 3 3600 "
+ "20150420235959 20051021000000 1 example.org. FAKE"));
+ 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"), zone_data_);
// If we add only RRSIG without any NSEC3 related data beforehand,
// it will be rejected; it's a limitation of the current implementation.
clearZoneData();
- EXPECT_THROW(updater_.add(
+ EXPECT_THROW(updater_->add(
ConstRRsetPtr(),
textToRRset(
"09GM.example.org. 3600 IN RRSIG NSEC3 5 3 3600 "