[svn] commit: r3928 - in /branches/trac441/src/lib/datasrc: memory_datasrc.cc tests/memory_datasrc_unittest.cc
BIND 10 source code commits
bind10-changes at lists.isc.org
Tue Dec 21 11:05:40 UTC 2010
Author: vorner
Date: Tue Dec 21 11:05:39 2010
New Revision: 3928
Log:
Implement MemoryZone::load
And fix tests for it
Modified:
branches/trac441/src/lib/datasrc/memory_datasrc.cc
branches/trac441/src/lib/datasrc/tests/memory_datasrc_unittest.cc
Modified: branches/trac441/src/lib/datasrc/memory_datasrc.cc
==============================================================================
--- branches/trac441/src/lib/datasrc/memory_datasrc.cc (original)
+++ branches/trac441/src/lib/datasrc/memory_datasrc.cc Tue Dec 21 11:05:39 2010
@@ -15,9 +15,11 @@
#include <map>
#include <iostream>
#include <boost/shared_ptr.hpp>
+#include <boost/bind.hpp>
#include <dns/name.h>
#include <dns/rrclass.h>
+#include <dns/masterload.h>
#include <datasrc/memory_datasrc.h>
#include <datasrc/rbtree.h>
@@ -183,6 +185,41 @@
return (FindResult(NXDOMAIN, ConstRRsetPtr()));
}
}
+
+ struct Load {
+ Load(MemoryZone* zone) :
+ zone_(zone),
+ swap_(true)
+ {
+ tmp_tree_.swap(zone_->impl_->domains_);
+ }
+ ~ Load() {
+ if (swap_) {
+ tmp_tree_.swap(zone_->impl_->domains_);
+ }
+ }
+ void load(const string &filename) {
+ masterLoad(filename.c_str(), zone_->getOrigin(), zone_->getClass(),
+ boost::bind(&Load::add, this, _1));
+ swap_ = false;
+ }
+ void add(RRsetPtr set) {
+ switch (zone_->add(set)) {
+ case result::EXIST:
+ isc_throw(dns::MasterLoadError, "Duplicate rrset: " <<
+ set->toText());
+ case result::SUCCESS:
+ return;
+ default:
+ isc_throw(AssertError,
+ "Unexpected result of MemoryZone::add");
+ }
+ }
+
+ MemoryZone *zone_;
+ DomainTree tmp_tree_;
+ bool swap_;
+ };
};
MemoryZone::MemoryZone(const RRClass& zone_class, const Name& origin) :
@@ -212,6 +249,17 @@
result::Result
MemoryZone::add(const ConstRRsetPtr& rrset) {
return (impl_->add(rrset));
+}
+
+void
+xxx(Zone*, RRsetPtr) {
+
+}
+
+void
+MemoryZone::load(const string& filename) {
+ MemoryZoneImpl::Load load(this);
+ load.load(filename);
}
/// Implementation details for \c MemoryDataSrc hidden from the public
Modified: branches/trac441/src/lib/datasrc/tests/memory_datasrc_unittest.cc
==============================================================================
--- branches/trac441/src/lib/datasrc/tests/memory_datasrc_unittest.cc (original)
+++ branches/trac441/src/lib/datasrc/tests/memory_datasrc_unittest.cc Tue Dec 21 11:05:39 2010
@@ -171,15 +171,20 @@
* \param check_answer Should a check against equality of the answer be
* done?
* \param answer The expected rrset, if any should be returned.
+ * \param zone Check different MemoryZone object than zone_ (if NULL,
+ * uses zone_)
*/
void findTest(const Name& name, const RRType& rrtype, Zone::Result result,
bool check_answer = true,
- const ConstRRsetPtr& answer = ConstRRsetPtr())
+ const ConstRRsetPtr& answer = ConstRRsetPtr(), MemoryZone *zone = NULL)
{
+ if (!zone) {
+ zone = &zone_;
+ }
// The whole block is inside, because we need to check the result and
// we can't assign to FindResult
EXPECT_NO_THROW({
- Zone::FindResult find_result(zone_.find(name, rrtype));
+ Zone::FindResult find_result(zone->find(name, rrtype));
// Check it returns correct answers
EXPECT_EQ(result, find_result.code);
if (check_answer) {
@@ -255,7 +260,7 @@
// This should delegate
findTest(Name("a.subdomain.example.org"), RRType::MX(), Zone::DELEGATION,
- rr_delegation_);
+ true, rr_delegation_);
}
TEST_F(MemoryZoneTest, load) {
@@ -264,16 +269,20 @@
// Create correct zone
MemoryZone rootzone(class_, Name("."));
// Try putting something inside
- EXPECT_NO_THROW(EXPECT_EQ(result::SUCCESS, zone_.add(rr_ns_aaaa_)));
+ EXPECT_NO_THROW(EXPECT_EQ(result::SUCCESS, rootzone.add(rr_ns_aaaa_)));
// Load the zone. It should overwrite/remove the above RRset
EXPECT_NO_THROW(rootzone.load(TEST_DATA_DIR "/root.zone"));
// Now see there are some rrsets (we don't look inside, though)
- findTest(Name("."), RRType::SOA(), Zone::SUCCESS, false);
- findTest(Name("."), RRType::NS(), Zone::SUCCESS, false);
- findTest(Name("a.root-servers.net."), RRType::A(), Zone::SUCCESS, false);
+ findTest(Name("."), RRType::SOA(), Zone::SUCCESS, false, ConstRRsetPtr(),
+ &rootzone);
+ findTest(Name("."), RRType::NS(), Zone::SUCCESS, false, ConstRRsetPtr(),
+ &rootzone);
+ findTest(Name("a.root-servers.net."), RRType::A(), Zone::SUCCESS, false,
+ ConstRRsetPtr(), &rootzone);
// But this should no longer be here
- findTest(ns_name_, RRType::AAAA(), Zone::NXDOMAIN, false);
-}
-
-}
+ findTest(ns_name_, RRType::AAAA(), Zone::NXDOMAIN, true, ConstRRsetPtr(),
+ &rootzone);
+}
+
+}
More information about the bind10-changes
mailing list