[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