Browse Source

[2836] Less hacky way to access the zone data in tests

Store it separately as named address and access it every time, instead
of sneaking into the updater internal.
Michal 'vorner' Vaner 12 years ago
parent
commit
807f3b5cd6

+ 0 - 5
src/lib/datasrc/memory/zone_data_updater.h

@@ -200,11 +200,6 @@ private:
     const isc::dns::Name& zone_name_;
     const isc::dns::Name& zone_name_;
     RdataEncoder encoder_;
     RdataEncoder encoder_;
     const isc::dns::NSEC3Hash* hash_;
     const isc::dns::NSEC3Hash* hash_;
-protected:
-    /// \brief The zone data
-    ///
-    /// Protected, so the tests can get in. But it should not be accessed
-    /// in general code.
     ZoneData* zone_data_;
     ZoneData* zone_data_;
 };
 };
 
 

+ 32 - 41
src/lib/datasrc/tests/memory/zone_data_updater_unittest.cc

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