From: Razvan Becheriu Date: Sat, 7 Nov 2020 19:07:16 +0000 (+0200) Subject: [#1375] fixed unittests X-Git-Tag: Kea-1.9.3~89 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=265f3fe73ad500e6bc30f19093999276c8fdb86d;p=thirdparty%2Fkea.git [#1375] fixed unittests --- diff --git a/src/bin/dhcp4/ctrl_dhcp4_srv.cc b/src/bin/dhcp4/ctrl_dhcp4_srv.cc index 9b28a32536..aa7298c576 100644 --- a/src/bin/dhcp4/ctrl_dhcp4_srv.cc +++ b/src/bin/dhcp4/ctrl_dhcp4_srv.cc @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -1074,6 +1075,8 @@ void ControlledDhcpv4Srv::shutdownServer(int exit_value) { ControlledDhcpv4Srv::~ControlledDhcpv4Srv() { try { + LeaseMgrFactory::destroy(); + HostMgr::create(); cleanup(); // The closure captures either a shared pointer (memory leak) diff --git a/src/bin/dhcp4/json_config_parser.cc b/src/bin/dhcp4/json_config_parser.cc index 4ce6a19214..c729cb4b17 100644 --- a/src/bin/dhcp4/json_config_parser.cc +++ b/src/bin/dhcp4/json_config_parser.cc @@ -20,6 +20,8 @@ #include #include #include +#include +#include #include #include #include @@ -337,6 +339,18 @@ configureDhcp4Server(Dhcpv4Srv& server, isc::data::ConstElementPtr config_set, // Close DHCP sockets and remove any existing timers. if (!check_only) { + // If mysql or postgresql lease and host managers were configured, they + // need to be destroy before calling unregisterTimers as they are + // responsible for unregistering own connection timers. A memfile lease + // manager and an empty host manager will be created instead. + auto running_cfg = CfgMgr::instance().getCurrentCfg(); + auto parameters = DatabaseConnection::parse(running_cfg->getCfgDbAccess()->getLeaseDbAccessString()); + if (parameters["type"] == "mysql" || parameters["type"] == "postgresql") { + CfgDbAccess cfg_db; + cfg_db.setAppendedParameters("universe=4"); + LeaseMgrFactory::create(cfg_db.getLeaseDbAccessString()); + } + HostMgr::create(); IfaceMgr::instance().closeSockets(); TimerMgr::instance()->unregisterTimers(); server.discardPackets(); diff --git a/src/bin/dhcp6/ctrl_dhcp6_srv.cc b/src/bin/dhcp6/ctrl_dhcp6_srv.cc index 0613e95d8f..1e4c7de02e 100644 --- a/src/bin/dhcp6/ctrl_dhcp6_srv.cc +++ b/src/bin/dhcp6/ctrl_dhcp6_srv.cc @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -1093,6 +1094,8 @@ void ControlledDhcpv6Srv::shutdownServer(int exit_value) { ControlledDhcpv6Srv::~ControlledDhcpv6Srv() { try { + LeaseMgrFactory::destroy(); + HostMgr::create(); cleanup(); // The closure captures either a shared pointer (memory leak) diff --git a/src/bin/dhcp6/json_config_parser.cc b/src/bin/dhcp6/json_config_parser.cc index 943042ca37..3d28f9b534 100644 --- a/src/bin/dhcp6/json_config_parser.cc +++ b/src/bin/dhcp6/json_config_parser.cc @@ -20,6 +20,8 @@ #include #include #include +#include +#include #include #include #include @@ -63,6 +65,7 @@ using namespace std; using namespace isc; using namespace isc::data; +using namespace isc::db; using namespace isc::dhcp; using namespace isc::asiolink; using namespace isc::hooks; @@ -439,6 +442,18 @@ configureDhcp6Server(Dhcpv6Srv& server, isc::data::ConstElementPtr config_set, // Close DHCP sockets and remove any existing timers. if (!check_only) { + // If mysql or postgresql lease and host managers were configured, they + // need to be destroy before calling unregisterTimers as they are + // responsible for unregistering own connection timers. A memfile lease + // manager and an empty host manager will be created instead. + auto running_cfg = CfgMgr::instance().getCurrentCfg(); + auto parameters = DatabaseConnection::parse(running_cfg->getCfgDbAccess()->getLeaseDbAccessString()); + if (parameters["type"] == "mysql" || parameters["type"] == "postgresql") { + CfgDbAccess cfg_db; + cfg_db.setAppendedParameters("universe=6"); + LeaseMgrFactory::create(cfg_db.getLeaseDbAccessString()); + } + HostMgr::create(); IfaceMgr::instance().closeSockets(); TimerMgr::instance()->unregisterTimers(); server.discardPackets();