|
@@ -908,13 +908,14 @@ public:
|
|
/// @brief Test that declined expired leases can be removed.
|
|
/// @brief Test that declined expired leases can be removed.
|
|
///
|
|
///
|
|
/// This method allows controlling remove_leases parameter when calling
|
|
/// This method allows controlling remove_leases parameter when calling
|
|
- /// @ref AllocEngine::reclaimExpiredLeases4. This should not matter, as
|
|
|
|
|
|
+ /// @ref AllocEngine::reclaimExpiredLeases4 or
|
|
|
|
+ /// @ref AllocEngine::reclaimExpiredLeases6. This should not matter, as
|
|
/// the address affinity doesn't make sense for declined leases (they don't
|
|
/// the address affinity doesn't make sense for declined leases (they don't
|
|
/// have any useful information in them anymore), so AllocEngine should
|
|
/// have any useful information in them anymore), so AllocEngine should
|
|
/// remove them all the time.
|
|
/// remove them all the time.
|
|
///
|
|
///
|
|
/// @param remove see description above
|
|
/// @param remove see description above
|
|
- void testReclaimDeclined4(bool remove) {
|
|
|
|
|
|
+ void testReclaimDeclined(bool remove) {
|
|
for (unsigned int i = 0; i < TEST_LEASES_NUM; ++i) {
|
|
for (unsigned int i = 0; i < TEST_LEASES_NUM; ++i) {
|
|
|
|
|
|
// Mark leases with even indexes as expired.
|
|
// Mark leases with even indexes as expired.
|
|
@@ -940,7 +941,15 @@ public:
|
|
|
|
|
|
/// @brief Test that appropriate statistics are updated when
|
|
/// @brief Test that appropriate statistics are updated when
|
|
/// declined expired leases are processed by AllocEngine.
|
|
/// declined expired leases are processed by AllocEngine.
|
|
- void testReclaimDeclined4Stats() {
|
|
|
|
|
|
+ ///
|
|
|
|
+ /// This method works for both v4 and v6. Just make sure the correct
|
|
|
|
+ /// statistic name is passed. This is the name of the assigned addresses,
|
|
|
|
+ /// that is expected to be decreased once the reclaimation procedure
|
|
|
|
+ /// is complete.
|
|
|
|
+ ///
|
|
|
|
+ /// @param stat_name name of the statistic for assigned addresses statistic
|
|
|
|
+ /// ("assgined-addresses" for both v4 and "assigned-nas" for v6)
|
|
|
|
+ void testReclaimDeclinedStats(const std::string& stat_name) {
|
|
|
|
|
|
// Leases by default all belong to subnet_id_ = 1. Let's count the
|
|
// Leases by default all belong to subnet_id_ = 1. Let's count the
|
|
// number of declined leases.
|
|
// number of declined leases.
|
|
@@ -966,6 +975,7 @@ public:
|
|
}
|
|
}
|
|
|
|
|
|
StatsMgr& stats_mgr = StatsMgr::instance();
|
|
StatsMgr& stats_mgr = StatsMgr::instance();
|
|
|
|
+
|
|
// Let's set the global statistic. Values are arbitrary and can
|
|
// Let's set the global statistic. Values are arbitrary and can
|
|
// be used to easily detect whether a given stat was decreased or
|
|
// be used to easily detect whether a given stat was decreased or
|
|
// increased. They are sufficiently high compared to number of leases
|
|
// increased. They are sufficiently high compared to number of leases
|
|
@@ -978,19 +988,19 @@ public:
|
|
|
|
|
|
// And those subnet specific as well
|
|
// And those subnet specific as well
|
|
stats_mgr.setValue(stats_mgr.generateName("subnet", 1,
|
|
stats_mgr.setValue(stats_mgr.generateName("subnet", 1,
|
|
- "assigned-addresses"), int64_t(1000));
|
|
|
|
|
|
+ stat_name), int64_t(1000));
|
|
stats_mgr.setValue(stats_mgr.generateName("subnet", 2,
|
|
stats_mgr.setValue(stats_mgr.generateName("subnet", 2,
|
|
- "assigned-addresses"), int64_t(2000));
|
|
|
|
|
|
+ stat_name), int64_t(2000));
|
|
|
|
|
|
stats_mgr.setValue(stats_mgr.generateName("subnet", 1,
|
|
stats_mgr.setValue(stats_mgr.generateName("subnet", 1,
|
|
- "reclaimed-declined-addresses"), int64_t(3000));
|
|
|
|
|
|
+ "reclaimed-declined-addresses"), int64_t(10000));
|
|
stats_mgr.setValue(stats_mgr.generateName("subnet", 2,
|
|
stats_mgr.setValue(stats_mgr.generateName("subnet", 2,
|
|
- "reclaimed-declined-addresses"), int64_t(4000));
|
|
|
|
|
|
+ "reclaimed-declined-addresses"), int64_t(20000));
|
|
|
|
|
|
stats_mgr.setValue(stats_mgr.generateName("subnet", 1,
|
|
stats_mgr.setValue(stats_mgr.generateName("subnet", 1,
|
|
- "declined-addresses"), int64_t(10));
|
|
|
|
|
|
+ "declined-addresses"), int64_t(100));
|
|
stats_mgr.setValue(stats_mgr.generateName("subnet", 2,
|
|
stats_mgr.setValue(stats_mgr.generateName("subnet", 2,
|
|
- "declined-addresses"), int64_t(20));
|
|
|
|
|
|
+ "declined-addresses"), int64_t(200));
|
|
|
|
|
|
// Run leases reclamation routine on all leases. This should result
|
|
// Run leases reclamation routine on all leases. This should result
|
|
// in removal of all leases with even indexes.
|
|
// in removal of all leases with even indexes.
|
|
@@ -1005,17 +1015,22 @@ public:
|
|
testStatistics("reclaimed-declined-addresses", 2000 + subnet1_cnt + subnet2_cnt);
|
|
testStatistics("reclaimed-declined-addresses", 2000 + subnet1_cnt + subnet2_cnt);
|
|
|
|
|
|
// subnet[X].assigned-addresses should go down. Between the time
|
|
// subnet[X].assigned-addresses should go down. Between the time
|
|
- // of DHCPDECLINE reception and declined expired lease reclaimation,
|
|
|
|
- // we count this address as assigned-addresses. We decrease assigned-
|
|
|
|
- // addresses when we reclaim the lease, not when the packet is received.
|
|
|
|
- // For explanation, see Duplicate Addresses (DHCPDECLINE support)
|
|
|
|
- // section in the User's Guide or a comment in Dhcpv4Srv::declineLease.
|
|
|
|
- testStatistics("subnet[1].assigned-addresses", 1000 - subnet1_cnt);
|
|
|
|
- testStatistics("subnet[2].assigned-addresses", 2000 - subnet2_cnt);
|
|
|
|
|
|
+ // of DHCPDECLINE(v4)/DECLINE(v6) reception and declined expired lease
|
|
|
|
+ // reclaimation, we count this address as assigned-addresses. We decrease
|
|
|
|
+ // assigned-addresses(v4)/assgined-nas(v6) when we reclaim the lease,
|
|
|
|
+ // not when the packet is received. For explanation, see Duplicate
|
|
|
|
+ // Addresses (DHCPDECLINE support) (v4) or Duplicate Addresses (DECLINE
|
|
|
|
+ // support) sections in the User's Guide or a comment in
|
|
|
|
+ // Dhcpv4Srv::declineLease or Dhcpv6Srv::declineLease.
|
|
|
|
+ testStatistics("subnet[1]." + stat_name, 1000 - subnet1_cnt);
|
|
|
|
+ testStatistics("subnet[2]." + stat_name, 2000 - subnet2_cnt);
|
|
|
|
+
|
|
|
|
+ testStatistics("subnet[1].declined-addresses", 100 - subnet1_cnt);
|
|
|
|
+ testStatistics("subnet[2].declined-addresses", 200 - subnet2_cnt);
|
|
|
|
|
|
// subnet[X].reclaimed-declined-addresses should go up in each subnet
|
|
// subnet[X].reclaimed-declined-addresses should go up in each subnet
|
|
- testStatistics("subnet[1].reclaimed-declined-addresses", 3000 + subnet1_cnt);
|
|
|
|
- testStatistics("subnet[2].reclaimed-declined-addresses", 4000 + subnet1_cnt);
|
|
|
|
|
|
+ testStatistics("subnet[1].reclaimed-declined-addresses", 10000 + subnet1_cnt);
|
|
|
|
+ testStatistics("subnet[2].reclaimed-declined-addresses", 20000 + subnet1_cnt);
|
|
}
|
|
}
|
|
|
|
|
|
/// @brief Collection of leases created at construction time.
|
|
/// @brief Collection of leases created at construction time.
|
|
@@ -1283,6 +1298,27 @@ TEST_F(ExpirationAllocEngine6Test, reclaimExpiredLeasesShortTimeout) {
|
|
testReclaimExpiredLeasesTimeout(1);
|
|
testReclaimExpiredLeasesTimeout(1);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/// This test verifies that @ref AllocEngine::reclaimExpiredLeases6 properly
|
|
|
|
+/// handles declined leases that have expired in case when it is told to
|
|
|
|
+/// remove leases.
|
|
|
|
+TEST_F(ExpirationAllocEngine6Test, reclaimDeclined1) {
|
|
|
|
+ testReclaimDeclined(true);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/// This test verifies that @ref AllocEngine::reclaimExpiredLeases6 properly
|
|
|
|
+/// handles declined leases that have expired in case when it is told to
|
|
|
|
+/// not remove leases. This flag should not matter and declined expired
|
|
|
|
+/// leases should always be removed.
|
|
|
|
+TEST_F(ExpirationAllocEngine6Test, reclaimDeclined2) {
|
|
|
|
+ testReclaimDeclined(false);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/// This test verifies that statistics are modified correctly after
|
|
|
|
+/// reclaim expired leases is called.
|
|
|
|
+TEST_F(ExpirationAllocEngine6Test, reclaimDeclinedStats) {
|
|
|
|
+ testReclaimDeclinedStats("assigned-nas");
|
|
|
|
+}
|
|
|
|
+
|
|
// *******************************************************
|
|
// *******************************************************
|
|
//
|
|
//
|
|
// DHCPv4 lease reclamation routine tests start here!
|
|
// DHCPv4 lease reclamation routine tests start here!
|
|
@@ -1651,7 +1687,7 @@ TEST_F(ExpirationAllocEngine4Test, reclaimExpiredLeasesShortTimeout) {
|
|
/// handles declined leases that have expired in case when it is told to
|
|
/// handles declined leases that have expired in case when it is told to
|
|
/// remove leases.
|
|
/// remove leases.
|
|
TEST_F(ExpirationAllocEngine4Test, reclaimDeclined1) {
|
|
TEST_F(ExpirationAllocEngine4Test, reclaimDeclined1) {
|
|
- testReclaimDeclined4(true);
|
|
|
|
|
|
+ testReclaimDeclined(true);
|
|
}
|
|
}
|
|
|
|
|
|
/// This test verifies that @ref AllocEngine::reclaimExpiredLeases4 properly
|
|
/// This test verifies that @ref AllocEngine::reclaimExpiredLeases4 properly
|
|
@@ -1659,13 +1695,13 @@ TEST_F(ExpirationAllocEngine4Test, reclaimDeclined1) {
|
|
/// not remove leases. This flag should not matter and declined expired
|
|
/// not remove leases. This flag should not matter and declined expired
|
|
/// leases should always be removed.
|
|
/// leases should always be removed.
|
|
TEST_F(ExpirationAllocEngine4Test, reclaimDeclined2) {
|
|
TEST_F(ExpirationAllocEngine4Test, reclaimDeclined2) {
|
|
- testReclaimDeclined4(false);
|
|
|
|
|
|
+ testReclaimDeclined(false);
|
|
}
|
|
}
|
|
|
|
|
|
/// This test verifies that statistics are modified correctly after
|
|
/// This test verifies that statistics are modified correctly after
|
|
/// reclaim expired leases is called.
|
|
/// reclaim expired leases is called.
|
|
TEST_F(ExpirationAllocEngine4Test, reclaimDeclinedStats) {
|
|
TEST_F(ExpirationAllocEngine4Test, reclaimDeclinedStats) {
|
|
- testReclaimDeclined4Stats();
|
|
|
|
|
|
+ testReclaimDeclinedStats("assigned-addresses");
|
|
}
|
|
}
|
|
|
|
|
|
}; // end of anonymous namespace
|
|
}; // end of anonymous namespace
|