]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#1375] fixed unittests
authorRazvan Becheriu <razvan@isc.org>
Sat, 7 Nov 2020 19:07:16 +0000 (21:07 +0200)
committerRazvan Becheriu <razvan@isc.org>
Wed, 9 Dec 2020 17:12:46 +0000 (19:12 +0200)
src/bin/dhcp4/ctrl_dhcp4_srv.cc
src/bin/dhcp4/json_config_parser.cc
src/bin/dhcp6/ctrl_dhcp6_srv.cc
src/bin/dhcp6/json_config_parser.cc

index 9b28a32536a7b86ee7b5a51dd3e0a7695a9a131e..aa7298c576f158a870de2b6ddf17bad3ebbc67f9 100644 (file)
@@ -21,6 +21,7 @@
 #include <dhcpsrv/cfgmgr.h>
 #include <dhcpsrv/db_type.h>
 #include <dhcpsrv/host_mgr.h>
+#include <dhcpsrv/lease_mgr_factory.h>
 #include <hooks/hooks.h>
 #include <hooks/hooks_manager.h>
 #include <stats/stats_mgr.h>
@@ -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)
index 4ce6a1921411cfac472128818d5cb7e35ce3c2d4..c729cb4b17c51d9f13d1beaa34a8e69e9a779f6f 100644 (file)
@@ -20,6 +20,8 @@
 #include <dhcpsrv/cfgmgr.h>
 #include <dhcpsrv/config_backend_dhcp4_mgr.h>
 #include <dhcpsrv/db_type.h>
+#include <dhcpsrv/lease_mgr_factory.h>
+#include <dhcpsrv/host_mgr.h>
 #include <dhcpsrv/parsers/client_class_def_parser.h>
 #include <dhcpsrv/parsers/dhcp_parsers.h>
 #include <dhcpsrv/parsers/expiration_config_parser.h>
@@ -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();
index 0613e95d8f2d98ec943aa93f5d47b6ff40e4562f..1e4c7de02e81ffd25a5e562a8e84a9433e69b90a 100644 (file)
@@ -20,6 +20,7 @@
 #include <dhcpsrv/cfg_multi_threading.h>
 #include <dhcpsrv/cfgmgr.h>
 #include <dhcpsrv/db_type.h>
+#include <dhcpsrv/lease_mgr_factory.h>
 #include <dhcpsrv/host_mgr.h>
 #include <hooks/hooks.h>
 #include <hooks/hooks_manager.h>
@@ -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)
index 943042ca37d76eb3a90f59cc8afaa4fe8a481584..3d28f9b534d19afcb3166b6a8b84122260270369 100644 (file)
@@ -20,6 +20,8 @@
 #include <dhcpsrv/cfg_option.h>
 #include <dhcpsrv/cfgmgr.h>
 #include <dhcpsrv/db_type.h>
+#include <dhcpsrv/lease_mgr_factory.h>
+#include <dhcpsrv/host_mgr.h>
 #include <dhcpsrv/pool.h>
 #include <dhcpsrv/subnet.h>
 #include <dhcpsrv/timer_mgr.h>
@@ -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();