diff options
author | Marcin Siodelski <marcin@isc.org> | 2015-11-25 16:44:46 +0100 |
---|---|---|
committer | Marcin Siodelski <marcin@isc.org> | 2015-11-25 16:44:46 +0100 |
commit | 3f53001245c1214f298a6a1d42b4c680ec2fcaae (patch) | |
tree | 88b43e5d8c3261db723e90ba3a76452a85fd2127 /src | |
parent | [4204] Whitespace may surround option name in expressions. (diff) | |
download | kea-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.cc | 3 | ||||
-rw-r--r-- | src/bin/dhcp4/tests/config_parser_unittest.cc | 15 | ||||
-rw-r--r-- | src/bin/dhcp6/json_config_parser.cc | 3 | ||||
-rw-r--r-- | src/bin/dhcp6/tests/config_parser_unittest.cc | 16 |
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 |