[svn] commit: r987 - in /branches/each-ds/src/lib/auth/cpp: data_source.cc data_source.h data_source_sqlite3.cc data_source_static.cc datasrc_unittest.cc unittest_ds.cc unittest_ds.h
BIND 10 source code commits
bind10-changes at lists.isc.org
Fri Feb 26 01:35:36 UTC 2010
Author: each
Date: Fri Feb 26 01:35:35 2010
New Revision: 987
Log:
- much more complete data source unittests
- fixed some bugs found along the way
Modified:
branches/each-ds/src/lib/auth/cpp/data_source.cc
branches/each-ds/src/lib/auth/cpp/data_source.h
branches/each-ds/src/lib/auth/cpp/data_source_sqlite3.cc
branches/each-ds/src/lib/auth/cpp/data_source_static.cc
branches/each-ds/src/lib/auth/cpp/datasrc_unittest.cc
branches/each-ds/src/lib/auth/cpp/unittest_ds.cc
branches/each-ds/src/lib/auth/cpp/unittest_ds.h
Modified: branches/each-ds/src/lib/auth/cpp/data_source.cc
==============================================================================
--- branches/each-ds/src/lib/auth/cpp/data_source.cc (original)
+++ branches/each-ds/src/lib/auth/cpp/data_source.cc Fri Feb 26 01:35:35 2010
@@ -146,13 +146,24 @@
// Query for referrals (i.e., NS/DS or DNAME) at a given name
static inline bool
-refQuery(const Name& name, Query& q, const DataSrc* ds, RRsetList& target) {
+refQuery(const Name& name, Query& q, QueryTask& task,
+ const DataSrc* ds, RRsetList& target) {
QueryTask t(name, q.qclass(), QueryTask::REF_QUERY);
+ t.zone = task.zone;
+
DataSrc::Result result = doQueryTask(ds, q, t, target);
- if (result == DataSrc::SUCCESS && t.flags == 0) {
- return true;
- }
- return false;
+
+ // Lookup failed
+ if (result != DataSrc::SUCCESS) {
+ return (false);
+ }
+
+ // Referral bit is expected, so clear it when checking flags
+ if ((t.flags & ~DataSrc::REFERRAL) != 0) {
+ return (false);
+ }
+
+ return (true);
}
// Match downward, from the zone apex to the query name, looking for
@@ -167,7 +178,7 @@
RRsetList ref;
for(int i = diff; i > 1; i--) {
Name sub(task.qname.split(i - 1, nlen - i));
- if (refQuery(sub, q, ds, ref)) {
+ if (refQuery(sub, q, task, ds, ref)) {
found = true;
break;
}
@@ -185,6 +196,7 @@
if (RRsetPtr r = ref[RRType::DNAME()]) {
RRsetList syn;
m.addRRset(Section::ANSWER(), r, q.wantDnssec());
+ m.setHeaderFlag(MessageFlag::AA());
synthesizeCname(q, task, r, syn);
if (syn.size() == 1) {
m.addRRset(Section::ANSWER(),
@@ -238,6 +250,7 @@
const Name& wname(star.concatenate(task.qname.split(i, nlen - i)));
QueryTask t(wname, task.qclass, task.qtype,
QueryTask::SIMPLE_QUERY);
+ t.zone = task.zone;
result = doQueryTask(ds, q, t, wild);
if (result == DataSrc::SUCCESS &&
(t.flags == 0 || (t.flags & DataSrc::CNAME_FOUND))) {
@@ -266,7 +279,7 @@
}
RRsetList auth;
- if (! refQuery(Name(*task.zone), q, ds, auth)) {
+ if (! refQuery(Name(*task.zone), q, task, ds, auth)) {
return (DataSrc::ERROR);
}
@@ -277,6 +290,7 @@
RRsetList nsec;
QueryTask t = QueryTask(*task.zone, task.qclass, RRType::NSEC(),
QueryTask::SIMPLE_QUERY);
+ t.zone = task.zone;
result = doQueryTask(ds, q, t, nsec);
if (result != DataSrc::SUCCESS) {
return (DataSrc::ERROR);
@@ -385,7 +399,7 @@
// Add the NS records for the enclosing zone to
// the authority section.
RRsetList auth;
- if (! refQuery(Name(*zone), q, ds, auth)) {
+ if (! refQuery(Name(*zone), q, task, ds, auth)) {
m.setRcode(Rcode::SERVFAIL());
return;
}
@@ -427,7 +441,7 @@
if (task.state == QueryTask::GETANSWER) {
RRsetList auth;
m.clearHeaderFlag(MessageFlag::AA());
- if (! refQuery(task.qname, q, ds, auth)) {
+ if (! refQuery(task.qname, q, task, ds, auth)) {
m.setRcode(Rcode::SERVFAIL());
return;
}
@@ -459,7 +473,7 @@
// If we were looking for answer data, not additional,
// and the name was not found, we need to find out whether
// there are any relevant wildcards.
- bool wildcard_found;
+ bool wildcard_found = false;
result = tryWildcard(q, task, ds, wildcard_found);
if (result != SUCCESS) {
m.setRcode(Rcode::SERVFAIL());
@@ -490,6 +504,7 @@
RRsetList soa;
QueryTask t(Name(*zone), task.qclass, RRType::SOA(),
QueryTask::SIMPLE_QUERY);
+ t.zone = task.zone;
result = doQueryTask(ds, q, t, soa);
if (result != SUCCESS || t.flags != 0) {
m.setRcode(Rcode::SERVFAIL());
Modified: branches/each-ds/src/lib/auth/cpp/data_source.h
==============================================================================
--- branches/each-ds/src/lib/auth/cpp/data_source.h (original)
+++ branches/each-ds/src/lib/auth/cpp/data_source.h Fri Feb 26 01:35:35 2010
@@ -130,6 +130,7 @@
const RRClass& getClass() const { return rrclass; }
void setClass(RRClass& c) { rrclass = c; }
+ void setClass(const RRClass& c) { rrclass = c; }
Result init() { return NOT_IMPLEMENTED; }
Result close() { return NOT_IMPLEMENTED; }
Modified: branches/each-ds/src/lib/auth/cpp/data_source_sqlite3.cc
==============================================================================
--- branches/each-ds/src/lib/auth/cpp/data_source_sqlite3.cc (original)
+++ branches/each-ds/src/lib/auth/cpp/data_source_sqlite3.cc Fri Feb 26 01:35:35 2010
@@ -136,6 +136,7 @@
int sig_ttl = -1;
int rows = 0;
RRsetPtr rrset;
+ bool any = (rdtype == RRType::ANY());
rc = sqlite3_step(query);
while (rc == SQLITE_ROW) {
@@ -144,12 +145,12 @@
const char *sigtype = (const char *)sqlite3_column_text(query, 2);
const char *rdata = (const char *)sqlite3_column_text(query, 3);
+ RRType rt(sigtype ? sigtype : type);
+
// looking for something else but found NS; we need to inform
// the caller that this is a referral, but we do not return the
// NS RRset to the caller.
- if ((rdtype != RRType::NS() && rdtype != RRType::ANY()) &&
- ((strcmp(type, "NS") == 0 ||
- (sigtype != NULL && strcmp(sigtype, "NS") == 0)))) {
+ if (rdtype != RRType::NS() && !any && rt == RRType::NS()) {
flags |= REFERRAL;
rc = sqlite3_step(query);
continue;
@@ -157,20 +158,25 @@
rows++;
- // found a CNAME when looking for something else (other than NSEC
- // or ANY)
- if (strcmp(type, "CNAME") == 0 && rdtype != RRType::CNAME() &&
- rdtype != RRType::NSEC() && rdtype != RRType::ANY()) {
- flags |= CNAME_FOUND;
- }
-
- RRType rt(sigtype == NULL ? type : sigtype);
+ // Looking for something else but found CNAME
+ if (rt == RRType::CNAME() && rdtype != RRType::CNAME()) {
+ if (rdtype == RRType::NSEC()) {
+ // NSEC query, just skip the CNAME
+ rc = sqlite3_step(query);
+ continue;
+ } else if (!any) {
+ // include the CNAME, but don't flag it for chasing if
+ // this is an ANY query
+ flags |= CNAME_FOUND;
+ }
+ }
+
if (!target[rt]) {
rrset = RRsetPtr(new RRset(name, RRClass::IN(), rt, RRTTL(3600)));
target.addRRset(rrset);
}
- if (sigtype == NULL && RRType(type) == rrset->getType()) {
+ if (!sigtype && RRType(type) == rrset->getType()) {
RdataPtr item = createRdata(RRType(type), RRClass("IN"), rdata);
rrset->addRdata(item);
@@ -178,7 +184,7 @@
target_ttl = ttl;
}
rrset->setTTL(RRTTL(target_ttl));
- } else if (sigtype != NULL && RRType(sigtype) == rrset->getType()) {
+ } else if (sigtype && RRType(sigtype) == rrset->getType()) {
RdataPtr rrsig = createRdata(RRType::RRSIG(), RRClass::IN(), rdata);
if (rrset->getRRsig()) {
rrset->getRRsig()->addRdata(rrsig);
Modified: branches/each-ds/src/lib/auth/cpp/data_source_static.cc
==============================================================================
--- branches/each-ds/src/lib/auth/cpp/data_source_static.cc (original)
+++ branches/each-ds/src/lib/auth/cpp/data_source_static.cc Fri Feb 26 01:35:35 2010
@@ -26,6 +26,7 @@
#include <iostream>
+using namespace std;
using namespace isc::dns;
using namespace isc::dns::rdata;
@@ -35,6 +36,8 @@
StaticDataSrc::StaticDataSrc() : authors_name("authors.bind"),
version_name("version.bind")
{
+ setClass(RRClass::CH());
+
authors = RRsetPtr(new RRset(authors_name, RRClass::CH(),
RRType::TXT(), RRTTL(0)));
authors->addRdata(generic::TXT("Evan Hunt"));
@@ -92,30 +95,35 @@
Name* zone) const
{
flags = 0;
- if (qname == version_name &&
- qclass == version->getClass() &&
- (qtype == version->getType() || qtype == RRType::ANY())) {
- target.addRRset(version);
- return (SUCCESS);
- } else if (qname == version_name &&
- qclass == version_ns->getClass() &&
- (qtype == version->getType() || qtype == RRType::ANY())) {
- target.addRRset(version_ns);
- return (SUCCESS);
- } else if (qname == authors_name &&
- qclass == authors->getClass() &&
- (qtype == authors->getType() || qtype == RRType::ANY())) {
- target.addRRset(authors);
- return (SUCCESS);
- } else if (qname == authors_name &&
- qclass == authors_ns->getClass() &&
- (qtype == authors->getType() || qtype == RRType::ANY())) {
- target.addRRset(authors_ns);
- return (SUCCESS);
+ if (qclass != getClass()) {
+ return (ERROR);
}
- flags = NAME_NOT_FOUND;
- return (ERROR);
+ bool any = (qtype == RRType::ANY());
+
+ if (qname == version_name) {
+ if (qtype == RRType::TXT() || any) {
+ target.addRRset(version);
+ } else if (qtype == RRType::NS()) {
+ target.addRRset(version_ns);
+ } else {
+ flags = TYPE_NOT_FOUND;
+ }
+ } else if (qname == authors_name) {
+ if (qtype == RRType::TXT() || any) {
+ target.addRRset(authors);
+ return (SUCCESS);
+ } else if (qtype == RRType::NS()) {
+ target.addRRset(authors_ns);
+ return (SUCCESS);
+ } else {
+ flags = TYPE_NOT_FOUND;
+ }
+ } else {
+ flags = NAME_NOT_FOUND;
+ }
+
+ return (SUCCESS);
}
}
Modified: branches/each-ds/src/lib/auth/cpp/datasrc_unittest.cc
==============================================================================
--- branches/each-ds/src/lib/auth/cpp/datasrc_unittest.cc (original)
+++ branches/each-ds/src/lib/auth/cpp/datasrc_unittest.cc Fri Feb 26 01:35:35 2010
@@ -46,12 +46,12 @@
TestDataSrc ds;
OutputBuffer obuffer;
MessageRenderer renderer;
- Message query;
- static void queryFromFile(Message& message, const char* datafile);
+ Message msg;
+ static void msgFromFile(Message& message, const char* datafile);
};
void
-DataSrcTest::queryFromFile(Message& message, const char* datafile)
+DataSrcTest::msgFromFile(Message& message, const char* datafile)
{
std::vector<unsigned char> data;
UnitTestUtil::readWireData(datafile, data);
@@ -61,82 +61,536 @@
}
TEST_F(DataSrcTest, Query) {
- queryFromFile(query, "testdata/q_www");
- Query q = Query(query, false);
- ds.doQuery(q);
+ msgFromFile(msg, "testdata/q_www");
+ msg.makeResponse();
+ msg.setHeaderFlag(MessageFlag::AA());
+ msg.setRcode(Rcode::NOERROR());
+ Query q = Query(msg, false);
+ ds.doQuery(q);
+ Message* m = &(q.message());
+
+ EXPECT_EQ(Rcode::NOERROR(), m->getRcode());
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::QR()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::AA()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::RD()));
+
+ EXPECT_EQ(2, m->getRRCount(Section::ANSWER()));
+ EXPECT_EQ(4, m->getRRCount(Section::AUTHORITY()));
+ EXPECT_EQ(6, m->getRRCount(Section::ADDITIONAL()));
+
+ RRsetIterator rit = m->beginSection(Section::ANSWER());
+ RRsetPtr rrset = *rit;
+ EXPECT_EQ(Name("www.example.com"), rrset->getName());
+ EXPECT_EQ(RRType::A(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ RdataIteratorPtr it = rrset->getRdataIterator();
+ it->first();
+ EXPECT_EQ("192.168.1.1", it->getCurrent().toText());
+ it->next();
+ EXPECT_TRUE(it->isLast());
+
+ // XXX: also check ANSWER RRSIG
+
+ rit = m->beginSection(Section::AUTHORITY());
+ rrset = *rit;
+ EXPECT_EQ(Name("example.com"), rrset->getName());
+ EXPECT_EQ(RRType::NS(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ it = rrset->getRdataIterator();
+ it->first();
+ EXPECT_EQ("dns01.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_EQ("dns02.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_EQ("dns03.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_TRUE(it->isLast());
+
+ rit = m->beginSection(Section::ADDITIONAL());
+ rrset = *rit;
+ EXPECT_EQ(Name("dns01.example.com"), rrset->getName());
+ EXPECT_EQ(RRType::A(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ it = rrset->getRdataIterator();
+ it->first();
+ EXPECT_EQ("192.168.2.1", it->getCurrent().toText());
+ it->next();
+ EXPECT_TRUE(it->isLast());
}
TEST_F(DataSrcTest, NSQuery) {
- queryFromFile(query, "testdata/q_example_ns");
- Query q = Query(query, false);
- ds.doQuery(q);
+ msgFromFile(msg, "testdata/q_example_ns");
+ msg.makeResponse();
+ msg.setHeaderFlag(MessageFlag::AA());
+ msg.setRcode(Rcode::NOERROR());
+ Query q = Query(msg, false);
+ ds.doQuery(q);
+ Message* m = &(q.message());
+
+ EXPECT_EQ(Rcode::NOERROR(), m->getRcode());
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::QR()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::AA()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::RD()));
+
+ EXPECT_EQ(4, m->getRRCount(Section::ANSWER()));
+ EXPECT_EQ(0, m->getRRCount(Section::AUTHORITY()));
+ EXPECT_EQ(6, m->getRRCount(Section::ADDITIONAL()));
+
+ RRsetIterator rit = m->beginSection(Section::ANSWER());
+ RRsetPtr rrset = *rit;
+ EXPECT_EQ(Name("example.com"), rrset->getName());
+ EXPECT_EQ(RRType::NS(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ RdataIteratorPtr it = rrset->getRdataIterator();
+ it->first();
+ EXPECT_EQ("dns01.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_EQ("dns02.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_EQ("dns03.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_TRUE(it->isLast());
}
TEST_F(DataSrcTest, NxRRset) {
- queryFromFile(query, "testdata/q_example_ptr");
- Query q = Query(query, false);
- ds.doQuery(q);
+ msgFromFile(msg, "testdata/q_example_ptr");
+ msg.makeResponse();
+ msg.setHeaderFlag(MessageFlag::AA());
+ msg.setRcode(Rcode::NOERROR());
+ Query q = Query(msg, false);
+ ds.doQuery(q);
+ Message* m = &(q.message());
+
+ EXPECT_EQ(Rcode::NOERROR(), m->getRcode());
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::QR()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::AA()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::RD()));
+
+ EXPECT_EQ(0, m->getRRCount(Section::ANSWER()));
+ EXPECT_EQ(4, m->getRRCount(Section::AUTHORITY()));
+ EXPECT_EQ(0, m->getRRCount(Section::ADDITIONAL()));
+
+ RRsetIterator rit = m->beginSection(Section::AUTHORITY());
+ RRsetPtr rrset = *rit;
+ EXPECT_EQ(Name("example.com"), rrset->getName());
+ EXPECT_EQ(RRType::SOA(), rrset->getType());
}
TEST_F(DataSrcTest, Nxdomain) {
- queryFromFile(query, "testdata/q_glork");
- Query q = Query(query, false);
- ds.doQuery(q);
+ msgFromFile(msg, "testdata/q_glork");
+ msg.makeResponse();
+ msg.setHeaderFlag(MessageFlag::AA());
+ msg.setRcode(Rcode::NOERROR());
+ Query q = Query(msg, false);
+ ds.doQuery(q);
+ Message* m = &(q.message());
+
+ EXPECT_EQ(Rcode::NXDOMAIN(), m->getRcode());
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::QR()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::AA()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::RD()));
+
+ EXPECT_EQ(0, m->getRRCount(Section::ANSWER()));
+ EXPECT_EQ(6, m->getRRCount(Section::AUTHORITY()));
+ EXPECT_EQ(0, m->getRRCount(Section::ADDITIONAL()));
+
+ RRsetIterator rit = m->beginSection(Section::AUTHORITY());
+ RRsetPtr rrset = *rit;
+ EXPECT_EQ(Name("example.com"), rrset->getName());
+ EXPECT_EQ(RRType::NSEC(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+ // XXX: check for other authority section answers
}
TEST_F(DataSrcTest, NxZone) {
- queryFromFile(query, "testdata/q_spork");
- Query q = Query(query, false);
- ds.doQuery(q);
+ msgFromFile(msg, "testdata/q_spork");
+ msg.makeResponse();
+ msg.setHeaderFlag(MessageFlag::AA());
+ msg.setRcode(Rcode::NOERROR());
+ Query q = Query(msg, false);
+ ds.doQuery(q);
+ Message* m = &(q.message());
+
+ EXPECT_EQ(Rcode::REFUSED(), m->getRcode());
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::QR()));
+ EXPECT_FALSE(m->getHeaderFlag(MessageFlag::AA()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::RD()));
+
}
TEST_F(DataSrcTest, Wildcard) {
- queryFromFile(query, "testdata/q_wild");
- Query q = Query(query, false);
- ds.doQuery(q);
+ msgFromFile(msg, "testdata/q_wild");
+ msg.makeResponse();
+ msg.setHeaderFlag(MessageFlag::AA());
+ msg.setRcode(Rcode::NOERROR());
+ Query q = Query(msg, false);
+ ds.doQuery(q);
+ Message* m = &(q.message());
+
+ EXPECT_EQ(Rcode::NOERROR(), m->getRcode());
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::QR()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::AA()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::RD()));
+
+ EXPECT_EQ(2, m->getRRCount(Section::ANSWER()));
+ EXPECT_EQ(4, m->getRRCount(Section::AUTHORITY()));
+ EXPECT_EQ(6, m->getRRCount(Section::ADDITIONAL()));
+
+ RRsetIterator rit = m->beginSection(Section::ANSWER());
+ RRsetPtr rrset = *rit;
+ EXPECT_EQ(Name("www.wild.example.com"), rrset->getName());
+ EXPECT_EQ(RRType::A(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ RdataIteratorPtr it = rrset->getRdataIterator();
+ it->first();
+ EXPECT_EQ("192.168.3.2", it->getCurrent().toText());
+ it->next();
+ EXPECT_TRUE(it->isLast());
+
+ rit = m->beginSection(Section::AUTHORITY());
+ rrset = *rit;
+ EXPECT_EQ(Name("example.com"), rrset->getName());
+ EXPECT_EQ(RRType::NS(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ it = rrset->getRdataIterator();
+ it->first();
+ EXPECT_EQ("dns01.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_EQ("dns02.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_EQ("dns03.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_TRUE(it->isLast());
+
+ rit = m->beginSection(Section::ADDITIONAL());
+ rrset = *rit;
+ EXPECT_EQ(Name("dns01.example.com"), rrset->getName());
+ EXPECT_EQ(RRType::A(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ it = rrset->getRdataIterator();
+ it->first();
+ EXPECT_EQ("192.168.2.1", it->getCurrent().toText());
+ it->next();
+ EXPECT_TRUE(it->isLast());
}
TEST_F(DataSrcTest, AuthDelegation) {
- queryFromFile(query, "testdata/q_sql1");
- Query q = Query(query, false);
- ds.doQuery(q);
+ msgFromFile(msg, "testdata/q_sql1");
+ msg.makeResponse();
+ msg.setHeaderFlag(MessageFlag::AA());
+ msg.setRcode(Rcode::NOERROR());
+ Query q = Query(msg, false);
+ ds.doQuery(q);
+ Message* m = &(q.message());
+
+ EXPECT_EQ(Rcode::NOERROR(), m->getRcode());
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::QR()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::AA()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::RD()));
+
+ EXPECT_EQ(2, m->getRRCount(Section::ANSWER()));
+ EXPECT_EQ(4, m->getRRCount(Section::AUTHORITY()));
+ EXPECT_EQ(6, m->getRRCount(Section::ADDITIONAL()));
+
+ RRsetIterator rit = m->beginSection(Section::ANSWER());
+ RRsetPtr rrset = *rit;
+ EXPECT_EQ(Name("www.sql1.example.com"), rrset->getName());
+ EXPECT_EQ(RRType::A(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ RdataIteratorPtr it = rrset->getRdataIterator();
+ it->first();
+ EXPECT_EQ("192.168.2.2", it->getCurrent().toText());
+ it->next();
+ EXPECT_TRUE(it->isLast());
+
+ rit = m->beginSection(Section::AUTHORITY());
+ rrset = *rit;
+ EXPECT_EQ(Name("sql1.example.com"), rrset->getName());
+ EXPECT_EQ(RRType::NS(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ it = rrset->getRdataIterator();
+ it->first();
+ EXPECT_EQ("dns01.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_EQ("dns02.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_EQ("dns03.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_TRUE(it->isLast());
+
+ rit = m->beginSection(Section::ADDITIONAL());
+ rrset = *rit;
+ EXPECT_EQ(Name("dns01.example.com"), rrset->getName());
+ EXPECT_EQ(RRType::A(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ it = rrset->getRdataIterator();
+ it->first();
+ EXPECT_EQ("192.168.2.1", it->getCurrent().toText());
+ it->next();
+ EXPECT_TRUE(it->isLast());
}
TEST_F(DataSrcTest, Dname) {
- queryFromFile(query, "testdata/q_dname");
- Query q = Query(query, false);
- ds.doQuery(q);
+ msgFromFile(msg, "testdata/q_dname");
+ msg.makeResponse();
+ msg.setHeaderFlag(MessageFlag::AA());
+ msg.setRcode(Rcode::NOERROR());
+ Query q = Query(msg, false);
+ ds.doQuery(q);
+ Message* m = &(q.message());
+
+ EXPECT_EQ(Rcode::NOERROR(), m->getRcode());
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::QR()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::AA()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::RD()));
+
+ EXPECT_EQ(5, m->getRRCount(Section::ANSWER()));
+ EXPECT_EQ(4, m->getRRCount(Section::AUTHORITY()));
+ EXPECT_EQ(6, m->getRRCount(Section::ADDITIONAL()));
+
+ RRsetIterator rit = m->beginSection(Section::ANSWER());
+ RRsetPtr rrset = *rit;
+ EXPECT_EQ(Name("dname.example.com"), rrset->getName());
+ EXPECT_EQ(RRType::DNAME(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ RdataIteratorPtr it = rrset->getRdataIterator();
+ it->first();
+ EXPECT_EQ("sql1.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_TRUE(it->isLast());
+
+ // XXX: check CNAME and A record too
+
+ rit = m->beginSection(Section::AUTHORITY());
+ rrset = *rit;
+ EXPECT_EQ(Name("sql1.example.com"), rrset->getName());
+ EXPECT_EQ(RRType::NS(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ it = rrset->getRdataIterator();
+ it->first();
+ EXPECT_EQ("dns01.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_EQ("dns02.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_EQ("dns03.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_TRUE(it->isLast());
+
+ rit = m->beginSection(Section::ADDITIONAL());
+ rrset = *rit;
+ EXPECT_EQ(Name("dns01.example.com"), rrset->getName());
+ EXPECT_EQ(RRType::A(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ it = rrset->getRdataIterator();
+ it->first();
+ EXPECT_EQ("192.168.2.1", it->getCurrent().toText());
+ it->next();
+ EXPECT_TRUE(it->isLast());
}
TEST_F(DataSrcTest, Cname) {
- queryFromFile(query, "testdata/q_cname");
- Query q = Query(query, false);
- ds.doQuery(q);
+ msgFromFile(msg, "testdata/q_cname");
+ msg.makeResponse();
+ msg.setHeaderFlag(MessageFlag::AA());
+ msg.setRcode(Rcode::NOERROR());
+ Query q = Query(msg, false);
+ ds.doQuery(q);
+ Message* m = &(q.message());
+
+ EXPECT_EQ(Rcode::NOERROR(), m->getRcode());
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::QR()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::AA()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::RD()));
+
+ EXPECT_EQ(2, m->getRRCount(Section::ANSWER()));
+ EXPECT_EQ(0, m->getRRCount(Section::AUTHORITY()));
+ EXPECT_EQ(0, m->getRRCount(Section::ADDITIONAL()));
+
+ RRsetIterator rit = m->beginSection(Section::ANSWER());
+ RRsetPtr rrset = *rit;
+ EXPECT_EQ(Name("foo.example.com"), rrset->getName());
+ EXPECT_EQ(RRType::CNAME(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ RdataIteratorPtr it = rrset->getRdataIterator();
+ it->first();
+ EXPECT_EQ("cnametest.flame.org.", it->getCurrent().toText());
+ it->next();
+ EXPECT_TRUE(it->isLast());
}
TEST_F(DataSrcTest, CnameInt) {
- queryFromFile(query, "testdata/q_cname_int");
- Query q = Query(query, false);
- ds.doQuery(q);
+ msgFromFile(msg, "testdata/q_cname_int");
+ msg.makeResponse();
+ msg.setHeaderFlag(MessageFlag::AA());
+ msg.setRcode(Rcode::NOERROR());
+ Query q = Query(msg, false);
+ ds.doQuery(q);
+ Message* m = &(q.message());
+
+ EXPECT_EQ(Rcode::NOERROR(), m->getRcode());
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::QR()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::AA()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::RD()));
+
+ EXPECT_EQ(4, m->getRRCount(Section::ANSWER()));
+ EXPECT_EQ(4, m->getRRCount(Section::AUTHORITY()));
+ EXPECT_EQ(6, m->getRRCount(Section::ADDITIONAL()));
+
+ RRsetIterator rit = m->beginSection(Section::ANSWER());
+ RRsetPtr rrset = *rit;
+ EXPECT_EQ(Name("cname-int.example.com"), rrset->getName());
+ EXPECT_EQ(RRType::CNAME(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ RdataIteratorPtr it = rrset->getRdataIterator();
+ it->first();
+ EXPECT_EQ("www.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_TRUE(it->isLast());
+
+ // XXX: check a record as well
+
+ rit = m->beginSection(Section::AUTHORITY());
+ rrset = *rit;
+ EXPECT_EQ(Name("example.com"), rrset->getName());
+ EXPECT_EQ(RRType::NS(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
}
TEST_F(DataSrcTest, CnameExt) {
- queryFromFile(query, "testdata/q_cname_ext");
- Query q = Query(query, false);
- ds.doQuery(q);
+ msgFromFile(msg, "testdata/q_cname_ext");
+ msg.makeResponse();
+ msg.setHeaderFlag(MessageFlag::AA());
+ msg.setRcode(Rcode::NOERROR());
+ Query q = Query(msg, false);
+ ds.doQuery(q);
+ Message* m = &(q.message());
+
+ EXPECT_EQ(Rcode::NOERROR(), m->getRcode());
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::QR()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::AA()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::RD()));
+
+ EXPECT_EQ(4, m->getRRCount(Section::ANSWER()));
+ EXPECT_EQ(4, m->getRRCount(Section::AUTHORITY()));
+ EXPECT_EQ(6, m->getRRCount(Section::ADDITIONAL()));
+
+ RRsetIterator rit = m->beginSection(Section::ANSWER());
+ RRsetPtr rrset = *rit;
+ EXPECT_EQ(Name("cname-ext.example.com"), rrset->getName());
+ EXPECT_EQ(RRType::CNAME(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ RdataIteratorPtr it = rrset->getRdataIterator();
+ it->first();
+ EXPECT_EQ("www.sql1.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_TRUE(it->isLast());
+
+ rit = m->beginSection(Section::AUTHORITY());
+ rrset = *rit;
+ EXPECT_EQ(Name("sql1.example.com"), rrset->getName());
+ EXPECT_EQ(RRType::NS(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
}
TEST_F(DataSrcTest, Delegation) {
- queryFromFile(query, "testdata/q_subzone");
- Query q = Query(query, false);
- ds.doQuery(q);
+ msgFromFile(msg, "testdata/q_subzone");
+ msg.makeResponse();
+ msg.setHeaderFlag(MessageFlag::AA());
+ msg.setRcode(Rcode::NOERROR());
+ Query q = Query(msg, false);
+ ds.doQuery(q);
+ Message* m = &(q.message());
+
+ EXPECT_EQ(Rcode::NOERROR(), m->getRcode());
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::QR()));
+ EXPECT_FALSE(m->getHeaderFlag(MessageFlag::AA()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::RD()));
+
+ EXPECT_EQ(0, m->getRRCount(Section::ANSWER()));
+ EXPECT_EQ(5, m->getRRCount(Section::AUTHORITY()));
+ EXPECT_EQ(2, m->getRRCount(Section::ADDITIONAL()));
+
+ RRsetIterator rit = m->beginSection(Section::AUTHORITY());
+ RRsetPtr rrset = *rit;
+ EXPECT_EQ(Name("subzone.example.com."), rrset->getName());
+ EXPECT_EQ(RRType::NS(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ RdataIteratorPtr it = rrset->getRdataIterator();
+ it->first();
+ EXPECT_EQ("ns1.subzone.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_FALSE(it->isLast());
+
+ rit = m->beginSection(Section::ADDITIONAL());
+ rrset = *rit;
+ EXPECT_EQ(Name("ns1.subzone.example.com"), rrset->getName());
+ EXPECT_EQ(RRType::A(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ it = rrset->getRdataIterator();
+ it->first();
+ EXPECT_EQ("192.168.3.1", it->getCurrent().toText());
+ it->next();
+ EXPECT_TRUE(it->isLast());
}
TEST_F(DataSrcTest, DS) {
- queryFromFile(query, "testdata/q_subzone_ds");
- Query q = Query(query, false);
- ds.doQuery(q);
-}
-
-}
-
+ msgFromFile(msg, "testdata/q_subzone_ds");
+ msg.makeResponse();
+ msg.setHeaderFlag(MessageFlag::AA());
+ msg.setRcode(Rcode::NOERROR());
+ Query q = Query(msg, false);
+ ds.doQuery(q);
+ Message* m = &(q.message());
+
+ EXPECT_EQ(Rcode::NOERROR(), m->getRcode());
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::QR()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::AA()));
+ EXPECT_TRUE(m->getHeaderFlag(MessageFlag::RD()));
+
+ EXPECT_EQ(3, m->getRRCount(Section::ANSWER()));
+ EXPECT_EQ(4, m->getRRCount(Section::AUTHORITY()));
+ EXPECT_EQ(6, m->getRRCount(Section::ADDITIONAL()));
+
+ RRsetIterator rit = m->beginSection(Section::ANSWER());
+ RRsetPtr rrset = *rit;
+ EXPECT_EQ(Name("subzone.example.com."), rrset->getName());
+ EXPECT_EQ(RRType::DS(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ rit = m->beginSection(Section::AUTHORITY());
+ rrset = *rit;
+ EXPECT_EQ(Name("example.com"), rrset->getName());
+ EXPECT_EQ(RRType::NS(), rrset->getType());
+ EXPECT_EQ(RRClass::IN(), rrset->getClass());
+
+ RdataIteratorPtr it = rrset->getRdataIterator();
+ it->first();
+ EXPECT_EQ("dns01.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_EQ("dns02.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_EQ("dns03.example.com.", it->getCurrent().toText());
+ it->next();
+ EXPECT_TRUE(it->isLast());
+}
+
+}
+
Modified: branches/each-ds/src/lib/auth/cpp/unittest_ds.cc
==============================================================================
--- branches/each-ds/src/lib/auth/cpp/unittest_ds.cc (original)
+++ branches/each-ds/src/lib/auth/cpp/unittest_ds.cc Fri Feb 26 01:35:35 2010
@@ -38,130 +38,330 @@
namespace isc {
namespace auth {
-TestDataSrc::TestDataSrc() : example_name("example.com"),
- sql1_name("sql1.example.com")
+TestDataSrc::TestDataSrc() : example("example.com"),
+ sql1("sql1.example.com"),
+ www_sql1("www.sql1.example.com"),
+ www("www.example.com"),
+ foo("foo.example.com"),
+ dns01("dns01.example.com"),
+ dns02("dns02.example.com"),
+ dns03("dns03.example.com"),
+ cnameint("cname-int.example.com"),
+ cnameext("cname-ext.example.com"),
+ dname("dname.example.com"),
+ wild("*.wild.example.com"),
+ subzone("subzone.example.com")
{
- example_ns = RRsetPtr(new RRset(example_name, RRClass::IN(),
+ RRset* rp;
+ RRsetPtr rrsig;
+
+ // example.com
+ example_ns = RRsetPtr(new RRset(example, RRClass::IN(),
RRType::NS(), RRTTL(3600)));
- example_ns->addRdata(generic::NS(Name("dns01.example.com")));
- example_ns->addRdata(generic::NS(Name("dns02.example.com")));
- example_ns->addRdata(generic::NS(Name("dns03.example.com")));
-
- example_rrsig = RRsetPtr(new RRset(example_name, RRClass::IN(),
- RRType::RRSIG(), RRTTL(3600)));
- example_rrsig->addRdata(generic::RRSIG("NS 5 2 3600 20100322084538 20100220084538 33495 example.com. ClcrfjkQZUY5L6ZlCkU3cJHzcrEGrofKSVeeoeZ+w6yeEowFNVXs2YBo3tom53DiCrdD9rs3feVSLGW5rjsz/O6lDuomgQG+EVSnWa7GTIPBXj1BmDXXp3XxeldYmhf4UzaN5BA+RUA5E8NChNKuNNof76j2S9tilfN/kvpy4fw="));
-
- sql1_ns = RRsetPtr(new RRset(sql1_name, RRClass::IN(),
+ example_ns->addRdata(generic::NS(dns01));
+ example_ns->addRdata(generic::NS(dns02));
+ example_ns->addRdata(generic::NS(dns03));
+
+ rp = new RRset(example, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+ rrsig->addRdata(generic::RRSIG("NS 5 2 3600 20100322084538 20100220084538 33495 example.com. ClcrfjkQZUY5L6ZlCkU3cJHzcrEGrofKSVeeoeZ+w6yeEowFNVXs2YBo3tom53DiCrdD9rs3feVSLGW5rjsz/O6lDuomgQG+EVSnWa7GTIPBXj1BmDXXp3XxeldYmhf4UzaN5BA+RUA5E8NChNKuNNof76j2S9tilfN/kvpy4fw="));
+ example_ns->addRRsig(rrsig);
+
+ example_soa = RRsetPtr(new RRset(example, RRClass::IN(),
+ RRType::SOA(), RRTTL(3600)));
+ example_soa->addRdata(generic::SOA("master.example.com. admin.example.com. 1234 3600 1800 2419200 7200"));
+
+ rp = new RRset(example, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+ rrsig->addRdata(generic::RRSIG("SOA 5 2 3600 20100322084538 20100220084538 33495 example.com. KUun66Qaw36osk2BJS6U1fAy3PPDkNo2QK4meGNbDBY8q8b+f2o+IXJ14YCvssGl1ORW0CcLnDRxssnk8V/Svmj5iFhO+8HC2hnVBdi2zewvdVtwRb+lWwKN7pkXXwuy6g1t9WCd/j5FCc/wgxqtZUTPb6XgZcnHrORDMOTqLs4="));
+ example_soa->addRRsig(rrsig);
+
+ example_nsec = RRsetPtr(new RRset(example, RRClass::IN(),
+ RRType::NSEC(), RRTTL(3600)));
+ example_nsec->addRdata(generic::NSEC("cname-ext.example.com. NS SOA MX RRSIG NSEC DNSKEY"));
+ rp = new RRset(example, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+
+ rrsig->addRdata(generic::RRSIG("NSEC 5 2 7200 20100322084538 20100220084538 33495 example.com. KxuVaPPKNPJzr/q+cJPiNlkHVTQK0LVsgTbSqruXQc25lAd0wn5oKUtxL1bEAchHkfA8eLzcYCj2ZqqAv9OJubw53mfskTad7UHs4Uj2RTrIsNGMCiZGgOpvNb9JcWpQtoyXVT1uNse+Qsbeir0eyeYIufUynFU041jtNrlJMio="));
+ example_nsec->addRRsig(rrsig);
+
+ // sql1.example.com
+ sql1_ns = RRsetPtr(new RRset(sql1, RRClass::IN(),
RRType::NS(), RRTTL(3600)));
- sql1_ns->addRdata(generic::NS(Name("dns01.example.com")));
- sql1_ns->addRdata(generic::NS(Name("dns02.example.com")));
- sql1_ns->addRdata(generic::NS(Name("dns03.example.com")));
-
- sql1_rrsig = RRsetPtr(new RRset(sql1_name, RRClass::IN(),
- RRType::RRSIG(), RRTTL(3600)));
- sql1_rrsig->addRdata(generic::RRSIG("NS 5 3 3600 20100322084536 20100220084536 12447 sql1.example.com. 0CL8noy0NSgoWwuKd+Dc6vyIIw2BrAEBx0IJzcSB6GlB25x/zjEd6AJG0be13HN6jOaTX8iWTuCVrEYuXg76V+M4EvTZHjEScj0az74TrDv4Vdo459paGKCX9B8NLJW1mW4fzZrrXQ8jmBEZeS91Q5rJrO+UKJEuUz3LYdTPvao="));
-
- www_sql1_a = RRsetPtr(new RRset(Name("www.sql1.example.com"),
+ sql1_ns->addRdata(generic::NS(dns01));
+ sql1_ns->addRdata(generic::NS(dns02));
+ sql1_ns->addRdata(generic::NS(dns03));
+
+ rp = new RRset(sql1, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+ rrsig->addRdata(generic::RRSIG("NS 5 3 3600 20100322084536 20100220084536 12447 sql1.example.com. 0CL8noy0NSgoWwuKd+Dc6vyIIw2BrAEBx0IJzcSB6GlB25x/zjEd6AJG0be13HN6jOaTX8iWTuCVrEYuXg76V+M4EvTZHjEScj0az74TrDv4Vdo459paGKCX9B8NLJW1mW4fzZrrXQ8jmBEZeS91Q5rJrO+UKJEuUz3LYdTPvao="));
+ sql1_ns->addRRsig(rrsig);
+
+ sql1_soa = RRsetPtr(new RRset(sql1, RRClass::IN(),
+ RRType::SOA(), RRTTL(3600)));
+ sql1_soa->addRdata(generic::SOA("master.example.com. admin.example.com. 678 3600 1800 2419200 7200"));
+
+ rp = new RRset(sql1, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+ rrsig->addRdata(generic::RRSIG("SOA 5 3 3600 20100322084536 20100220084536 12447 sql1.example.com. oakulfyljL/RAKgCKXEZ3KsG8BJj5WG4JK4moWFB6c9OKem6jIk8hKP2XlUVXFuOYJlRdIM4KicmR2GAK+5jJp6z5ShssstYTXo3QosVm6oCKumuFeLFHzcjfqP1D+F9NsvHldJIBnS/4ebPkmR5OENyCZXQF5HmN2awIj4CLjE="));
+ sql1_soa->addRRsig(rrsig);
+
+ sql1_nsec = RRsetPtr(new RRset(sql1, RRClass::IN(),
+ RRType::NSEC(), RRTTL(3600)));
+ sql1_nsec->addRdata(generic::NSEC("www.sql1.example.com. NS SOA RRSIG NSEC DNSKEY"));
+ rp = new RRset(sql1, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+
+ rrsig->addRdata(generic::RRSIG("NSEC 5 3 7200 20100322084536 20100220084536 12447 sql1.example.com. v71CgdTYccCiTqfRcn6HsvISQa8ruvUfCKtpwym0RW/G27xlZn8otj2IMtWwkLxti8Rqqu+PTViLaOIbeVfHBcqzAd7U59cAOYoq3ODZx6auiE3C23HAKqUavKcP7Esaajm1cbcWy6Kyie4CAZc8M7EeKxgkXMKJGqBQzF+/FOo="));
+ sql1_nsec->addRRsig(rrsig);
+ sql1_ds = RRsetPtr(new RRset(sql1, RRClass::IN(),
+ RRType::DS(), RRTTL(3600)));
+ sql1_ds->addRdata(generic::DS("33313 5 1 0FDD7A2C11AA7F55D50FBF9B7EDDA2322C541A8D"));
+ sql1_ds->addRdata(generic::DS("33313 5 2 00B99B7006F496D135B01AB17EDB469B4BE9E1973884DEA757BC4E3015A8C3AB"));
+
+ rp = new RRset(sql1, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+ rrsig->addRdata(generic::RRSIG("DS 5 3 3600 20100322084538 20100220084538 33495 example.com. dIqZKvpkJN1l92SOiWgJh3KbjErIN+EfojMsm4pEdV5xQdZwj6DNNEu6Kw4rRwdvrZIu0TyqPr3jSJb7o6R7vZgZzmLfVV/ojQah7rwuYHCFcfyZ4JyK2311fMhRR1QAvMsdcjdyA1XC140Cm6AnL3cH5rh/KUks/0ec3Ca7GNQ="));
+ sql1_ds->addRRsig(rrsig);
+
+
+ sql1_ds_nsec = RRsetPtr(new RRset(sql1, RRClass::IN(),
+ RRType::NSEC(), RRTTL(3600)));
+ sql1_ds_nsec->addRdata(generic::NSEC("subzone.example.com. NS DS RRSIG NSEC"));
+ rp = new RRset(sql1, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+ rrsig->addRdata(generic::RRSIG("NSEC 5 3 7200 20100322084538 20100220084538 33495 example.com. k9FRdFyk/cPdkmmaoZbGZPpzIzfbFWQ3QCHd2qhJa0xAXaEOT/GBL6aFqx9SlunDu2wgES+To5fWPZGi4NzWpp6c5t27rnATN/oCEQ/UYIJKmWbqrXdst0Ps5boznk7suK2Y+km31KxaIf3fDd/T3kZCVsR0aWKRRRatPb7GfLw="));
+ sql1_ds_nsec->addRRsig(rrsig);
+
+ // www.sql1.example.com
+ www_sql1_a = RRsetPtr(new RRset(www_sql1,
RRClass::IN(), RRType::A(),
RRTTL(3600)));
www_sql1_a->addRdata(in::A("192.168.2.2"));
- www_sql1_rrsig = RRsetPtr(new RRset(Name("www.sql1.example.com"),
- RRClass::IN(), RRType::RRSIG(),
- RRTTL(3600)));
- www_sql1_rrsig->addRdata(generic::RRSIG("A 5 4 3600 20100322084536 20100220084536 12447 sql1.example.com. DNdVKxB3oBsB14NPoV9WG14Y/g4zMcIXLYnFjj9vRZRZJpAvbTEipiXlayuhOxnqU827OipETQyeULZmLsqIQ1wK4Fgf+9b5aJ8D85/o4wBka00X4hZ3MwDPRb4mjuogwBTBg5NRpNSzUfbkPGiav08BFwgg+Efm9veSB05arS0="));
-
- dns01_example_a = RRsetPtr(new RRset(Name("dns01.example.com"),
+ rp = new RRset(www_sql1, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+ rrsig->addRdata(generic::RRSIG("A 5 4 3600 20100322084536 20100220084536 12447 sql1.example.com. DNdVKxB3oBsB14NPoV9WG14Y/g4zMcIXLYnFjj9vRZRZJpAvbTEipiXlayuhOxnqU827OipETQyeULZmLsqIQ1wK4Fgf+9b5aJ8D85/o4wBka00X4hZ3MwDPRb4mjuogwBTBg5NRpNSzUfbkPGiav08BFwgg+Efm9veSB05arS0="));
+ www_sql1_a->addRRsig(rrsig);
+
+ www_sql1_nsec = RRsetPtr(new RRset(www_sql1,
+ RRClass::IN(), RRType::NSEC(),
+ RRTTL(3600)));
+ www_sql1_nsec->addRdata(generic::NSEC("sql1.example.com. A RRSIG NSEC"));
+ rp = new RRset(www_sql1, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+
+ rrsig->addRdata(generic::RRSIG("NSEC 5 4 7200 20100322084536 20100220084536 12447 sql1.example.com. cJMJhDx/ND7/9j3zhyXe+6eaSsU7ByYpXhJzbe+OhjFgH0VasQXq7o1QB3I293UZ+yhkjgXap+9QtPlraaNaYyTyOMQ42OoxSefJpYz9CME/FI2tsUfyrCnLFxYRNet7sMS0q+hLqxRayuEHDFDp72hHPGLJQ8a7jq4SrIonT50="));
+ www_sql1_nsec->addRRsig(rrsig);
+
+ // dns01.example.com
+ dns01_a = RRsetPtr(new RRset(dns01,
RRClass::IN(), RRType::A(),
RRTTL(3600)));
- dns01_example_a->addRdata(in::A("192.168.2.1"));
-
- dns01_example_rrsig = RRsetPtr(new RRset(Name("dns01.example.com"),
- RRClass::IN(), RRType::RRSIG(),
- RRTTL(3600)));
- dns01_example_rrsig->addRdata(generic::RRSIG("A 5 3 3600 20100322084538 20100220084538 33495 example.com. NIawlZLk8WZAjNux7oQM2mslfW52OZFFkWt++7FHu2SU98XqEeKfCMnpgtWe5T8Nr9cS8df901iEOJoWQzGTEaHYUBtEhsSjBVn7mKp3fz6473a2xxy75SUKZ0rxjNXSZ8Q5rnFmkX0HTH2Sg51mtjH6aC2pfheQnA2t193BnSg="));
-
- dns02_example_a = RRsetPtr(new RRset(Name("dns02.example.com"),
+ dns01_a->addRdata(in::A("192.168.2.1"));
+
+ rp = new RRset(dns01, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+ rrsig->addRdata(generic::RRSIG("A 5 3 3600 20100322084538 20100220084538 33495 example.com. NIawlZLk8WZAjNux7oQM2mslfW52OZFFkWt++7FHu2SU98XqEeKfCMnpgtWe5T8Nr9cS8df901iEOJoWQzGTEaHYUBtEhsSjBVn7mKp3fz6473a2xxy75SUKZ0rxjNXSZ8Q5rnFmkX0HTH2Sg51mtjH6aC2pfheQnA2t193BnSg="));
+ dns01_a->addRRsig(rrsig);
+
+ dns01_nsec = RRsetPtr(new RRset(dns01, RRClass::IN(), RRType::NSEC(), RRTTL(3600)));
+ dns01_nsec->addRdata(generic::NSEC("dns02.example.com. A RRSIG NSEC"));
+
+ rp = new RRset(dns01, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+ rrsig->addRdata(generic::RRSIG("NSEC 5 3 7200 20100322084538 20100220084538 33495 example.com. EkyeshmMNP9xiAz6mDFDIwksTdmkF9zsFzLuVKAgK6eUk7St6tp5PSvjA8nWol0vdvvz4LK85a4ffTFEiNRyvWeYP2vOhEkyDcrwuCd8Vc3jh/8Sm1Js+nX7hJStrZGFvp2TWPpt9nKH5p3MxXvTb/YVurnue0xSeFAE17O3+I0="));
+ dns01_nsec->addRRsig(rrsig);
+
+ // dns02.example.com
+ dns02_a = RRsetPtr(new RRset(dns02, RRClass::IN(), RRType::A(), RRTTL(3600)));
+ dns02_a->addRdata(in::A("192.168.2.2"));
+
+ rp = new RRset(dns02, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+ rrsig->addRdata(generic::RRSIG("A 5 3 3600 20100322084538 20100220084538 33495 example.com. XJtVMbUIRE0mk6Hn/Nx6k36jaxaBDPK2/IYB6vCQjJETz6gW4T6q/H/eY9/Lsw5iYPFhoBRDxT4XFj575t98kELXnJe1WhuMbRPlOhyOjxkLECaUne/sbFPOtbGFx9ohuojI0RgxxZiCFaO8wJuv6nfPuzmlLajWS6z9NZeOMIk="));
+ dns02_a->addRRsig(rrsig);
+
+ dns02_nsec = RRsetPtr(new RRset(dns02, RRClass::IN(),
+ RRType::NSEC(), RRTTL(3600)));
+ dns02_nsec->addRdata(generic::NSEC("dns03.example.com. A RRSIG NSEC"));
+ rp = new RRset(dns02, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+
+ rrsig->addRdata(generic::RRSIG("NSEC 5 3 7200 20100322084538 20100220084538 33495 example.com. imBNTMB3sPU4kblcaAH6V7lCVt5xgtAybi3DA/SbLEulLaV2NE6vcoEn/AieaM4mOJicQnUDj/H+1hSEhzxU2tRM8zfVlvztxQWn6eh7ZR4mKfNDSvRUGU9ykhpwMyC7wjOt1j5bcSA/OTnLRAilslnJyOM4bSaxVEFo8YPjncY="));
+ dns02_nsec->addRRsig(rrsig);
+
+ // dns03.example.com
+ dns03_a = RRsetPtr(new RRset(dns03,
RRClass::IN(), RRType::A(),
RRTTL(3600)));
- dns02_example_a->addRdata(in::A("192.168.2.2"));
-
- dns02_example_rrsig = RRsetPtr(new RRset(Name("dns02.example.com"),
- RRClass::IN(), RRType::RRSIG(),
- RRTTL(3600)));
- dns02_example_rrsig->addRdata(generic::RRSIG("A 5 3 3600 20100322084538 20100220084538 33495 example.com. XJtVMbUIRE0mk6Hn/Nx6k36jaxaBDPK2/IYB6vCQjJETz6gW4T6q/H/eY9/Lsw5iYPFhoBRDxT4XFj575t98kELXnJe1WhuMbRPlOhyOjxkLECaUne/sbFPOtbGFx9ohuojI0RgxxZiCFaO8wJuv6nfPuzmlLajWS6z9NZeOMIk="));
-
- dns03_example_a = RRsetPtr(new RRset(Name("dns03.example.com"),
- RRClass::IN(), RRType::A(),
- RRTTL(3600)));
- dns03_example_a->addRdata(in::A("192.168.2.3"));
-
- dns03_example_rrsig = RRsetPtr(new RRset(Name("dns03.example.com"),
- RRClass::IN(), RRType::RRSIG(),
- RRTTL(3600)));
- dns03_example_rrsig->addRdata(generic::RRSIG("A 5 3 3600 20100322084538 20100220084538 33495 example.com. Ubrcm1H+F6m8khle7P9zU8eO+Jtuj+1Vx1MM5KAkmZPJwQe9uTcoCpQa6DXOGG9kajDTnNN1Be1gkZuJDTZJG4SmJLXLbNY3RDnxpGmWta3qs/VgDq78/YM8ropt1/s7YKyrCfGE2ff+FUB0mLObiG01ZV2gu5HJzgE7SEWLEiI="));
-
- www_example_a = RRsetPtr(new RRset(Name("www.example.com"),
- RRClass::IN(), RRType::A(),
+ dns03_a->addRdata(in::A("192.168.2.3"));
+
+ rp = new RRset(dns03, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+ rrsig->addRdata(generic::RRSIG("A 5 3 3600 20100322084538 20100220084538 33495 example.com. Ubrcm1H+F6m8khle7P9zU8eO+Jtuj+1Vx1MM5KAkmZPJwQe9uTcoCpQa6DXOGG9kajDTnNN1Be1gkZuJDTZJG4SmJLXLbNY3RDnxpGmWta3qs/VgDq78/YM8ropt1/s7YKyrCfGE2ff+FUB0mLObiG01ZV2gu5HJzgE7SEWLEiI="));
+ dns03_a->addRRsig(rrsig);
+
+ dns03_nsec = RRsetPtr(new RRset(dns03, RRClass::IN(),
+ RRType::NSEC(), RRTTL(3600)));
+ dns03_nsec->addRdata(generic::NSEC("foo.example.com. A RRSIG NSEC"));
+ rp = new RRset(dns03, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+
+ rrsig->addRdata(generic::RRSIG("NSEC 5 3 7200 20100322084538 20100220084538 33495 example.com. nn829Xw5CJFnPHwI9WHeT5epQv+odtCkHnjlPFGoPTLOyiks+041UmMqtq3uiSp4d2meMSe9UuDvoROT0L6NTtQQvVqiDhTn0irTFw1uw7fO8ZTG7eyu6Ypfz0+HvfbNvd4kMoD2OTgADRXPVsCTwK+PBOIIG9YTEQfl8pCqW5g="));
+ dns03_nsec->addRRsig(rrsig);
+
+ // www.example.com
+ www_a = RRsetPtr(new RRset(www, RRClass::IN(), RRType::A(),
RRTTL(3600)));
- www_example_a->addRdata(in::A("192.168.1.1"));
-
- www_example_rrsig = RRsetPtr(new RRset(Name("www.example.com"),
- RRClass::IN(), RRType::RRSIG(),
- RRTTL(3600)));
- www_example_rrsig->addRdata(generic::RRSIG("A 5 3 3600 20100322084538 20100220084538 33495 example.com. qyFyyV/mE8x4pdhudr5iycwhDsva31MzwO1kBR+bDKvzJg8mN8KxlPZrOlNNUhd3YRXQVwieMyxOTWRPXoxrNEDkNwimXkfe3rrHY7ibV9eNS4OIBUjb44VjCNr9CmQSzfuQ2yxO2r+YIuPYHRCjieD4xh6t9ay4IaCN/tDAJ+Q="));
-
- wild_example_a = RRsetPtr(new RRset(Name("*.wild.example.com"),
- RRClass::IN(), RRType::A(),
+ www_a->addRdata(in::A("192.168.1.1"));
+
+ rp = new RRset(www, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+ rrsig->addRdata(generic::RRSIG("A 5 3 3600 20100322084538 20100220084538 33495 example.com. qyFyyV/mE8x4pdhudr5iycwhDsva31MzwO1kBR+bDKvzJg8mN8KxlPZrOlNNUhd3YRXQVwieMyxOTWRPXoxrNEDkNwimXkfe3rrHY7ibV9eNS4OIBUjb44VjCNr9CmQSzfuQ2yxO2r+YIuPYHRCjieD4xh6t9ay4IaCN/tDAJ+Q="));
+ www_a->addRRsig(rrsig);
+
+ www_nsec = RRsetPtr(new RRset(www, RRClass::IN(),
+ RRType::NSEC(), RRTTL(3600)));
+ www_nsec->addRdata(generic::NSEC("example.com. A RRSIG NSEC"));
+ rp = new RRset(www, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+
+ rrsig->addRdata(generic::RRSIG("NSEC 5 3 7200 20100322084538 20100220084538 33495 example.com. ZLZlSVBa2oe4U+7SZASnypP2VkI5gg1/1cVGqYUvfYNIUkcVMWDgn7DZCfpmo+2vdlV/4VhAc+sjDd+X+e57XGnW8+lqZHvG6NMMhmSGmeATD3D+8lEJJGo0dxoN4rHJQyp/eT2S4nChz+D/ze+YRagYxGF7pXm9zcrw3kKZGTs="));
+ www_nsec->addRRsig(rrsig);
+
+ // *.wild.example.com
+ wild_a = RRsetPtr(new RRset(wild, RRClass::IN(), RRType::A(),
RRTTL(3600)));
- wild_example_a->addRdata(in::A("192.168.3.2"));
-
- wild_example_rrsig = RRsetPtr(new RRset(Name("*.wild.example.com"),
- RRClass::IN(), RRType::RRSIG(),
- RRTTL(3600)));
- wild_example_rrsig->addRdata(generic::RRSIG("A 5 3 3600 20100322084538 20100220084538 33495 example.com. FdO+UWONgtLKFxUzzygGunw67F9y8SzsP7yOLEYVJclRR8X3Ii62L0gtQHq2y0TcKsXttRsD6XY+tM5P/pgXlTNi7Bk4Fgb0PIDPjOsfT4DrS80kWn0YbinM/4/FA1j5ru5sTTboOY5UGhvDnoA9ogNuQQYb2/3wkoH0PrA2Q/0="));
-
- foo_example_cname = RRsetPtr(new RRset(Name("foo.example.com"),
- RRClass::IN(), RRType::CNAME(),
+ wild_a->addRdata(in::A("192.168.3.2"));
+
+ rp = new RRset(wild, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+ rrsig->addRdata(generic::RRSIG("A 5 3 3600 20100322084538 20100220084538 33495 example.com. FdO+UWONgtLKFxUzzygGunw67F9y8SzsP7yOLEYVJclRR8X3Ii62L0gtQHq2y0TcKsXttRsD6XY+tM5P/pgXlTNi7Bk4Fgb0PIDPjOsfT4DrS80kWn0YbinM/4/FA1j5ru5sTTboOY5UGhvDnoA9ogNuQQYb2/3wkoH0PrA2Q/0="));
+ wild_a->addRRsig(rrsig);
+
+ wild_nsec = RRsetPtr(new RRset(wild, RRClass::IN(),
+ RRType::NSEC(), RRTTL(3600)));
+ wild_nsec->addRdata(generic::NSEC("www.example.com. A RRSIG NSEC"));
+ rp = new RRset(wild, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+
+ rrsig->addRdata(generic::RRSIG("NSEC 5 3 7200 20100322084538 20100220084538 33495 example.com. OoGYslRj4xjZnBuzgOqsrvkDAHWycmQzbUxCRmgWnCbXiobJK7/ynONH3jm8G3vGlU0lwpHkhNs6cUK+6Nu8W49X3MT0Xksl/brroLcXYLi3vfxnYUNMMpXdeFl6WNNfoJRo90F/f/TWXAClRrDS29qiG3G1PEJZikIxZsZ0tyM="));
+ wild_nsec->addRRsig(rrsig);
+
+ // foo.example.com
+ foo_cname = RRsetPtr(new RRset(foo, RRClass::IN(), RRType::CNAME(),
RRTTL(3600)));
- foo_example_cname->addRdata(generic::CNAME("cnametest.flame.org"));
-
- foo_example_rrsig = RRsetPtr(new RRset(Name("foo.example.com"),
- RRClass::IN(), RRType::RRSIG(),
- RRTTL(3600)));
- foo_example_rrsig->addRdata(generic::RRSIG("CNAME 5 3 3600 20100322084538 20100220084538 33495 example.com. DSqkLnsh0gCeCPVW/Q8viy9GNP+KHmFGfWqyVG1S6koBtGN/VQQ16M4PHZ9Zssmf/JcDVJNIhAChHPE2WJiaPCNGTprsaUshf1Q2vMPVnkrJKgDY8SVRYMptmT8eaT0gGri4KhqRoFpMT5OYfesybwDgfhFSQQAh6ps3bIUsy4o="));
-
- cnameint_example_cname = RRsetPtr(new RRset(Name("cname-int.example.com"),
- RRClass::IN(), RRType::CNAME(),
- RRTTL(3600)));
- cnameint_example_cname->addRdata(generic::CNAME("www.exmaple.com"));
-
- cnameint_example_rrsig = RRsetPtr(new RRset(Name("cname-int.example.com"),
- RRClass::IN(),
- RRType::RRSIG(),
- RRTTL(3600)));
- cnameint_example_rrsig->addRdata(generic::RRSIG("CNAME 5 3 3600 20100322084538 20100220084538 33495 example.com. U1wjt0XY9xjTwvUmWSUcfLGMhCjfX2ylWfHrycy50x2oxcK9z94E1ejen9wDTIEBSGYgi6wpZ8RK0+02N1DWTGpDqNXd7aFRfDrWQJ/q/XJHDx0vlcmhkWhrT82LBfKxkrptOzchuSo/c0mpK+mpiIMc1VOwY+yuQ2ALfcD6EHw="));
-
- cnameext_example_cname = RRsetPtr(new RRset(Name("cname-ext.example.com"),
- RRClass::IN(), RRType::CNAME(),
- RRTTL(3600)));
- cnameext_example_cname->addRdata(generic::CNAME("www.sql1.example.com"));
-
- cnameext_example_rrsig = RRsetPtr(new RRset(Name("cname-ext.example.com"),
- RRClass::IN(),
- RRType::RRSIG(),
- RRTTL(3600)));
- cnameext_example_rrsig->addRdata(generic::RRSIG("CNAME 5 3 3600 20100322084538 20100220084538 33495 example.com. bGPIuZilyygvTThK4BrdECuaBcnZUgW/0d09iN2CrNjckchQl3dtbnMNirFsVs9hShDSldRNlQpiAVMpnPgXHhReNum7jmX6yqIH6s8GKIo91zr3VL/ramlezie5w4MilDHrxXLK2pb8IHmP+ZHivQ2EtdYQZgETWBWxr5FDfwk="));
-
- dname = RRsetPtr(new RRset(Name("dname.example.com"),
- RRClass::IN(), RRType::DNAME(),
+ foo_cname->addRdata(generic::CNAME("cnametest.flame.org"));
+
+ rp = new RRset(foo, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+ rrsig->addRdata(generic::RRSIG("CNAME 5 3 3600 20100322084538 20100220084538 33495 example.com. DSqkLnsh0gCeCPVW/Q8viy9GNP+KHmFGfWqyVG1S6koBtGN/VQQ16M4PHZ9Zssmf/JcDVJNIhAChHPE2WJiaPCNGTprsaUshf1Q2vMPVnkrJKgDY8SVRYMptmT8eaT0gGri4KhqRoFpMT5OYfesybwDgfhFSQQAh6ps3bIUsy4o="));
+ foo_cname->addRRsig(rrsig);
+
+ foo_nsec = RRsetPtr(new RRset(foo, RRClass::IN(),
+ RRType::NSEC(), RRTTL(3600)));
+ foo_nsec->addRdata(generic::NSEC("mail.example.com. CNAME RRSIG NSEC"));
+ rp = new RRset(foo, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+
+ rrsig->addRdata(generic::RRSIG("NSEC 5 3 7200 20100322084538 20100220084538 33495 example.com. RTQwlSqui6StUYye1KCSOEr1d3irndWFqHBpwP7g7n+w8EDXJ8I7lYgwzHvlQt6BLAxe5fUDi7ct8M5hXvsm7FoWPZ5wXH+2/eJUCYxIw4vezKMkMwBP6M/YkJ2CMqY8DppYf60QaLDONQAr7AcK/naSyioeI5h6eaoVitUDMso="));
+ foo_nsec->addRRsig(rrsig);
+
+ // cname-int.example.com
+ cnameint_cname = RRsetPtr(new RRset(cnameint, RRClass::IN(),
+ RRType::CNAME(), RRTTL(3600)));
+ cnameint_cname->addRdata(generic::CNAME("www.example.com"));
+
+ rp = new RRset(cnameint, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+ rrsig->addRdata(generic::RRSIG("CNAME 5 3 3600 20100322084538 20100220084538 33495 example.com. U1wjt0XY9xjTwvUmWSUcfLGMhCjfX2ylWfHrycy50x2oxcK9z94E1ejen9wDTIEBSGYgi6wpZ8RK0+02N1DWTGpDqNXd7aFRfDrWQJ/q/XJHDx0vlcmhkWhrT82LBfKxkrptOzchuSo/c0mpK+mpiIMc1VOwY+yuQ2ALfcD6EHw="));
+ cnameint_cname->addRRsig(rrsig);
+
+ cnameint_nsec = RRsetPtr(new RRset(cnameint, RRClass::IN(),
+ RRType::NSEC(), RRTTL(3600)));
+ cnameint_nsec->addRdata(generic::NSEC("dname.example.com. CNAME RRSIG NSEC"));
+ rp = new RRset(cnameint, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+
+ rrsig->addRdata(generic::RRSIG("NSEC 5 3 7200 20100322084538 20100220084538 33495 example.com. rbV+gaxfrsoha59NOLF4EFyWQ+GuFCVK/8D77x1atan3HNlXBlZ1smgudKTaJ3CtlobIDt0MEdPxY1yn2Tskw/5mlP1PWf8oaP3BwGSQdn4gLI8+sMpNOPFEdXpxqxngm2F6/7fqniL1QuSAQBEdO+5UiCAgnncPmAsSJg3u1zg="));
+ cnameint_nsec->addRRsig(rrsig);
+
+ // cname-ext.example.com
+ cnameext_cname = RRsetPtr(new RRset(cnameext, RRClass::IN(),
+ RRType::CNAME(), RRTTL(3600)));
+ cnameext_cname->addRdata(generic::CNAME("www.sql1.example.com"));
+
+ rp = new RRset(cnameext, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+ rrsig->addRdata(generic::RRSIG("CNAME 5 3 3600 20100322084538 20100220084538 33495 example.com. bGPIuZilyygvTThK4BrdECuaBcnZUgW/0d09iN2CrNjckchQl3dtbnMNirFsVs9hShDSldRNlQpiAVMpnPgXHhReNum7jmX6yqIH6s8GKIo91zr3VL/ramlezie5w4MilDHrxXLK2pb8IHmP+ZHivQ2EtdYQZgETWBWxr5FDfwk="));
+ cnameext_cname->addRRsig(rrsig);
+
+ cnameext_nsec = RRsetPtr(new RRset(cnameext, RRClass::IN(),
+ RRType::NSEC(), RRTTL(3600)));
+ cnameext_nsec->addRdata(generic::NSEC("cname-int.example.com. CNAME RRSIG NSEC"));
+ rp = new RRset(cnameext, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+
+ rrsig->addRdata(generic::RRSIG("NSEC 5 3 7200 20100322084538 20100220084538 33495 example.com. inWsFwSDWG7TakjwbUTzTRpXz0WifelA5Kn3ABk6BVirIPmd+yQoNj2QZBDFAQwhnLPlNws2Oo4vgMsBMyx1Fv5eHgMUuCN3DUDaLlzlPtUb42CjOUa+jZBeTV/Hd7WZrirluASE1QFDprLdSSqoPPfAKvN3pORtW7y580dMOIM="));
+ cnameext_nsec->addRRsig(rrsig);
+
+ // dname.example.com
+ dname_dname = RRsetPtr(new RRset(dname, RRClass::IN(), RRType::DNAME(),
RRTTL(3600)));
- dname->addRdata(generic::DNAME("sql1.example.com"));
-
- dname_rrsig = RRsetPtr(new RRset(Name("dname.example.com"),
- RRClass::IN(), RRType::RRSIG(),
- RRTTL(3600)));
- dname_rrsig->addRdata(generic::RRSIG("DNAME 5 3 3600 20100322084538 20100220084538 33495 example.com. ae8U47oaiwWdurkSyzcsCAF6DxBqjukizwF7K7U6lQVMtfoUE14oiAqfj1fjH8YLDOO/Hd1twrd/u0vgjnI1Gg32YTi7cYOzwE912SV1u2B/y0awaQKWPBwOW0aI7vxelt1vMUF81xosiQD04gOIdDBTqbHKcDxum87iWbhk4Ug="));
+ dname_dname->addRdata(generic::DNAME("sql1.example.com."));
+
+ rp = new RRset(dname, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+ rrsig->addRdata(generic::RRSIG("DNAME 5 3 3600 20100322084538 20100220084538 33495 example.com. ae8U47oaiwWdurkSyzcsCAF6DxBqjukizwF7K7U6lQVMtfoUE14oiAqfj1fjH8YLDOO/Hd1twrd/u0vgjnI1Gg32YTi7cYOzwE912SV1u2B/y0awaQKWPBwOW0aI7vxelt1vMUF81xosiQD04gOIdDBTqbHKcDxum87iWbhk4Ug="));
+ dname_dname->addRRsig(rrsig);
+
+ dname_nsec = RRsetPtr(new RRset(dname, RRClass::IN(),
+ RRType::NSEC(), RRTTL(3600)));
+ dname_nsec->addRdata(generic::NSEC("dns01.example.com. DNAME RRSIG NSEC"));
+ rp = new RRset(dname, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+
+ rrsig->addRdata(generic::RRSIG("NSEC 5 3 7200 20100322084538 20100220084538 33495 example.com. c21Fff2D8vBrLzohBnUeflkaRdUAnUxAFGp+UQ0miACDCMOFBlCS9v9g/2+orOnKfd3l4vyz55C310t8JXgXb119ofaZWj2zkdUe+X8Bax+sMS0Y5K/sUhSNvbJbozr9UYPdvjSVBiWgh3s9fsb+etKq9uFukAzGU/FuGYpO0r0="));
+ dname_nsec->addRRsig(rrsig);
+
+ // subzone.example.com
+ subzone_ns = RRsetPtr(new RRset(subzone, RRClass::IN(), RRType::NS(),
+ RRTTL(3600)));
+ subzone_ns->addRdata(generic::NS(Name("ns1.subzone.example.com")));
+ subzone_ns->addRdata(generic::NS(Name("ns2.subzone.example.com")));
+
+ subzone_ds = RRsetPtr(new RRset(subzone, RRClass::IN(), RRType::DS(),
+ RRTTL(3600)));
+
+ subzone_glue1 = RRsetPtr(new RRset(Name("ns1.subzone.example.com"),
+ RRClass::IN(), RRType::A(),
+ RRTTL(3600)));
+ subzone_glue1->addRdata(in::A("192.168.3.1"));
+ subzone_glue2 = RRsetPtr(new RRset(Name("ns2.subzone.example.com"),
+ RRClass::IN(), RRType::A(),
+ RRTTL(3600)));
+ subzone_glue2->addRdata(in::A("192.168.3.2"));
+
+ subzone_ds = RRsetPtr(new RRset(subzone, RRClass::IN(), RRType::DS(),
+ RRTTL(3600)));
+
+ subzone_ds->addRdata(generic::DS("33313 5 1 0FDD7A2C11AA7F55D50FBF9B7EDDA2322C541A8D"));
+ subzone_ds->addRdata(generic::DS("33313 5 2 00B99B7006F496D135B01AB17EDB469B4BE9E1973884DEA757BC4E3015A8C3AB"));
+
+ rp = new RRset(subzone, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+ rrsig->addRdata(generic::RRSIG("DS 5 3 3600 20100322084538 20100220084538 33495 example.com. dIqZKvpkJN1l92SOiWgJh3KbjErIN+EfojMsm4pEdV5xQdZwj6DNNEu6Kw4rRwdvrZIu0TyqPr3jSJb7o6R7vZgZzmLfVV/ojQah7rwuYHCFcfyZ4JyK2311fMhRR1QAvMsdcjdyA1XC140Cm6AnL3cH5rh/KUks/0ec3Ca7GNQ="));
+ subzone_ds->addRRsig(rrsig);
+
+ subzone_nsec = RRsetPtr(new RRset(subzone, RRClass::IN(),
+ RRType::NSEC(), RRTTL(3600)));
+ subzone_nsec->addRdata(generic::NSEC("*.wild.example.com. NS DS RRSIG NSEC"));
+ rp = new RRset(subzone, RRClass::IN(), RRType::RRSIG(), RRTTL(3600));
+ rrsig = RRsetPtr(rp);
+
+ rrsig->addRdata(generic::RRSIG("NSEC 5 3 7200 20100322084538 20100220084538 33495 example.com. Oe2kgIhsLtPJ4+lDZDxznV8/vEVoXKOBFN9lwWyebaKa19BaSXlQ+YVejmulmKDDjEucMvEfuItfn6w7bnU+DzOLk5D1lJCjwDlKz8u3xOAx16TiuQn4bgQAOiFtBQygmGGqO3BVpX+jxsmw7eH3emofy8uUqr/C4aopnwuf28g="));
+ subzone_nsec->addRRsig(rrsig);
}
void
@@ -169,20 +369,246 @@
const Name& qname = match.qname();
NameComparisonResult::NameRelation cmp;
- cmp = qname.compare(sql1_name).getRelation();
+ cmp = qname.compare(sql1).getRelation();
if (cmp == NameComparisonResult::EQUAL ||
- cmp == NameComparisonResult::SUBDOMAIN) {
- match.update(*this, sql1_name);
+ cmp == NameComparisonResult::SUBDOMAIN) {
+ match.update(*this, sql1);
return;
}
- cmp = qname.compare(example_name).getRelation();
+ cmp = qname.compare(example).getRelation();
if (cmp == NameComparisonResult::EQUAL ||
- cmp == NameComparisonResult::SUBDOMAIN) {
- match.update(*this, example_name);
+ cmp == NameComparisonResult::SUBDOMAIN) {
+ match.update(*this, example);
return;
}
+}
+
+void
+TestDataSrc::findRecords(const Name& name, const RRType& rdtype,
+ RRsetList& target, Name* zone, const Mode mode,
+ uint32_t& flags) const
+{
+ bool any = (rdtype == RRType::ANY());
+ flags = 0;
+
+
+ if (*zone == sql1) {
+ if (name == sql1 && mode == DELEGATION) {
+ target.addRRset(sql1_ns);
+ flags |= REFERRAL;
+ } else if (name == sql1) {
+ if (any) {
+ target.addRRset(sql1_ns);
+ target.addRRset(sql1_nsec);
+ flags |= REFERRAL;
+ } else if (rdtype == RRType::NS()) {
+ target.addRRset(sql1_ns);
+ flags |= REFERRAL;
+ } else if (rdtype == RRType::SOA()) {
+ target.addRRset(sql1_soa);
+ flags |= REFERRAL;
+ } else if (rdtype == RRType::NSEC()) {
+ target.addRRset(sql1_nsec);
+ flags |= REFERRAL;
+ } else {
+ flags |= TYPE_NOT_FOUND;
+ }
+ } else if (name == www_sql1) {
+ if (any) {
+ target.addRRset(www_sql1_a);
+ target.addRRset(www_sql1_nsec);
+ } else if (rdtype == RRType::A()) {
+ target.addRRset(www_sql1_a);
+ } else if (rdtype == RRType::NSEC()) {
+ target.addRRset(www_sql1_nsec);
+ flags |= REFERRAL;
+ } else {
+ flags |= TYPE_NOT_FOUND;
+ }
+ } else {
+ flags |= NAME_NOT_FOUND;
+ }
+ } else {
+ if (name == example && mode == DELEGATION) {
+ target.addRRset(example_ns);
+ flags |= REFERRAL;
+ } else if (name == example) {
+ if (any) {
+ target.addRRset(example_ns);
+ target.addRRset(example_soa);
+ target.addRRset(example_nsec);
+ flags |= REFERRAL;
+ } else if (rdtype == RRType::NS()) {
+ target.addRRset(example_ns);
+ flags |= REFERRAL;
+ } else if (rdtype == RRType::SOA()) {
+ target.addRRset(example_soa);
+ flags |= REFERRAL;
+ } else if (rdtype == RRType::NSEC()) {
+ target.addRRset(example_nsec);
+ flags |= REFERRAL;
+ } else {
+ flags |= TYPE_NOT_FOUND;
+ }
+ } else if (name == sql1 && mode == DELEGATION) {
+ target.addRRset(sql1_ns);
+ target.addRRset(sql1_ds);
+ target.addRRset(sql1_ds_nsec);
+ flags |= REFERRAL;
+ } else if (name == sql1) {
+ if (any) {
+ target.addRRset(sql1_ns);
+ target.addRRset(sql1_ds);
+ target.addRRset(sql1_ds_nsec);
+ flags |= REFERRAL;
+ } else if (rdtype == RRType::DS()) {
+ target.addRRset(sql1_ds);
+ flags |= REFERRAL;
+ } else if (rdtype == RRType::NS()) {
+ target.addRRset(sql1_ns);
+ flags |= REFERRAL;
+ } else if (rdtype == RRType::NSEC()) {
+ target.addRRset(sql1_ds_nsec);
+ flags |= REFERRAL;
+ } else {
+ flags |= TYPE_NOT_FOUND;
+ }
+ } else if (name == subzone && mode == DELEGATION) {
+ target.addRRset(subzone_ns);
+ target.addRRset(subzone_ds);
+ flags |= REFERRAL;
+ } else if (name == subzone) {
+ if (any) {
+ target.addRRset(subzone_ns);
+ target.addRRset(subzone_nsec);
+ flags |= REFERRAL;
+ } else if (rdtype == RRType::NS()) {
+ target.addRRset(subzone_ns);
+ flags |= REFERRAL;
+ } else if (rdtype == RRType::DS()) {
+ target.addRRset(subzone_ds);
+ flags |= REFERRAL;
+ } else if (rdtype == RRType::NSEC()) {
+ target.addRRset(subzone_nsec);
+ flags |= REFERRAL;
+ } else {
+ flags |= TYPE_NOT_FOUND;
+ }
+ } else if (name == dns01 && mode == ADDRESS) {
+ target.addRRset(dns01_a);
+ } else if (name == dns01) {
+ if (any) {
+ target.addRRset(dns01_a);
+ target.addRRset(dns01_nsec);
+ } else if (rdtype == RRType::A()) {
+ target.addRRset(dns01_a);
+ } else if (rdtype == RRType::NSEC()) {
+ target.addRRset(dns01_nsec);
+ } else {
+ flags |= TYPE_NOT_FOUND;
+ }
+ } else if (name == dns02 && mode == ADDRESS) {
+ target.addRRset(dns02_a);
+ } else if (name == dns02) {
+ if (any) {
+ target.addRRset(dns02_a);
+ target.addRRset(dns02_nsec);
+ } else if (rdtype == RRType::A()) {
+ target.addRRset(dns02_a);
+ } else if (rdtype == RRType::NSEC()) {
+ target.addRRset(dns02_nsec);
+ } else {
+ flags |= TYPE_NOT_FOUND;
+ }
+ } else if (name == dns03 && mode == ADDRESS) {
+ target.addRRset(dns03_a);
+ } else if (name == dns03) {
+ if (any) {
+ target.addRRset(dns03_a);
+ target.addRRset(dns03_nsec);
+ } else if (rdtype == RRType::A()) {
+ target.addRRset(dns03_a);
+ } else if (rdtype == RRType::NSEC()) {
+ target.addRRset(dns03_nsec);
+ } else {
+ flags |= TYPE_NOT_FOUND;
+ }
+ } else if (name == wild) {
+ if (any) {
+ target.addRRset(wild_a);
+ target.addRRset(wild_nsec);
+ } else if (rdtype == RRType::A()) {
+ target.addRRset(wild_a);
+ } else if (rdtype == RRType::NSEC()) {
+ target.addRRset(wild_nsec);
+ flags |= REFERRAL;
+ } else {
+ flags |= TYPE_NOT_FOUND;
+ }
+ } else if (name == www) {
+ if (any) {
+ target.addRRset(www_a);
+ target.addRRset(www_nsec);
+ } else if (rdtype == RRType::A()) {
+ target.addRRset(www_a);
+ } else if (rdtype == RRType::NSEC()) {
+ target.addRRset(www_nsec);
+ flags |= REFERRAL;
+ } else {
+ flags |= TYPE_NOT_FOUND;
+ }
+ } else if (name == foo) {
+ if (rdtype == RRType::NSEC()) {
+ target.addRRset(foo_nsec);
+ } else {
+ target.addRRset(foo_cname);
+ if (rdtype != RRType::CNAME()) {
+ flags |= CNAME_FOUND;
+ }
+ }
+ } else if (name == cnameint) {
+ if (rdtype == RRType::NSEC()) {
+ target.addRRset(cnameint_nsec);
+ } else {
+ target.addRRset(cnameint_cname);
+ if (rdtype != RRType::CNAME()) {
+ flags |= CNAME_FOUND;
+ }
+ }
+ } else if (name == cnameext) {
+ if (rdtype == RRType::NSEC()) {
+ target.addRRset(cnameext_nsec);
+ } else {
+ target.addRRset(cnameext_cname);
+ if (rdtype != RRType::CNAME()) {
+ flags |= CNAME_FOUND;
+ }
+ }
+ } else if (name == dname) {
+ if (any) {
+ target.addRRset(dname_dname);
+ target.addRRset(dname_nsec);
+ flags |= REFERRAL;
+ } else if (rdtype == RRType::DNAME()) {
+ target.addRRset(dname_dname);
+ flags |= REFERRAL;
+ } else if (rdtype == RRType::NSEC()) {
+ target.addRRset(dns01_nsec);
+ flags |= REFERRAL;
+ } else {
+ flags |= TYPE_NOT_FOUND;
+ }
+ } else if (name == Name("ns1.subzone.example.com") && mode == ADDRESS) {
+ target.addRRset(subzone_glue1);
+ } else if (name == Name("ns2.subzone.example.com") && mode == ADDRESS) {
+ target.addRRset(subzone_glue2);
+ } else {
+ flags |= NAME_NOT_FOUND;
+ }
+ }
+ return;
}
DataSrc::Result
@@ -194,9 +620,97 @@
uint32_t& flags,
Name* zone) const
{
- flags = NAME_NOT_FOUND;
+ findRecords(qname, qtype, target, zone, NORMAL, flags);
return (SUCCESS);
}
-}
-}
+DataSrc::Result
+TestDataSrc::findExactRRset(const Query& q,
+ const Name& qname,
+ const RRClass& qclass,
+ const RRType& qtype,
+ RRsetList& target,
+ uint32_t& flags,
+ Name* zone) const
+{
+ findRecords(qname, qtype, target, zone, NORMAL, flags);
+ // Ignore referrals in this case
+ flags &= ~REFERRAL;
+
+ // CNAMEs don't count in this case
+ if (flags & CNAME_FOUND) {
+ flags &= ~CNAME_FOUND;
+ flags |= TYPE_NOT_FOUND;
+ }
+
+ return (SUCCESS);
+}
+
+DataSrc::Result
+TestDataSrc::findAddrs(const Query& q,
+ const Name& qname,
+ const RRClass& qclass,
+ RRsetList& target,
+ uint32_t& flags,
+ Name* zone) const
+{
+ findRecords(qname, RRType::ANY(), target, zone, ADDRESS, flags);
+ return (SUCCESS);
+}
+
+DataSrc::Result
+TestDataSrc::findReferral(const Query& q,
+ const Name& qname,
+ const RRClass& qclass,
+ RRsetList& target,
+ uint32_t& flags,
+ Name* zone) const
+{
+ findRecords(qname, RRType::ANY(), target, zone, DELEGATION, flags);
+ return (SUCCESS);
+}
+
+DataSrc::Result
+TestDataSrc::findPreviousName(const Query& q,
+ const Name& qname,
+ Name& target,
+ Name* zone) const
+{
+ if (*zone == example) {
+ if (qname >= example || qname < cnameext) {
+ target = example;
+ } else if (qname < cnameint) {
+ target = cnameext;
+ } else if (qname < dname) {
+ target = cnameint;
+ } else if (qname < dns01) {
+ target = dname;
+ } else if (qname < dns02) {
+ target = dns01;
+ } else if (qname < dns03) {
+ target = dns02;
+ } else if (qname < foo) {
+ target = dns03;
+ } else if (qname < sql1) {
+ target = foo;
+ } else if (qname < subzone) {
+ target = sql1;
+ } else if (qname < www) {
+ target = subzone;
+ } else if (qname < wild) {
+ target = www;
+ } else {
+ target = wild;
+ }
+ } else {
+ if (qname >= sql1 || qname < www_sql1) {
+ target = sql1;
+ } else {
+ target = www_sql1;
+ }
+ }
+ return (SUCCESS);
+}
+
+}
+}
Modified: branches/each-ds/src/lib/auth/cpp/unittest_ds.h
==============================================================================
--- branches/each-ds/src/lib/auth/cpp/unittest_ds.h (original)
+++ branches/each-ds/src/lib/auth/cpp/unittest_ds.h Fri Feb 26 01:35:35 2010
@@ -48,48 +48,87 @@
const RRType& qtype,
RRsetList& target,
uint32_t& flags,
- Name* zone = NULL) const
- {
- return (findRRset(q, qname, qclass, qtype, target, flags, zone));
- }
+ Name* zone = NULL) const;
+
+ Result findAddrs(const Query& q,
+ const Name& qname,
+ const RRClass& qclass,
+ RRsetList& target,
+ uint32_t& flags,
+ Name* zone = NULL) const;
+
+ Result findReferral(const Query& q,
+ const Name& qname,
+ const RRClass& qclass,
+ RRsetList& target,
+ uint32_t& flags,
+ Name* zone = NULL) const;
Result findPreviousName(const Query& q,
const Name& qname,
Name& target,
- Name* zone) const {
- return (NOT_IMPLEMENTED);
- }
+ Name* zone) const;
Result init() { return (SUCCESS); }
Result close() { return (SUCCESS); }
private:
- const Name example_name;
- const Name sql1_name;
+ enum Mode {
+ NORMAL,
+ ADDRESS,
+ DELEGATION
+ };
+
+ void findRecords(const Name& name, const RRType& rdtype,
+ RRsetList& target, Name* zone, const Mode mode,
+ uint32_t& flags) const;
+
+ const Name example;
+ const Name sql1;
+ const Name www_sql1;
+ const Name www;
+ const Name foo;
+ const Name dns01;
+ const Name dns02;
+ const Name dns03;
+ const Name cnameint;
+ const Name cnameext;
+ const Name dname;
+ const Name wild;
+ const Name subzone;
RRsetPtr example_ns;
- RRsetPtr example_rrsig;
- RRsetPtr www_example_a;
- RRsetPtr www_example_rrsig;
- RRsetPtr foo_example_cname;
- RRsetPtr foo_example_rrsig;
- RRsetPtr cnameint_example_cname;
- RRsetPtr cnameint_example_rrsig;
- RRsetPtr cnameext_example_cname;
- RRsetPtr cnameext_example_rrsig;
- RRsetPtr dns01_example_a;
- RRsetPtr dns01_example_rrsig;
- RRsetPtr dns02_example_a;
- RRsetPtr dns02_example_rrsig;
- RRsetPtr dns03_example_a;
- RRsetPtr dns03_example_rrsig;
- RRsetPtr wild_example_a;
- RRsetPtr wild_example_rrsig;
- RRsetPtr dname;
- RRsetPtr dname_rrsig;
+ RRsetPtr example_soa;
+ RRsetPtr example_nsec;
+ RRsetPtr www_a;
+ RRsetPtr www_nsec;
+ RRsetPtr foo_cname;
+ RRsetPtr foo_nsec;
+ RRsetPtr cnameint_cname;
+ RRsetPtr cnameint_nsec;
+ RRsetPtr cnameext_cname;
+ RRsetPtr cnameext_nsec;
+ RRsetPtr dns01_a;
+ RRsetPtr dns01_nsec;
+ RRsetPtr dns02_a;
+ RRsetPtr dns02_nsec;
+ RRsetPtr dns03_a;
+ RRsetPtr dns03_nsec;
+ RRsetPtr wild_a;
+ RRsetPtr wild_nsec;
+ RRsetPtr dname_dname;
+ RRsetPtr dname_nsec;
RRsetPtr sql1_ns;
- RRsetPtr sql1_rrsig;
+ RRsetPtr sql1_soa;
+ RRsetPtr sql1_nsec;
+ RRsetPtr sql1_ds;
+ RRsetPtr sql1_ds_nsec;
RRsetPtr www_sql1_a;
- RRsetPtr www_sql1_rrsig;
+ RRsetPtr www_sql1_nsec;
+ RRsetPtr subzone_ns;
+ RRsetPtr subzone_nsec;
+ RRsetPtr subzone_glue1;
+ RRsetPtr subzone_glue2;
+ RRsetPtr subzone_ds;
};
}
More information about the bind10-changes
mailing list