]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#4096] Added unit tests
authorFrancis Dupont <fdupont@isc.org>
Mon, 15 Sep 2025 13:02:49 +0000 (15:02 +0200)
committerFrancis Dupont <fdupont@isc.org>
Thu, 18 Sep 2025 17:35:04 +0000 (19:35 +0200)
src/bin/dhcp4/tests/dhcp4_srv_unittest.cc
src/bin/dhcp4/tests/dhcp4_test_utils.h
src/bin/dhcp6/tests/dhcp6_srv_unittest.cc
src/bin/dhcp6/tests/dhcp6_test_utils.h

index ff9c900de47c906f021b365558b0be1ae287d323..c3d6cdd83b9eab7dda7696fa77615ff742b82fe5 100644 (file)
@@ -30,6 +30,7 @@
 #include <dhcpsrv/cfgmgr.h>
 #include <dhcpsrv/lease_mgr.h>
 #include <dhcpsrv/lease_mgr_factory.h>
+#include <dhcpsrv/network_state.h>
 #include <dhcpsrv/utils.h>
 #include <dhcpsrv/host_mgr.h>
 #include <process/redact_config.h>
@@ -4946,6 +4947,77 @@ TEST_F(Dhcpv4SrvTest, statisticsUnknownRcvd) {
     EXPECT_EQ(1, drop_stat->getInteger().first);
 }
 
