[svn] commit: r3478 - in /branches/trac408/src/lib/nsas: Makefile.am tests/zone_entry_unittest.cc zone_entry.cc zone_entry.h

BIND 10 source code commits bind10-changes at lists.isc.org
Sat Nov 6 22:14:57 UTC 2010


Author: vorner
Date: Sat Nov  6 22:14:57 2010
New Revision: 3478

Log:
Zone entries have callback queue

Added:
    branches/trac408/src/lib/nsas/zone_entry.cc
      - copied, changed from r3477, branches/trac408/src/lib/nsas/tests/zone_entry_unittest.cc
Modified:
    branches/trac408/src/lib/nsas/Makefile.am
    branches/trac408/src/lib/nsas/tests/zone_entry_unittest.cc
    branches/trac408/src/lib/nsas/zone_entry.h

Modified: branches/trac408/src/lib/nsas/Makefile.am
==============================================================================
--- branches/trac408/src/lib/nsas/Makefile.am (original)
+++ branches/trac408/src/lib/nsas/Makefile.am Sat Nov  6 22:14:57 2010
@@ -19,6 +19,6 @@
 libnsas_la_SOURCES += nameserver_entry.cc nameserver_entry.h
 libnsas_la_SOURCES += nsas_entry_compare.h
 libnsas_la_SOURCES += nsas_entry.h
-libnsas_la_SOURCES += zone_entry.h
+libnsas_la_SOURCES += zone_entry.cc zone_entry.h
 
 CLEANFILES = *.gcno *.gcda

Modified: branches/trac408/src/lib/nsas/tests/zone_entry_unittest.cc
==============================================================================
--- branches/trac408/src/lib/nsas/tests/zone_entry_unittest.cc (original)
+++ branches/trac408/src/lib/nsas/tests/zone_entry_unittest.cc Sat Nov  6 22:14:57 2010
@@ -15,16 +15,19 @@
 // $Id$
 
 #include <gtest/gtest.h>
+#include <boost/shared_ptr.hpp>
 
 #include "rrclass.h"
 
 #include "asiolink.h"
 #include "zone_entry.h"
+#include "../address_request_callback.h"
 
 #include "nsas_test.h"
 
 using namespace asiolink;
 using namespace std;
+using namespace boost;
 using namespace isc::dns;
 
 namespace isc {
@@ -48,5 +51,31 @@
     EXPECT_EQ(RRClass::IN().getCode(), alpha.getClass());
 }
 
+namespace {
+// Just something that can be created and passed
+class Callback : public AddressRequestCallback {
+    public:
+        void success(const asiolink::IOAddress&) { };
+        void unreachable() { };
+};
+}
+
+TEST_F(ZoneEntryTest, Callbacks) {
+    const size_t count(3);
+    shared_ptr<AddressRequestCallback> callbacks[count];
+
+    ZoneEntry zone(EXAMPLE_CO_UK, RRClass::IN().getCode());
+    EXPECT_FALSE(zone.hasCallbacks());
+    for (size_t i(0); i < count; ++ i) {
+        zone.addCallback(callbacks[i] = shared_ptr<AddressRequestCallback>(
+            new Callback));
+    }
+    for (size_t i(0); i < count; ++ i) {
+        ASSERT_TRUE(zone.hasCallbacks());
+        EXPECT_EQ(callbacks[i], zone.popCallback());
+    }
+    EXPECT_FALSE(zone.hasCallbacks());
+}
+
 }   // namespace nsas
 }   // namespace isc

Modified: branches/trac408/src/lib/nsas/zone_entry.h
==============================================================================
--- branches/trac408/src/lib/nsas/zone_entry.h (original)
+++ branches/trac408/src/lib/nsas/zone_entry.h Sat Nov  6 22:14:57 2010
@@ -19,6 +19,7 @@
 
 #include <string>
 #include <vector>
+#include <list>
 #include <boost/thread.hpp>
 #include <boost/shared_ptr.hpp>
 
@@ -32,6 +33,7 @@
 namespace nsas {
 
 class NameserverEntry;
+class AddressRequestCallback;
 
 /// \brief Zone Entry
 ///
@@ -80,17 +82,20 @@
         return HashKey(name_, classCode_);
     }
 
-    /// \brief Lookup Address
-    ///
-    /// Returns the address with the lowest RTT.
-    //virtual asiolink::IOAddress getAddress() const;
+    /// \short Add another callback here
+    void addCallback(boost::shared_ptr<AddressRequestCallback> callback);
+    /// \short Is there at last one callback waiting?
+    bool hasCallbacks() const;
+    /// \short Remove a callback from queue and return it
+    boost::shared_ptr<AddressRequestCallback> popCallback();
 
 private:
-    boost::mutex    mutex_;     ///< Mutex protecting this zone entry
+    mutable boost::mutex    mutex_;     ///< Mutex protecting this zone entry
     std::string     name_;      ///< Canonical zone name
     uint16_t        classCode_; ///< Class code
     std::vector<boost::shared_ptr<NameserverEntry> > nameservers_; ///< Nameservers
     time_t          expiry_;    ///< Expiry time of this entry
+    std::list<boost::shared_ptr<AddressRequestCallback> > callbacks_;
 };
 
 } // namespace nsas




More information about the bind10-changes mailing list