summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarcin Siodelski <marcin@isc.org>2015-11-25 16:44:46 +0100
committerMarcin Siodelski <marcin@isc.org>2015-11-25 16:44:46 +0100
commit3f53001245c1214f298a6a1d42b4c680ec2fcaae (patch)
tree88b43e5d8c3261db723e90ba3a76452a85fd2127 /src
parent[4204] Whitespace may surround option name in expressions. (diff)
downloadkea-3f53001245c1214f298a6a1d42b4c680ec2fcaae.tar.xz
kea-3f53001245c1214f298a6a1d42b4c680ec2fcaae.zip
[4204] Remove runtime option defs if "option-def" is not in config.
Diffstat (limited to 'src')
-rw-r--r--src/bin/dhcp4/json_config_parser.cc3
-rw-r--r--src/bin/dhcp4/tests/config_parser_unittest.cc15
-rw-r--r--src/bin/dhcp6/json_config_parser.cc3
-rw-r--r--src/bin/dhcp6/tests/config_parser_unittest.cc16
4 files changed, 37 insertions, 0 deletions
diff --git a/src/bin/dhcp4/json_config_parser.cc b/src/bin/dhcp4/json_config_parser.cc
index 1483f6288c..95e883c030 100644
--- a/src/bin/dhcp4/json_config_parser.cc
+++ b/src/bin/dhcp4/json_config_parser.cc
@@ -515,6 +515,9 @@ configureDhcp4Server(Dhcpv4Srv&, isc::data::ConstElementPtr config_set) {
// Revert any runtime option definitions configured so far and not committed.
LibDHCP::revertRuntimeOptionDefs();
+ // Let's set empty container in case a user hasn't specified any configuration
+ // for option definitions. This is equivalent to commiting empty container.
+ LibDHCP::setRuntimeOptionDefs(OptionDefSpaceContainer());
// Some of the values specified in the configuration depend on
// other values. Typically, the values in the subnet4 structure
diff --git a/src/bin/dhcp4/tests/config_parser_unittest.cc b/src/bin/dhcp4/tests/config_parser_unittest.cc
index 86c2dee095..b008b6082c 100644
--- a/src/bin/dhcp4/tests/config_parser_unittest.cc
+++ b/src/bin/dhcp4/tests/config_parser_unittest.cc
@@ -1346,6 +1346,11 @@ TEST_F(Dhcp4ParserTest, optionDefIpv4Address) {
ASSERT_TRUE(status);
checkResult(status, 0);
+ // We need to commit option definitions because later in this test we
+ // will be checking if they get removed when "option-def" parameter
+ // is removed from a configuration.
+ LibDHCP::commitRuntimeOptionDefs();
+
// The option definition should now be available in the CfgMgr.
def = CfgMgr::instance().getStagingCfg()->getCfgOptionDef()->get("isc", 100);
ASSERT_TRUE(def);
@@ -1365,6 +1370,16 @@ TEST_F(Dhcp4ParserTest, optionDefIpv4Address) {
// be equal.
EXPECT_TRUE(def_libdhcp != def);
EXPECT_TRUE(*def_libdhcp == *def);
+
+ // Let's apply empty configuration. This removes the option definitions
+ // configuration and should result in removal of the option 100 from the
+ // libdhcp++.
+ config = "{ }";
+ json = Element::fromJSON(config);
+ ASSERT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+ checkResult(status, 0);
+
+ EXPECT_FALSE(LibDHCP::getRuntimeOptionDef("isc", 100));
}
// The goal of this test is to check whether an option definition
diff --git a/src/bin/dhcp6/json_config_parser.cc b/src/bin/dhcp6/json_config_parser.cc
index 692d38db64..edb17989cb 100644
--- a/src/bin/dhcp6/json_config_parser.cc
+++ b/src/bin/dhcp6/json_config_parser.cc
@@ -754,6 +754,9 @@ configureDhcp6Server(Dhcpv6Srv&, isc::data::ConstElementPtr config_set) {
// Revert any runtime option definitions configured so far and not committed.
LibDHCP::revertRuntimeOptionDefs();
+ // Let's set empty container in case a user hasn't specified any configuration
+ // for option definitions. This is equivalent to commiting empty container.
+ LibDHCP::setRuntimeOptionDefs(OptionDefSpaceContainer());
// Some of the values specified in the configuration depend on
// other values. Typically, the values in the subnet6 structure
diff --git a/src/bin/dhcp6/tests/config_parser_unittest.cc b/src/bin/dhcp6/tests/config_parser_unittest.cc
index 4ab9e9a4f1..98bce31fd4 100644
--- a/src/bin/dhcp6/tests/config_parser_unittest.cc
+++ b/src/bin/dhcp6/tests/config_parser_unittest.cc
@@ -1583,6 +1583,12 @@ TEST_F(Dhcp6ParserTest, optionDefIpv6Address) {
ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
ASSERT_TRUE(status);
+ checkResult(status, 0);
+
+ // We need to commit option definitions because later in this test we
+ // will be checking if they get removed when "option-def" parameter
+ // is removed from a configuration.
+ LibDHCP::commitRuntimeOptionDefs();
// The option definition should now be available in the CfgMgr.
def = CfgMgr::instance().getStagingCfg()->getCfgOptionDef()->get("isc", 100);
@@ -1602,6 +1608,16 @@ TEST_F(Dhcp6ParserTest, optionDefIpv6Address) {
// be equal.
EXPECT_TRUE(def_libdhcp != def);
EXPECT_TRUE(*def_libdhcp == *def);
+
+ // Let's apply empty configuration. This removes the option definitions
+ // configuration and should result in removal of the option 100 from the
+ // libdhcp++.
+ config = "{ }";
+ json = Element::fromJSON(config);
+ ASSERT_NO_THROW(status = configureDhcp6Server(srv_, json));
+ checkResult(status, 0);
+
+ EXPECT_FALSE(LibDHCP::getRuntimeOptionDef("isc", 100));
}
// The goal of this test is to check whether an option definition