]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2305] Added UT and ChangeLog entry
authorFrancis Dupont <fdupont@isc.org>
Tue, 2 Sep 2025 09:37:00 +0000 (11:37 +0200)
committerFrancis Dupont <fdupont@isc.org>
Thu, 18 Sep 2025 12:42:01 +0000 (14:42 +0200)
changelog_unreleased/2305-status-get-return-csv-lease-file-location-when-used [new file with mode: 0644]
src/lib/dhcpsrv/memfile_lease_mgr.cc
src/lib/dhcpsrv/memfile_lease_mgr.h
src/lib/dhcpsrv/tests/memfile_lease_mgr_unittest.cc

diff --git a/changelog_unreleased/2305-status-get-return-csv-lease-file-location-when-used b/changelog_unreleased/2305-status-get-return-csv-lease-file-location-when-used
new file mode 100644 (file)
index 0000000..296105f
--- /dev/null
@@ -0,0 +1,5 @@
+[func]         fdupont
+       When Kea is configured to use a CSV backup file for leases,
+       the "status-get" command returns its location is the
+       "csv-lease-file" entry.
+       (Gitlab #2305)
index 3ba5ea47fa926adb1c5d0a5e516ceea0443f6ab0..c387b118cac914b8896a65504690b2074933cb6b 100644 (file)
@@ -2268,6 +2268,25 @@ Memfile_LeaseMgr::isLFCProcessRunning(const std::string file_name, Universe u) {
     return (!pid_lock.isLocked() || pid_file.check());
 }
 
+ElementPtr
+Memfile_LeaseMgr::getStatus() const {
+    std::string file_name;
+    if (lease_file4_) {
+        file_name = lease_file4_->getFilename();
+    } else if (lease_file6_) {
+        file_name = lease_file6_->getFilename();
+    } else {
+        return (ElementPtr());
+    }
+    if (file_name.empty()) {
+        // Should not happen.
+        return (ElementPtr());
+    }
+    ElementPtr status = Element::createMap();
+    status->set("csv-lease-file", Element::create(file_name));
+    return (status);
+}
+
 std::string
 Memfile_LeaseMgr::appendSuffix(const std::string& file_name,
                                const LFCFileType& file_type) {
index 6a2ae69616ae58b1f23d5d170078a1192db5b2ae..bb02dd248d12b9de6ea9480331e8162e657960d1 100644 (file)
@@ -968,6 +968,12 @@ public:
     /// @return True if LFC is running, false otherwise (memfile only).
     static bool isLFCProcessRunning(const std::string file_name, Universe u);
 
+    /// @brief Return status information.
+    ///
+    /// @return Null or a map with the lease file name to add to
+    /// status-get command output.
+    virtual data::ElementPtr getStatus() const override;
+
     //@}
 
     /// @name Public type and method used to determine file names for LFC.
index cb6018874f25cc6172acc0c5c75cec16a747e872..868c68b216816487fec265e1ab871c2af3931801 100644 (file)
@@ -445,6 +445,9 @@ TEST_F(MemfileLeaseMgrTest, constructor) {
     EXPECT_NO_THROW(lease_mgr.reset(new Memfile_LeaseMgr(pmap)));
     EXPECT_TRUE(lease_mgr->getExtendedInfoTablesEnabled());
 
+    // Persist is false so no csv file.
+    EXPECT_FALSE(lease_mgr->getStatus());
+
     // Expecting that persist parameter is yes or no. Everything other than
     // that is wrong.
     pmap["lfc-interval"] = "10";
@@ -514,6 +517,10 @@ TEST_F(MemfileLeaseMgrTest, dataDirEnvVarOverride) {
     ASSERT_NO_THROW(lease_mgr.reset(new Memfile_LeaseMgr(pmap)));
     EXPECT_EQ(lease_mgr->getLeaseFilePath(Memfile_LeaseMgr::V6),
               "/tmp/leasefile6_1.csv");
+    ConstElementPtr status = lease_mgr->getStatus();
+    ASSERT_TRUE(status);
+    EXPECT_EQ(status->str(),
+              "{ \"csv-lease-file\": \"/tmp/leasefile6_1.csv\" }");
 }
 
 /// @brief Verifies that the supported path may be overridden with
@@ -533,6 +540,10 @@ TEST_F(MemfileLeaseMgrTest, dataDirExplicitOveride) {
     ASSERT_NO_THROW(lease_mgr.reset(new Memfile_LeaseMgr(pmap)));
     EXPECT_EQ(lease_mgr->getLeaseFilePath(Memfile_LeaseMgr::V6),
               "/tmp/leasefile6_1.csv");
+    ConstElementPtr status = lease_mgr->getStatus();
+    ASSERT_TRUE(status);
+    EXPECT_EQ(status->str(),
+              "{ \"csv-lease-file\": \"/tmp/leasefile6_1.csv\" }");
 }
 
 /// @brief Checks if there is no lease manager NoLeaseManager is thrown.
@@ -567,6 +578,7 @@ TEST_F(MemfileLeaseMgrTest, getLeaseFilePath) {
     lease_mgr.reset(new Memfile_LeaseMgr(pmap));
     EXPECT_TRUE(lease_mgr->getLeaseFilePath(Memfile_LeaseMgr::V4).empty());
     EXPECT_TRUE(lease_mgr->getLeaseFilePath(Memfile_LeaseMgr::V6).empty());
+    EXPECT_FALSE(lease_mgr->getStatus());
 }
 
 /// @brief Check if the persistLeases correctly checks that leases should not be written