From 54087e01f415ccc9434d069ebcc02a59e8e8ead5 Mon Sep 17 00:00:00 2001 From: Francis Dupont Date: Fri, 10 Oct 2025 12:58:24 +0200 Subject: [PATCH] [#3140] [4134] Checkpoint: add doc --- .../tests/limits_unit_tests_lease_limiting.cc | 34 ++++++++++++++++++ .../tests/limits_unit_tests_rate_limiting.cc | 35 +++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/src/hooks/dhcp/limits/tests/limits_unit_tests_lease_limiting.cc b/src/hooks/dhcp/limits/tests/limits_unit_tests_lease_limiting.cc index 8289e073f5..54ca56fea1 100644 --- a/src/hooks/dhcp/limits/tests/limits_unit_tests_lease_limiting.cc +++ b/src/hooks/dhcp/limits/tests/limits_unit_tests_lease_limiting.cc @@ -27,6 +27,7 @@ namespace { using namespace isc::dhcp; using namespace isc::hooks; using namespace isc::limits; +using namespace isc::stats; using namespace isc::util; using namespace std; @@ -133,6 +134,16 @@ struct LeaseLimitFixture : ::testing::Test { handle.setArgument("fake_allocation", false); handle.setArgument(isc::util::formatDhcpSpace("lease{}"), lease); + // Initialize stats to 0. + StatsMgr& stats_mgr = StatsMgr::instance(); + if (D == DhcpSpace::DHCPv4) { + stats_mgr.setValue("pkt4-limit-exceeded", static_cast(0)); + stats_mgr.setValue("pkt4-receive-drop", static_cast(0)); + } else { + stats_mgr.setValue("pkt6-limit-exceeded", static_cast(0)); + stats_mgr.setValue("pkt6-receive-drop", static_cast(0)); + } + // Simulate a leaseX_select callout call. EXPECT_NO_THROW_LOG(LimitManager::instance().lease_callout(handle)); @@ -143,6 +154,29 @@ struct LeaseLimitFixture : ::testing::Test { // Expect the given status. EXPECT_EQ(handle.getStatus(), expected_status); + + // Expect stats. + int64_t expected_stat = 0; + if (expected_status == CalloutHandle::NEXT_STEP_DROP) { + expected_stat = 1; + } + ObservationPtr limit_stat; + ObservationPtr drop_stat; + if (D == DhcpSpace::DHCPv4) { + limit_stat = stats_mgr.getObservation("pkt4-limit-exceeded"); + ASSERT_TRUE(limit_stat); + EXPECT_EQ(expected_stat, limit_stat->getInteger().first); + drop_stat = stats_mgr.getObservation("pkt4-receive-drop"); + ASSERT_TRUE(drop_stat); + EXPECT_EQ(expected_stat, drop_stat->getInteger().first); + } else { + limit_stat = stats_mgr.getObservation("pkt6-limit-exceeded"); + ASSERT_TRUE(limit_stat); + EXPECT_EQ(expected_stat, limit_stat->getInteger().first); + drop_stat = stats_mgr.getObservation("pkt6-receive-drop"); + ASSERT_TRUE(drop_stat); + EXPECT_EQ(expected_stat, drop_stat->getInteger().first); + } } /// @brief the body of most of the following tests diff --git a/src/hooks/dhcp/limits/tests/limits_unit_tests_rate_limiting.cc b/src/hooks/dhcp/limits/tests/limits_unit_tests_rate_limiting.cc index a4b944a4a7..888fa60372 100644 --- a/src/hooks/dhcp/limits/tests/limits_unit_tests_rate_limiting.cc +++ b/src/hooks/dhcp/limits/tests/limits_unit_tests_rate_limiting.cc @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -25,6 +26,7 @@ namespace { using namespace isc::dhcp; using namespace isc::hooks; using namespace isc::limits; +using namespace isc::stats; using namespace isc::util; using isc::asiolink::IOAddress; @@ -116,6 +118,16 @@ struct RateLimitFixture : ::testing::Test { handle.setArgument(isc::util::formatDhcpSpace("query{}"), packet); handle.setArgument(isc::util::formatDhcpSpace("subnet{}"), subnet); + // Initialize stats to 0. + StatsMgr& stats_mgr = StatsMgr::instance(); + if (D == DhcpSpace::DHCPv4) { + stats_mgr.setValue("pkt4-limit-exceeded", static_cast(0)); + stats_mgr.setValue("pkt4-receive-drop", static_cast(0)); + } else { + stats_mgr.setValue("pkt6-limit-exceeded", static_cast(0)); + stats_mgr.setValue("pkt6-receive-drop", static_cast(0)); + } + // Call the callouts of interest. The same handle is used for both which is not what // happens in real situations, but makes for a simplistic test. EXPECT_NO_THROW_LOG(LimitManager::instance().pkt_receive(handle)); @@ -123,6 +135,29 @@ struct RateLimitFixture : ::testing::Test { // Expect the given status. EXPECT_EQ(handle.getStatus(), expected_status); + + // Expect stats. + int64_t expected_stat = 0; + if (expected_status == CalloutHandle::NEXT_STEP_DROP) { + expected_stat = 1; + } + ObservationPtr limit_stat; + ObservationPtr drop_stat; + if (D == DhcpSpace::DHCPv4) { + limit_stat = stats_mgr.getObservation("pkt4-limit-exceeded"); + ASSERT_TRUE(limit_stat); + EXPECT_EQ(expected_stat, limit_stat->getInteger().first); + drop_stat = stats_mgr.getObservation("pkt4-receive-drop"); + ASSERT_TRUE(drop_stat); + EXPECT_EQ(expected_stat, drop_stat->getInteger().first); + } else { + limit_stat = stats_mgr.getObservation("pkt6-limit-exceeded"); + ASSERT_TRUE(limit_stat); + EXPECT_EQ(expected_stat, limit_stat->getInteger().first); + drop_stat = stats_mgr.getObservation("pkt6-receive-drop"); + ASSERT_TRUE(drop_stat); + EXPECT_EQ(expected_stat, drop_stat->getInteger().first); + } } /// @brief the body of most of the following tests -- 2.47.3