From: Marcin Siodelski Date: Mon, 1 Sep 2014 14:17:52 +0000 (+0200) Subject: [3534] It is now possible to copy entire server configuration. X-Git-Tag: trac3595_base~7^2~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f5dbfe79903fb28914f963c7f2a4f00d3acb5ef5;p=thirdparty%2Fkea.git [3534] It is now possible to copy entire server configuration. --- diff --git a/src/lib/dhcpsrv/configuration.cc b/src/lib/dhcpsrv/configuration.cc index ab1db40392..fcab41e51d 100644 --- a/src/lib/dhcpsrv/configuration.cc +++ b/src/lib/dhcpsrv/configuration.cc @@ -73,6 +73,18 @@ Configuration::sequenceEquals(const Configuration& other) { return (getSequence() == other.getSequence()); } +void +Configuration::copy(Configuration& new_config) const { + // We will entirely replace loggers in the new configuration. + new_config.logging_info_.clear(); + for (LoggingInfoStorage::const_iterator it = logging_info_.begin(); + it != logging_info_.end(); ++it) { + new_config.addLoggingInfo(*it); + } + // Replace interface configuration. + new_config.setCfgIface(cfg_iface_); +} + bool Configuration::equals(const Configuration& other) const { // If number of loggers is different, then configurations aren't equal. diff --git a/src/lib/dhcpsrv/configuration.h b/src/lib/dhcpsrv/configuration.h index 0ffaf38daa..e493400b89 100644 --- a/src/lib/dhcpsrv/configuration.h +++ b/src/lib/dhcpsrv/configuration.h @@ -133,6 +133,16 @@ public: cfg_iface_ = cfg_iface; } + /// @brief Copies the currnet configuration to a new configuration. + /// + /// This method copies the parameters stored in the configuration to + /// an object passed as parameter. The configuration sequence is not + /// copied. + /// + /// @param [out] new_config An object to which the configuration will + /// be copied. + void copy(Configuration& new_config) const; + /// @name Methods and operators used to compare configurations. /// //@{ diff --git a/src/lib/dhcpsrv/tests/configuration_unittest.cc b/src/lib/dhcpsrv/tests/configuration_unittest.cc index 47f49d58f2..97be13a356 100644 --- a/src/lib/dhcpsrv/tests/configuration_unittest.cc +++ b/src/lib/dhcpsrv/tests/configuration_unittest.cc @@ -260,6 +260,40 @@ TEST_F(ConfigurationTest, summarySubnets) { conf_.getConfigSummary(Configuration::CFGSEL_SUBNET)); } +// This test checks if entire configuration can be copied and that the sequence +// number is not affected. +TEST_F(ConfigurationTest, copy) { + // Create two configurations with different sequence numbers. + Configuration conf1(32); + Configuration conf2(64); + + // Set logging information for conf1. + LoggingInfo info; + info.name_ = "foo"; + info.severity_ = isc::log::DEBUG; + info.debuglevel_ = 64; + info.destinations_.push_back(LoggingDestination()); + + // Set interface configuration for conf1. + CfgIface cfg_iface; + cfg_iface.use(CfgIface::V4, "eth0"); + + conf1.addLoggingInfo(info); + conf1.setCfgIface(cfg_iface); + + // Make sure both configurations are different. + ASSERT_TRUE(conf1 != conf2); + + // Copy conf1 to conf2. + ASSERT_NO_THROW(conf1.copy(conf2)); + + // Now they should be equal. + EXPECT_TRUE(conf1 == conf2); + + // But, their sequence numbers should be unequal. + EXPECT_FALSE(conf1.sequenceEquals(conf2)); +} + // This test checks that two configurations can be compared for (in)equality. TEST_F(ConfigurationTest, equality) { Configuration conf1(32);