Browse Source

[3978] Added unit tests

Francis Dupont 9 years ago
parent
commit
66e996f842

+ 1 - 1
src/bin/dhcp4/ctrl_dhcp4_srv.cc

@@ -113,7 +113,7 @@ ControlledDhcpv4Srv::commandLeasesReclaimHandler(const string&, ConstElementPtr
 
     server_->alloc_engine_->reclaimExpiredLeases4(0, 0, true);
     ConstElementPtr answer = isc::config::createAnswer(0,
-                             "Leases successfully reclaimed/");
+                             "Leases successfully reclaimed.");
     return (answer);
 }
 

+ 38 - 1
src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc

@@ -1,4 +1,4 @@
-// Copyright (C) 2012-2013 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2012-2013, 2015 Internet Systems Consortium, Inc. ("ISC")
 //
 // Permission to use, copy, modify, and/or distribute this software for any
 // purpose with or without fee is hereby granted, provided that the above
@@ -19,6 +19,8 @@
 #include <dhcp/dhcp4.h>
 #include <dhcp4/ctrl_dhcp4_srv.h>
 #include <dhcpsrv/cfgmgr.h>
+#include <dhcpsrv/lease.h>
+#include <dhcpsrv/lease_mgr_factory.h>
 #include <hooks/hooks_manager.h>
 #include <testutils/unix_control_client.h>
 
@@ -94,6 +96,11 @@ public:
             "    \"interfaces-config\": {"
             "        \"interfaces\": [ \"*\" ]"
             "    },"
+            "    \"expired-leases-processing\": {"
+            "         \"reclaim-timer-wait-time\": 60,"
+            "         \"hold-reclaimed-time\": 500,"
+            "         \"flush-reclaimed-timer-wait-time\": 60"
+            "    },"
             "    \"rebind-timer\": 2000, "
             "    \"renew-timer\": 1000, "
             "    \"subnet4\": [ ],"
@@ -380,4 +387,34 @@ TEST_F(CtrlChannelDhcpv4SrvTest, controlChannelStats) {
 }
 
 
+// Thist test verifies that the DHCP server immediately reclaims expired
+// leases on leases-reclaim command
+// @todo currently must be last as it changes statistics.
+TEST_F(CtrlChannelDhcpv4SrvTest, controlLeasesReclaim) {
+    createUnixChannelServer();
+
+    // Create an expired lease. The lease is expired by 40 seconds ago
+    // (valid lifetime = 60, cltt = now - 100).
+    HWAddrPtr hwaddr_expired(new HWAddr(HWAddr::fromText("00:01:02:03:04:05")));
+    Lease4Ptr lease_expired(new Lease4(IOAddress("10.0.0.1"), hwaddr_expired,
+                                       ClientIdPtr(), 60, 10, 20,
+                                       time(NULL) - 100, SubnetID(1)));
+
+    // Add lease to the database.
+    LeaseMgr& lease_mgr = LeaseMgrFactory().instance();
+    ASSERT_NO_THROW(lease_mgr.addLease(lease_expired));
+
+    // Make sure it has been added.
+    ASSERT_TRUE(lease_mgr.getLease4(IOAddress("10.0.0.1")));
+
+    // Send the command.
+    std::string response;
+    sendUnixCommand("{ \"command\": \"leases-reclaim\" }", response);
+    EXPECT_EQ("{ \"result\": 0, \"text\": \"Leases successfully reclaimed.\" }", response);
+
+    // Verify that the lease in the database has been processed as expected.
+    ASSERT_NO_THROW(lease_expired = lease_mgr.getLease4(IOAddress("10.0.0.1")));
+    EXPECT_FALSE(lease_expired);
+}
+
 } // End of anonymous namespace

+ 1 - 1
src/bin/dhcp6/ctrl_dhcp6_srv.cc

@@ -75,7 +75,7 @@ ControlledDhcpv6Srv::commandLeasesReclaimHandler(const string&, ConstElementPtr
 
     server_->alloc_engine_->reclaimExpiredLeases6(0, 0, true);
     ConstElementPtr answer = isc::config::createAnswer(0,
-                             "Leases successfully reclaimed/");
+                             "Leases successfully reclaimed.");
     return (answer);
 }
 

+ 41 - 0
src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc

@@ -14,9 +14,12 @@
 
 #include <config.h>
 
+#include <asiolink/io_address.h>
 #include <cc/command_interpreter.h>
 #include <config/command_mgr.h>
 #include <dhcpsrv/cfgmgr.h>
+#include <dhcpsrv/lease.h>
+#include <dhcpsrv/lease_mgr_factory.h>
 #include <dhcp6/ctrl_dhcp6_srv.h>
 #include <hooks/hooks_manager.h>
 #include <testutils/unix_control_client.h>
@@ -32,6 +35,7 @@
 #include <cstdlib>
 
 using namespace std;
+using namespace isc::asiolink;
 using namespace isc::config;
 using namespace isc::data;
 using namespace isc::dhcp;
@@ -118,6 +122,11 @@ public:
             "    \"interfaces-config\": {"
             "        \"interfaces\": [ \"*\" ]"
             "    },"
+            "    \"expired-leases-processing\": {"
+            "         \"reclaim-timer-wait-time\": 60,"
+            "         \"hold-reclaimed-time\": 500,"
+            "         \"flush-reclaimed-timer-wait-time\": 60"
+            "    },"
             "    \"rebind-timer\": 2000, "
             "    \"renew-timer\": 1000, "
             "    \"subnet6\": [ ],"
@@ -452,4 +461,36 @@ TEST_F(CtrlChannelDhcpv6SrvTest, controlChannelStats) {
               response);
 }
 
+// Thist test verifies that the DHCP server immediately reclaims expired
+// leases on leases-reclaim command
+// @todo currently must be last as it changes statistics.
+TEST_F(CtrlChannelDhcpv6SrvTest, controlLeasesReclaim) {
+    createUnixChannelServer();
+
+    // Create an expired lease. The lease is expired by 40 seconds ago
+    // (valid lifetime = 60, cltt = now - 100).
+    DuidPtr duid_expired(new DUID(DUID::fromText("00:01:02:03:04:05:06").getDuid()));
+    Lease6Ptr lease_expired(new Lease6(Lease::TYPE_NA, IOAddress("3000::1"),
+                                       duid_expired, 1, 50, 60, 10, 20, SubnetID(1)));
+    lease_expired->cltt_ = time(NULL) - 100;
+
+    // Add lease to the database.
+    LeaseMgr& lease_mgr = LeaseMgrFactory().instance();
+    ASSERT_NO_THROW(lease_mgr.addLease(lease_expired));
+
+    // Make sure it has been added.
+    ASSERT_TRUE(lease_mgr.getLease6(Lease::TYPE_NA, IOAddress("3000::1")));
+
+    // Send the command.
+    std::string response;
+    sendUnixCommand("{ \"command\": \"leases-reclaim\" }", response);
+    EXPECT_EQ("{ \"result\": 0, \"text\": \"Leases successfully reclaimed.\" }", response);
+
+    // Verify that the lease in the database has been processed as expected.
+    ASSERT_NO_THROW(
+        lease_expired = lease_mgr.getLease6(Lease::TYPE_NA, IOAddress("3000::1"))
+    );
+    EXPECT_FALSE(lease_expired);
+}
+
 } // End of anonymous namespace