+// Test checks if reception of a packet when the service is disabled
+// increases pkt4-service-disabled and pkt4-receive-drop.
+TEST_F(Dhcpv4SrvTest, receiveServiceDisabledStat) {
+    IfaceMgrTestConfig test_config(true);
+    IfaceMgr::instance().openSockets4();
+
+    // Apply the configuration we just received.
+    configure(CONFIGS[0]);
+
+    // Let's get a simple DHCPDISCOVER...
+    Pkt4Ptr pkt = PktCaptures::captureRelayedDiscover();
+
+    // And disable the service.
+    ASSERT_TRUE(srv_->network_state_);
+    srv_->network_state_->disableService(NetworkState::USER_COMMAND);
+
+    // Simulate that we have received that traffic
+    srv_->fakeReceive(pkt);
+    srv_->run();
+
+    // All expected statistics must be present.
+    using namespace isc::stats;
+    StatsMgr& mgr = StatsMgr::instance();
+    ObservationPtr pkt4_rcvd = mgr.getObservation("pkt4-received");
+    ObservationPtr parse_fail = mgr.getObservation("pkt4-service-disabled");
+    ObservationPtr recv_drop = mgr.getObservation("pkt4-receive-drop");
+    ASSERT_TRUE(pkt4_rcvd);
+    ASSERT_TRUE(parse_fail);
+    ASSERT_TRUE(recv_drop);
+
+    // They also must have expected values.
+    EXPECT_EQ(1, pkt4_rcvd->getInteger().first);
+    EXPECT_EQ(1, parse_fail->getInteger().first);
+    EXPECT_EQ(1, recv_drop->getInteger().first);
+}
+
+// Test checks if reception of a malformed packet increases pkt4-parse-failed
+// and pkt4-receive-drop
+TEST_F(Dhcpv4SrvTest, receiveParseFailedStat) {
+    IfaceMgrTestConfig test_config(true);
+    IfaceMgr::instance().openSockets4();
+
+    // Apply the configuration we just received.
+    configure(CONFIGS[0]);
+
+    // Let's get a simple DHCPDISCOVER...
+    Pkt4Ptr pkt = PktCaptures::captureRelayedDiscover();
+
+    // And pretend its packet is only 100 bytes long.
+    pkt->data_.resize(100);
+
+    // Simulate that we have received that traffic
+    srv_->fakeReceive(pkt);
+    srv_->run();
+
+    // All expected statistics must be present.
+    using namespace isc::stats;
+    StatsMgr& mgr = StatsMgr::instance();
+    ObservationPtr pkt4_rcvd = mgr.getObservation("pkt4-received");
+    ObservationPtr parse_fail = mgr.getObservation("pkt4-parse-failed");
+    ObservationPtr recv_drop = mgr.getObservation("pkt4-receive-drop");
+    ASSERT_TRUE(pkt4_rcvd);
+    ASSERT_TRUE(parse_fail);
+    ASSERT_TRUE(recv_drop);
+
+    // They also must have expected values.
+    EXPECT_EQ(1, pkt4_rcvd->getInteger().first);
+    EXPECT_EQ(1, parse_fail->getInteger().first);
+    EXPECT_EQ(1, recv_drop->getInteger().first);
+}
+
 // This test verifies that the server is able to handle an empty client-id
 // in incoming client message.
 TEST_F(Dhcpv4SrvTest, emptyClientId) {
index 24223413698910a6e28dee28b22fc03fb0168a3e..578f6653b1ce362a81e3a3223818e1e306cb00d3 100644 (file)
@@ -319,6 +319,7 @@ public:
     using Dhcpv4Srv::alloc_engine_;
     using Dhcpv4Srv::server_port_;
     using Dhcpv4Srv::client_port_;
+    using Dhcpv4Srv::network_state_;
 
     /// @brief Mutex to protect the packet buffers.
     std::mutex mutex_;
index f1d3240e1f8b78a601986152781c02c73a38ab93..6a0ed1ae7fb22a65c29b496f9c4e5c536a86bb50 100644 (file)
@@ -29,6 +29,7 @@
 #include <dhcpsrv/cfgmgr.h>
 #include <dhcpsrv/lease_mgr.h>
 #include <dhcpsrv/lease_mgr_factory.h>
+#include <dhcpsrv/network_state.h>
 #include <dhcpsrv/host_mgr.h>
 #include <dhcpsrv/utils.h>
 #include <process/redact_config.h>
@@ -3626,6 +3627,52 @@ TEST_F(Dhcpv6SrvTest, receiveAddrRegInformStat) {
     testReceiveStats(DHCPV6_ADDR_REG_INFORM, "pkt6-addr-reg-inform-received");
 }
 
+// Test checks if reception of a packet when the service is disabled
+// increases pkt6-service-disabled and pkt6-receive-drop.
+TEST_F(Dhcpv6SrvTest, receiveServiceDisableddStat) {
+    using namespace isc::stats;
+    StatsMgr& mgr = StatsMgr::instance();
+
+    // Let's get a simple SOLICIT...
+    Pkt6Ptr pkt = PktCaptures::captureSimpleSolicit();
+
+    // And disable the service.
+    ASSERT_TRUE(srv_->network_state_);
+    srv_->network_state_->disableService(NetworkState::USER_COMMAND);
+
+    // Check that the tested statistics is initially set to 0
+    ObservationPtr pkt6_rcvd = mgr.getObservation("pkt6-received");
+    ObservationPtr parse_fail = mgr.getObservation("pkt6-service-disabled");
+    ObservationPtr recv_drop = mgr.getObservation("pkt6-receive-drop");
+    ASSERT_TRUE(pkt6_rcvd);
+    ASSERT_TRUE(parse_fail);
+    ASSERT_TRUE(recv_drop);
+    EXPECT_EQ(0, pkt6_rcvd->getInteger().first);
+    EXPECT_EQ(0, parse_fail->getInteger().first);
+    EXPECT_EQ(0, recv_drop->getInteger().first);
+
+    // Simulate that we have received that traffic
+    srv_->fakeReceive(pkt);
+
+    // Server will now process to run its normal loop, but instead of calling
+    // IfaceMgr::receive6(), it will read all packets from the list set by
+    // fakeReceive()
+    srv_->run();
+
+    // All expected statistics must be present.
+    pkt6_rcvd = mgr.getObservation("pkt6-received");
+    parse_fail = mgr.getObservation("pkt6-service-disabled");
+    recv_drop = mgr.getObservation("pkt6-receive-drop");
+    ASSERT_TRUE(pkt6_rcvd);
+    ASSERT_TRUE(parse_fail);
+    ASSERT_TRUE(recv_drop);
+
+    // They also must have expected values.
+    EXPECT_EQ(1, pkt6_rcvd->getInteger().first);
+    EXPECT_EQ(1, parse_fail->getInteger().first);
+    EXPECT_EQ(1, recv_drop->getInteger().first);
+}
+
 // Test checks if reception of a malformed packet increases pkt6-parse-failed
 // and pkt6-receive-drop
 TEST_F(Dhcpv6SrvTest, receiveParseFailedStat) {
index e739e2af4c687fef052ba6fe9e845e493b74b204..65a45cd74160b118d695547839a91ac0b0b78a74 100644 (file)
@@ -406,6 +406,7 @@ public:
     using Dhcpv6Srv::initContext;
     using Dhcpv6Srv::server_port_;
     using Dhcpv6Srv::client_port_;
+    using Dhcpv6Srv::network_state_;
 
     /// @brief packets we pretend to receive.
     ///