]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#4220] Added basic UT
authorThomas Markwalder <tmark@isc.org>
Wed, 3 Dec 2025 21:00:58 +0000 (16:00 -0500)
committerThomas Markwalder <tmark@isc.org>
Wed, 10 Dec 2025 13:51:02 +0000 (13:51 +0000)
/src/lib/dhcpsrv/memfile_lease_mgr.h
    util::ReconnectCtlPtr reconnectCtl() - getter for testing only

/src/lib/dhcpsrv/tests/memfile_lease_mgr_unittest.cc
    TEST_F(MemfileLeaseMgrTest, constructorReconnectParams) - new test

src/lib/util/reconnect_ctl.h
    ReconnectCtl::OnFailAction onFailAction() - new getter

src/lib/dhcpsrv/memfile_lease_mgr.h
src/lib/dhcpsrv/tests/memfile_lease_mgr_unittest.cc
src/lib/util/reconnect_ctl.h

index bc0fe3dd7c0395a1613c39c6181178521767c4e5..e395a43f07ddc973d06373da1bc921acd7bf307a 100644 (file)
@@ -1659,6 +1659,8 @@ private:
 
     /// @brief Post a call to the appropriate main thread callback when memfile
     /// access is lost (e.g. disk full).
+    /// Note this should only be called within a thread-safe context
+    /// (i.e. inside *Internal functions).
     void handleDbLost();
 
 public:
@@ -1670,6 +1672,12 @@ public:
     /// @return The Memfile Lease Manager.
     static TrackingLeaseMgrPtr
     factory(const isc::db::DatabaseConnection::ParameterMap& parameters);
+
+    /// @brief Returns the connection's ReconnectCtl object.
+    /// This is intended for testing purposes only.
+    util::ReconnectCtlPtr reconnectCtl() {
+        return (conn_.reconnectCtl());
+    }
 };
 
 /// @brief Initialization structure used to register and deregister Memfile Lease Mgr.
index be978f84f6e133c483840c7e2bc1e84635400224..adde1c3b9e645e44b754fb2b926f70aada7d4281 100644 (file)
@@ -476,6 +476,74 @@ TEST_F(MemfileLeaseMgrTest, constructor) {
     EXPECT_NO_THROW(lease_mgr.reset(new Memfile_LeaseMgr(pmap)));
 }
 
+TEST_F(MemfileLeaseMgrTest, constructorReconnectParams) {
+    DatabaseConnection::ParameterMap pmap;
+    pmap["universe"] = "6";
+    pmap["persist"] = "false";
+    boost::scoped_ptr<Memfile_LeaseMgr> lease_mgr;
+
+    ASSERT_NO_THROW(lease_mgr.reset(new Memfile_LeaseMgr(pmap)));
+
+    auto recon = lease_mgr->reconnectCtl();
+    ASSERT_TRUE(recon);
+    EXPECT_EQ(recon->onFailAction(), OnFailAction::STOP_RETRY_EXIT);
+    EXPECT_EQ(recon->maxRetries(), 0);
+    EXPECT_EQ(recon->retryInterval(), 0);
+
+    pmap["on-fail"] = "stop-retry-exit";
+    ASSERT_NO_THROW(lease_mgr.reset(new Memfile_LeaseMgr(pmap)));
+
+    recon = lease_mgr->reconnectCtl();
+    ASSERT_TRUE(recon);
+    EXPECT_EQ(recon->onFailAction(), OnFailAction::STOP_RETRY_EXIT);
+    EXPECT_EQ(recon->maxRetries(), 0);
+    EXPECT_EQ(recon->retryInterval(), 0);
+
+    pmap["on-fail"] = "serve-retry-exit";
+    ASSERT_NO_THROW(lease_mgr.reset(new Memfile_LeaseMgr(pmap)));
+
+    recon = lease_mgr->reconnectCtl();
+    ASSERT_TRUE(recon);
+    EXPECT_EQ(recon->onFailAction(), OnFailAction::SERVE_RETRY_EXIT);
+    EXPECT_EQ(recon->maxRetries(), 0);
+    EXPECT_EQ(recon->retryInterval(), 0);
+
+    pmap["on-fail"] = "serve-retry-continue";
+    ASSERT_NO_THROW(lease_mgr.reset(new Memfile_LeaseMgr(pmap)));
+
+    recon = lease_mgr->reconnectCtl();
+    ASSERT_TRUE(recon);
+    EXPECT_EQ(recon->onFailAction(), OnFailAction::SERVE_RETRY_CONTINUE);
+    EXPECT_EQ(recon->maxRetries(), 0);
+    EXPECT_EQ(recon->retryInterval(), 0);
+
+    pmap["max-reconnect-tries"] = "5";
+    EXPECT_THROW_MSG(lease_mgr.reset(new Memfile_LeaseMgr(pmap)), BadValue,
+                     "'max-reconnect-tries' values greater than zero"
+                     " are not supported by memfile");
+
+    pmap["max-reconnect-tries"] = "0";
+    ASSERT_NO_THROW(lease_mgr.reset(new Memfile_LeaseMgr(pmap)));
+
+    recon = lease_mgr->reconnectCtl();
+    ASSERT_TRUE(recon);
+    EXPECT_EQ(recon->maxRetries(), 0);
+    EXPECT_EQ(recon->retryInterval(), 0);
+
+    pmap["reconnect-wait-time"] = "5";
+    EXPECT_THROW_MSG(lease_mgr.reset(new Memfile_LeaseMgr(pmap)), BadValue,
+                     "'reconnect-wait-time' values greater than zero"
+                     " are not supported by memfile");
+
+    pmap["reconnect-wait-time"] = "0";
+    ASSERT_NO_THROW(lease_mgr.reset(new Memfile_LeaseMgr(pmap)));
+
+    recon = lease_mgr->reconnectCtl();
+    ASSERT_TRUE(recon);
+    EXPECT_EQ(recon->maxRetries(), 0);
+    EXPECT_EQ(recon->retryInterval(), 0);
+}
+
 /// @brief Verifies that the supported path is the enforced.
 TEST_F(MemfileLeaseMgrTest, defaultDataDir) {
     ASSERT_TRUE(data_dir_env_var_.getValue().empty());
index 6b44370f65e890597d243ef4382082a4373a6410..12c41b6d11c36de3a24b8285b35f09065cd157ca 100644 (file)
@@ -108,6 +108,11 @@ public:
                 (action_ == OnFailAction::SERVE_RETRY_EXIT));
     }
 
+    /// @brief Returns the on fail action value.
+    OnFailAction onFailAction() const {
+        return (action_);
+    }
+
     /// @brief Convert action to string.
     ///
     /// @param action The action type to be converted to text.