From 66e996f8428697d9f30dc8c29e2ace8ce107ee74 Mon Sep 17 00:00:00 2001 From: Francis Dupont Date: Fri, 16 Oct 2015 23:50:39 +0200 Subject: [PATCH] [3978] Added unit tests --- src/bin/dhcp4/ctrl_dhcp4_srv.cc | 2 +- .../dhcp4/tests/ctrl_dhcp4_srv_unittest.cc | 39 +++++++++++++++++- src/bin/dhcp6/ctrl_dhcp6_srv.cc | 2 +- .../dhcp6/tests/ctrl_dhcp6_srv_unittest.cc | 41 +++++++++++++++++++ 4 files changed, 81 insertions(+), 3 deletions(-) diff --git a/src/bin/dhcp4/ctrl_dhcp4_srv.cc b/src/bin/dhcp4/ctrl_dhcp4_srv.cc index 097b045fd2..1150dc4e0a 100644 --- a/src/bin/dhcp4/ctrl_dhcp4_srv.cc +++ b/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); } diff --git a/src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc b/src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc index af2f5e676a..cb6c7de0a4 100644 --- a/src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc +++ b/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 #include #include +#include +#include #include #include @@ -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 diff --git a/src/bin/dhcp6/ctrl_dhcp6_srv.cc b/src/bin/dhcp6/ctrl_dhcp6_srv.cc index f3247436ab..9aa04dd1a3 100644 --- a/src/bin/dhcp6/ctrl_dhcp6_srv.cc +++ b/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); } diff --git a/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc b/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc index cab9f19408..dcbe5ed1ad 100644 --- a/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc +++ b/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc @@ -14,9 +14,12 @@ #include +#include #include #include #include +#include +#include #include #include #include @@ -32,6 +35,7 @@ #include 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 -- 2.47.2