]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[2205] make AUTH_DATASRC_CLIENTS_BUILDER_COMMAND more readable using text.
authorJINMEI Tatuya <jinmei@isc.org>
Wed, 17 Oct 2012 00:30:18 +0000 (17:30 -0700)
committerJINMEI Tatuya <jinmei@isc.org>
Wed, 17 Oct 2012 00:30:18 +0000 (17:30 -0700)
also explicitly reject invalid command ID, which should be internal bug.

src/bin/auth/auth_messages.mes
src/bin/auth/datasrc_clients_mgr.h
src/bin/auth/tests/datasrc_clients_builder_unittest.cc

index 872bc3c74d29e384041d55f3007f0f7011a1b814..f5253e6959327f219b5e897f98c0006c12815b7a 100644 (file)
@@ -275,7 +275,7 @@ A separate thread for maintaining data source clients has been started.
 % AUTH_DATASRC_CLIENTS_BUILDER_STOPPED data source builder thread stopped
 The separate thread for maintaining data source clients has been stopped.
 
-% AUTH_DATASRC_CLIENTS_BUILDER_COMMAND data source builder received command, ID: %1
+% AUTH_DATASRC_CLIENTS_BUILDER_COMMAND data source builder received command: %1
 A debug message, showing when the separate thread for maintaining data
 source clients receives a command from the manager.
 
index 9f4e4771bc7f73af1ef395b0e8be38b430a3340c..c3bf1d2440ea271a1f39191598be053758ed0917 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <auth/auth_log.h>
 
+#include <boost/array.hpp>
 #include <boost/bind.hpp>
 
 #include <list>
@@ -42,7 +43,8 @@ namespace datasrc_clientmgr_internal {
 /// \brief ID of commands from the DataSrcClientsMgr to DataSrcClientsBuilder.
 enum CommandID {
     NOOP,         ///< Do nothing.  Only useful for tests; no argument
-    SHUTDOWN      ///< Shutdown the builder; no argument
+    SHUTDOWN,     ///< Shutdown the builder; no argument
+    NUM_COMMANDS
 };
 
 /// \brief The data type passed from DataSrcClientsMgr to
@@ -262,14 +264,25 @@ bool
 DataSrcClientsBuilderBase<MutexType, CondVarType>::handleCommand(
     const Command& command)
 {
-    LOG_DEBUG(auth_logger, DBGLVL_TRACE_BASIC,
-              AUTH_DATASRC_CLIENTS_BUILDER_COMMAND).arg(command.first);
+    const CommandID cid = command.first;
+    if (cid >= NUM_COMMANDS) {
+        // This shouldn't happen except for a bug within this file.
+        isc_throw(Unexpected, "internal bug: invalid command, ID: " << cid);
+    }
 
+    const boost::array<const char*, NUM_COMMANDS> command_desc = {
+        {"NOOP", "SHUTDOWN"}
+    };
+    LOG_DEBUG(auth_logger, DBGLVL_TRACE_BASIC,
+              AUTH_DATASRC_CLIENTS_BUILDER_COMMAND).arg(command_desc.at(cid));
     switch (command.first) {
     case SHUTDOWN:
         return (false);
     case NOOP:
         doNoop();
+        break;
+    case NUM_COMMANDS:
+        assert(false);          // we rejected this case above
     }
     return (true);
 }
index 01a4cb74369c072c51dc077448f96e3d68c2eb58..4978d6efe288392e458294268970a60bd7b75210 100644 (file)
@@ -96,4 +96,11 @@ TEST_F(DataSrcClientsBuilderTest, shutdown) {
     EXPECT_FALSE(builder.handleCommand(shutdown_cmd));
 }
 
+TEST_F(DataSrcClientsBuilderTest, badCommand) {
+    // out-of-range command ID
+    EXPECT_THROW(builder.handleCommand(Command(NUM_COMMANDS,
+                                               ConstElementPtr())),
+                 isc::Unexpected);
+}
+
 } // unnamed namespace