]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[2203] refactoring 1st step: move session obj outside of datasrc configurator.
authorJINMEI Tatuya <jinmei@isc.org>
Wed, 3 Oct 2012 03:24:57 +0000 (20:24 -0700)
committerJINMEI Tatuya <jinmei@isc.org>
Wed, 3 Oct 2012 03:24:57 +0000 (20:24 -0700)
src/bin/auth/datasrc_configurator.h
src/bin/auth/main.cc
src/bin/auth/tests/datasrc_configurator_unittest.cc

index 6b2f5826b00b4aaa3e523a97844a90903732c8bc..badf62c87c0b44530500320f136038f98de37246 100644 (file)
@@ -54,7 +54,6 @@ private:
         }
     }
     static Server* server_;
-    static isc::config::ModuleCCSession* session_;
     typedef boost::shared_ptr<List> ListPtr;
 public:
     /// \brief Initializes the class.
@@ -74,12 +73,7 @@ public:
     /// \throw isc::InvalidParameter if any of the parameters is NULL
     /// \throw isc::config::ModuleCCError if the remote configuration is not
     ///     available for some reason.
-    static void init(isc::config::ModuleCCSession* session,
-                     Server* server)
-    {
-        if (session == NULL) {
-            isc_throw(isc::InvalidParameter, "The session must not be NULL");
-        }
+    static void init(Server* server) {
         if (server == NULL) {
             isc_throw(isc::InvalidParameter, "The server must not be NULL");
         }
@@ -88,9 +82,8 @@ public:
                       "The configurator is already initialized");
         }
         server_ = server;
-        session_ = session;
-        session->addRemoteConfig("data_sources", reconfigureInternal, false);
     }
+
     /// \brief Deinitializes the class.
     ///
     /// This detaches from the session and removes the server from internal
@@ -99,12 +92,9 @@ public:
     /// This can be called even if it is not initialized currently. You
     /// can initialize it again after this.
     static void cleanup() {
-        if (session_ != NULL) {
-            session_->removeRemoteConfig("data_sources");
-        }
-        session_ = NULL;
         server_ = NULL;
     }
+
     /// \brief Reads new configuration and replaces the old one.
     ///
     /// It instructs the server to replace the lists with new ones as needed.
@@ -210,10 +200,6 @@ public:
     }
 };
 
-template<class Server, class List>
-isc::config::ModuleCCSession*
-DataSourceConfiguratorGeneric<Server, List>::session_(NULL);
-
 template<class Server, class List>
 Server* DataSourceConfiguratorGeneric<Server, List>::server_(NULL);
 
@@ -224,3 +210,7 @@ typedef DataSourceConfiguratorGeneric<AuthSrv,
     DataSourceConfigurator;
 
 #endif
+
+// Local Variables:
+// mode: c++
+// End:
index 3cca3c0f36a5336fc76cc30058c37b6f3392ba4b..629f94a7afc492fa5e1ae556ca85585bfc0edde6 100644 (file)
@@ -83,6 +83,16 @@ my_command_handler(const string& command, ConstElementPtr args) {
     return (execAuthServerCommand(*auth_server, command, args));
 }
 
+void
+datasrcConfigHandler(const std::string&,
+                     isc::data::ConstElementPtr config,
+                     const isc::config::ConfigData&)
+{
+    if (config->contains("classes")) {
+        DataSourceConfigurator::reconfigure(config->get("classes"));
+    }
+}
+
 void
 usage() {
     cerr << "Usage:  b10-auth [-v]"
@@ -192,7 +202,9 @@ main(int argc, char* argv[]) {
         auth_server->setTSIGKeyRing(&isc::server_common::keyring);
 
         // Start the data source configuration
-        DataSourceConfigurator::init(config_session, auth_server);
+        DataSourceConfigurator::init(auth_server);
+        config_session->addRemoteConfig("data_sources", datasrcConfigHandler,
+                                        false);
         // HACK: The default is not passed to the handler. This one will
         // get the default (or, current value). Further updates will work
         // the usual way.
@@ -221,7 +233,8 @@ main(int argc, char* argv[]) {
         xfrin_session->disconnect();
     }
 
-    DataSourceConfigurator::cleanup();
+    //DataSourceConfigurator::cleanup();
+    config_session->removeRemoteConfig("data_sources");
     delete xfrin_session;
     delete config_session;
     delete cc_session;
index 254b2380c7c8e29856f0331ef7ab7bae57576cdc..8759a937fb54d6b5d816b827de667b67307b26eb 100644 (file)
@@ -62,6 +62,16 @@ typedef shared_ptr<FakeList> ListPtr;
 typedef DataSourceConfiguratorGeneric<DatasrcConfiguratorTest,
         FakeList> Configurator;
 
+void
+datasrcConfigHandler(const std::string&,
+                     isc::data::ConstElementPtr config,
+                     const isc::config::ConfigData&)
+{
+    if (config->contains("classes")) {
+        Configurator::reconfigure(config->get("classes"));
+    }
+}
+
 class DatasrcConfiguratorTest : public ::testing::Test {
 public:
     // These pretend to be the server
@@ -100,6 +110,7 @@ protected:
     }
     void TearDown() {
         // Make sure no matter what we did, it is cleaned up.
+        mccs->removeRemoteConfig("data_sources");
         Configurator::cleanup();
     }
     void init(const ElementPtr& config = ElementPtr()) {
@@ -114,7 +125,8 @@ protected:
             session.getMessages()->
                 add(createAnswer(0, ElementPtr(new MapElement)));
         }
-        Configurator::init(mccs.get(), this);
+        Configurator::init(this);
+        mccs->addRemoteConfig("data_sources", datasrcConfigHandler, false);
     }
     void SetUp() {
         init();
@@ -126,10 +138,10 @@ protected:
         return (external);
     }
     void initializeINList() {
-        const ElementPtr
+        const ConstElementPtr
             config(buildConfig("{\"IN\": [{\"type\": \"xxx\"}]}"));
-        session.addMessage(createCommand("config_update", config), "data_sources",
-                           "*");
+        session.addMessage(createCommand("config_update", config),
+                           "data_sources", "*");
         mccs->checkCommand();
         // Check it called the correct things (check that there's no IN yet and
         // set a new one.
@@ -150,15 +162,14 @@ TEST_F(DatasrcConfiguratorTest, initialization) {
     EXPECT_THROW(init(), InvalidOperation);
     EXPECT_TRUE(session.haveSubscription("data_sources", "*"));
     // Deinitialize to make the tests reasonable
+    mccs->removeRemoteConfig("data_sources");
     Configurator::cleanup();
     EXPECT_FALSE(session.haveSubscription("data_sources", "*"));
     // We can't reconfigure now (not even manually)
     EXPECT_THROW(Configurator::reconfigure(ElementPtr(new MapElement())),
                  InvalidOperation);
-    // If one of them is NULL, it does not work
-    EXPECT_THROW(Configurator::init(NULL, this), InvalidParameter);
-    EXPECT_FALSE(session.haveSubscription("data_sources", "*"));
-    EXPECT_THROW(Configurator::init(mccs.get(), NULL), InvalidParameter);
+    // If the server param is NULL, it does not work
+    EXPECT_THROW(Configurator::init(NULL), InvalidParameter);
     EXPECT_FALSE(session.haveSubscription("data_sources", "*"));
     // But we can initialize it again now
     EXPECT_NO_THROW(init());