[svn] commit: r1980 - in /branches/trac192/src/lib/datasrc: TODO cache.cc tests/cache_unittest.cc
BIND 10 source code commits
bind10-changes at lists.isc.org
Sat May 29 07:12:56 UTC 2010
Author: each
Date: Sat May 29 07:12:56 2010
New Revision: 1980
Log:
checkpoint: added cache tests
Modified:
branches/trac192/src/lib/datasrc/TODO
branches/trac192/src/lib/datasrc/cache.cc
branches/trac192/src/lib/datasrc/tests/cache_unittest.cc
Modified: branches/trac192/src/lib/datasrc/TODO
==============================================================================
--- branches/trac192/src/lib/datasrc/TODO (original)
+++ branches/trac192/src/lib/datasrc/TODO Sat May 29 07:12:56 2010
@@ -1,28 +1,12 @@
- store rdata in the database as binary blobs instead of text
-
hot cache:
-- in doQueryTask() (or helper routines), for each task
- consult the cache first before calling low-level find()
- routines.
-
- SIMPLE_QUERY: check for qname/qclass/qtype
- AUTH_QUERY: check for qname/qclass/{qtype|CNAME}
- GLUE_QUERY: check for qname/qclass/{A|AAAA}
- REF_QUERY: check for qname/qclass/{NS|DS|DNAME}
-
- if any of the checked types returns a cache miss, discard all
- of them from the cache and perform a database query, caching the
- results.
-
- add a fast lookup method (using a hash table or a std::map)
to HotCache so retrieval isn't linear.
+- restore query_unittest.cc, which is currently disabled because of
+ the change in QueryTask construction.
-TESTS:
- - ncache (also need to expand so that ncache returns appropriate status,
- i.e., name not found or type not found)
- - DS query
- - make sure cache insert overwrites existing records
+- add a test for DS queries correctly going to the parent class.
- examine rdclass==ANY queries. do these make sense to support in any way?
Modified: branches/trac192/src/lib/datasrc/cache.cc
==============================================================================
--- branches/trac192/src/lib/datasrc/cache.cc (original)
+++ branches/trac192/src/lib/datasrc/cache.cc Sat May 29 07:12:56 2010
@@ -126,7 +126,13 @@
void
HotCache::cache(RRsetPtr rrset, const uint32_t flags, const time_t interval) {
- CacheNodePtr node(new CacheNode(rrset, flags, interval));
+ CacheNodePtr node = retrieve(rrset->getName(), rrset->getClass(),
+ rrset->getType());
+ if (node) {
+ remove(node);
+ }
+
+ node = CacheNodePtr(new CacheNode(rrset, flags, interval));
insert(node);
}
@@ -139,7 +145,12 @@
return;
}
- CacheNodePtr node(new CacheNode(name, rrclass, rrtype, flags, interval));
+ CacheNodePtr node = retrieve(name, rrclass, rrtype);
+ if (node) {
+ remove(node);
+ }
+
+ node = CacheNodePtr(new CacheNode(name, rrclass, rrtype, flags, interval));
insert(node);
}
Modified: branches/trac192/src/lib/datasrc/tests/cache_unittest.cc
==============================================================================
--- branches/trac192/src/lib/datasrc/tests/cache_unittest.cc (original)
+++ branches/trac192/src/lib/datasrc/tests/cache_unittest.cc Sat May 29 07:12:56 2010
@@ -57,9 +57,9 @@
cache.setSlots(5);
- cache.cache(a, 0, 30);
- cache.cache(b, 0, 30);
- cache.cache(c, 0, 30);
+ cache.cache(a, 1, 30);
+ cache.cache(b, 2, 30);
+ cache.cache(c, 4, 30);
}
Name test_name;
@@ -131,6 +131,24 @@
EXPECT_EQ(RRClass::IN(), r->getClass());
EXPECT_EQ(RRType::A(), r->getType());
};
+
+TEST_F(CacheTest, flags) {
+ CacheNodePtr c;
+ c = cache.retrieve(test_name, RRClass::IN(), RRType::A());
+ EXPECT_TRUE(c);
+ EXPECT_TRUE(c->getRRset());
+ EXPECT_EQ(1, c->getFlags());
+
+ c = cache.retrieve(test_nsname, RRClass::IN(), RRType::NS());
+ EXPECT_TRUE(c);
+ EXPECT_TRUE(c->getRRset());
+ EXPECT_EQ(2, c->getFlags());
+
+ c = cache.retrieve(test_ch, RRClass::CH(), RRType::TXT());
+ EXPECT_TRUE(c);
+ EXPECT_TRUE(c->getRRset());
+ EXPECT_EQ(4, c->getFlags());
+}
TEST_F(CacheTest, retrieveFail)
{
@@ -203,4 +221,36 @@
EXPECT_FALSE(c);
}
-}
+TEST_F(CacheTest, ncache)
+{
+ Name missing("missing.example.com");
+ cache.ncache(missing, RRClass::IN(), RRType::DNSKEY(), 8, 30);
+ CacheNodePtr c = cache.retrieve(missing, RRClass::IN(), RRType::DNSKEY());
+ EXPECT_TRUE(c);
+ EXPECT_FALSE(c->getRRset());
+ EXPECT_EQ(8, c->getFlags());
+}
+
+TEST_F(CacheTest, overwrite)
+{
+ EXPECT_EQ(3, cache.getCount());
+
+ RRsetPtr a(new RRset(test_name, RRClass::IN(), RRType::A(), RRTTL(300)));
+ a->addRdata(in::A("192.0.100.100"));
+
+ EXPECT_NO_THROW(cache.cache(a, 16, 30));
+ EXPECT_EQ(3, cache.getCount());
+ CacheNodePtr c = cache.retrieve(test_name, RRClass::IN(), RRType::A());
+ EXPECT_TRUE(c);
+ EXPECT_TRUE(c->getRRset());
+ EXPECT_EQ(16, c->getFlags());
+
+ EXPECT_NO_THROW(cache.ncache(test_name, RRClass::IN(), RRType::A(), 1, 30));
+ EXPECT_EQ(3, cache.getCount());
+ c = cache.retrieve(test_name, RRClass::IN(), RRType::A());
+ EXPECT_TRUE(c);
+ EXPECT_FALSE(c->getRRset());
+ EXPECT_EQ(1, c->getFlags());
+}
+
+}
More information about the bind10-changes
mailing list