summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/bin/d2/tests/d2_controller_unittests.cc8
-rw-r--r--src/lib/process/d_controller.cc15
-rw-r--r--src/lib/process/d_controller.h23
-rw-r--r--src/lib/process/tests/d_controller_unittests.cc8
-rw-r--r--src/lib/process/testutils/d_test_stubs.h14
5 files changed, 46 insertions, 22 deletions
diff --git a/src/bin/d2/tests/d2_controller_unittests.cc b/src/bin/d2/tests/d2_controller_unittests.cc
index c8ee639c69..37eb976f9c 100644
--- a/src/bin/d2/tests/d2_controller_unittests.cc
+++ b/src/bin/d2/tests/d2_controller_unittests.cc
@@ -177,24 +177,24 @@ TEST_F(D2ControllerTest, configUpdateTests) {
isc::data::Element::fromJSON(valid_d2_config);
// Verify that given a valid config we get a successful update result.
- answer = updateConfig(config_set, false);
+ answer = updateConfig(config_set);
isc::config::parseAnswer(rcode, answer);
EXPECT_EQ(0, rcode);
// Verify that given a valid config we get a successful check result.
- answer = updateConfig(config_set, true);
+ answer = checkConfig(config_set);
isc::config::parseAnswer(rcode, answer);
EXPECT_EQ(0, rcode);
// Use an invalid configuration to verify parsing error return.
std::string config = "{ \"bogus\": 1000 } ";
config_set = isc::data::Element::fromJSON(config);
- answer = updateConfig(config_set, false);
+ answer = updateConfig(config_set);
isc::config::parseAnswer(rcode, answer);
EXPECT_EQ(1, rcode);
// Use an invalid configuration to verify checking error return.
- answer = updateConfig(config_set, true);
+ answer = checkConfig(config_set);
isc::config::parseAnswer(rcode, answer);
EXPECT_EQ(1, rcode);
}
diff --git a/src/lib/process/d_controller.cc b/src/lib/process/d_controller.cc
index cbf0fe811b..b56b4a8bfe 100644
--- a/src/lib/process/d_controller.cc
+++ b/src/lib/process/d_controller.cc
@@ -112,7 +112,7 @@ DControllerBase::launch(int argc, char* argv[], const bool test_mode) {
initProcess();
isc::data::ConstElementPtr answer;
- answer = updateConfig(module_config, true);
+ answer = checkConfig(module_config);
int rcode = 0;
answer = isc::config::parseAnswer(rcode, answer);
if (rcode != 0) {
@@ -351,7 +351,7 @@ DControllerBase::configFromFile() {
getAppName() << "' entry.");
}
- answer = updateConfig(module_config, false);
+ answer = updateConfig(module_config);
int rcode = 0;
isc::config::parseAnswer(rcode, answer);
if (!rcode) {
@@ -390,9 +390,14 @@ DControllerBase::runProcess() {
// Instance method for handling new config
isc::data::ConstElementPtr
-DControllerBase::updateConfig(isc::data::ConstElementPtr new_config,
- bool check_only) {
- return (process_->configure(new_config, check_only));
+DControllerBase::updateConfig(isc::data::ConstElementPtr new_config) {
+ return (process_->configure(new_config, false));
+}
+
+// Instance method for checking new config
+isc::data::ConstElementPtr
+DControllerBase::checkConfig(isc::data::ConstElementPtr new_config) {
+ return (process_->configure(new_config, true));
}
diff --git a/src/lib/process/d_controller.h b/src/lib/process/d_controller.h
index 80eb098ada..6b4a3c2507 100644
--- a/src/lib/process/d_controller.h
+++ b/src/lib/process/d_controller.h
@@ -155,14 +155,27 @@ public:
/// configuration and then invoke the application process' configure method.
///
/// @param new_config is the new configuration
- /// @param check_only false for normal configuration, true when verifying only
///
/// @return returns an Element that contains the results of configuration
/// update composed of an integer status value (0 means successful,
/// non-zero means failure), and a string explanation of the outcome.
- virtual isc::data::ConstElementPtr
- updateConfig(isc::data::ConstElementPtr new_config,
- bool check_only = false);
+ virtual isc::data::ConstElementPtr updateConfig(isc::data::ConstElementPtr
+ new_config);
+
+ /// @brief Instance method invoked by the configuration event handler and
+ /// which processes the actual configuration check. Provides behavioral
+ /// path for both integrated and stand-alone modes. The current
+ /// implementation will merge the configuration update into the existing
+ /// configuration and then invoke the application process' configure method
+ /// with a final rollback.
+ ///
+ /// @param new_config is the new configuration
+ ///
+ /// @return returns an Element that contains the results of configuration
+ /// update composed of an integer status value (0 means successful,
+ /// non-zero means failure), and a string explanation of the outcome.
+ virtual isc::data::ConstElementPtr checkConfig(isc::data::ConstElementPtr
+ new_config);
/// @brief Reconfigures the process from a configuration file
///
@@ -194,7 +207,7 @@ public:
///
/// It then extracts the set of configuration elements for the
/// module-name that matches the controller's app_name_ and passes that
- /// set into @c updateConfig().
+ /// set into @c updateConfig() (or @c checkConfig()).
///
/// The file may contain an arbitrary number of other modules.
///
diff --git a/src/lib/process/tests/d_controller_unittests.cc b/src/lib/process/tests/d_controller_unittests.cc
index c65828f00f..bfc7885200 100644
--- a/src/lib/process/tests/d_controller_unittests.cc
+++ b/src/lib/process/tests/d_controller_unittests.cc
@@ -268,24 +268,24 @@ TEST_F(DStubControllerTest, configUpdateTests) {
isc::data::ElementPtr config_set = isc::data::Element::fromJSON(config);
// Verify that a valid config gets a successful update result.
- answer = updateConfig(config_set, false);
+ answer = updateConfig(config_set);
isc::config::parseAnswer(rcode, answer);
EXPECT_EQ(0, rcode);
// Verify that a valid config gets a successful check result.
- answer = updateConfig(config_set, true);
+ answer = checkConfig(config_set);
isc::config::parseAnswer(rcode, answer);
EXPECT_EQ(0, rcode);
// Verify that an error in process configure method is handled.
SimFailure::set(SimFailure::ftProcessConfigure);
- answer = updateConfig(config_set, false);
+ answer = updateConfig(config_set);
isc::config::parseAnswer(rcode, answer);
EXPECT_EQ(1, rcode);
// Verify that an error is handled too when the config is checked for.
SimFailure::set(SimFailure::ftProcessConfigure);
- answer = updateConfig(config_set, true);
+ answer = checkConfig(config_set);
isc::config::parseAnswer(rcode, answer);
EXPECT_EQ(1, rcode);
}
diff --git a/src/lib/process/testutils/d_test_stubs.h b/src/lib/process/testutils/d_test_stubs.h
index a7811a36a6..ecb8959610 100644
--- a/src/lib/process/testutils/d_test_stubs.h
+++ b/src/lib/process/testutils/d_test_stubs.h
@@ -487,10 +487,16 @@ public:
/// @Wrapper to invoke the Controller's updateConfig method. Please
/// refer to DControllerBase::updateConfig for details.
- isc::data::ConstElementPtr
- updateConfig(isc::data::ConstElementPtr new_config,
- bool check_only) {
- return (getController()->updateConfig(new_config, check_only));
+ isc::data::ConstElementPtr updateConfig(isc::data::ConstElementPtr
+ new_config) {
+ return (getController()->updateConfig(new_config));
+ }
+
+ /// @Wrapper to invoke the Controller's checkConfig method. Please
+ /// refer to DControllerBase::checkConfig for details.
+ isc::data::ConstElementPtr checkConfig(isc::data::ConstElementPtr
+ new_config) {
+ return (getController()->checkConfig(new_config));
}
/// @Wrapper to invoke the Controller's executeCommand method. Please