SimpleParser parser;
SubnetID id = parser.getUint32(cmd_args_, "subnet-id");
- size_t num = LeaseMgrFactory::instance().wipeLeases4(id);
+ size_t num = 0; // number of leases deleted
+ stringstream ids; // a text with subnet-ids being wiped
+
+ if (id) {
+ // Wipe a single subnet
+ num = LeaseMgrFactory::instance().wipeLeases4(id);
+ ids << id;
+ } else {
+ // Wipe them all!
+ ConstSrvConfigPtr config = CfgMgr::instance().getCurrentCfg();
+ ConstCfgSubnets4Ptr subnets = config->getCfgSubnets4();
+ const Subnet4Collection * subs = subnets->getAll();
+
+ // Go over all subnets and wipe leases in each of them.
+ for (auto sub : *subs) {
+ num += LeaseMgrFactory::instance().wipeLeases4(sub->getID());
+ ids << sub->getID() << " ";
+ }
+ }
stringstream tmp;
- tmp << "Deleted " << num << " IPv4 lease(s).";
+ tmp << "Deleted " << num << " IPv4 lease(s) from subnet(s) " << ids.str();
ConstElementPtr response = createAnswer(num ? CONTROL_RESULT_SUCCESS
: CONTROL_RESULT_EMPTY, tmp.str());
setResponse(handle, response);
SimpleParser parser;
SubnetID id = parser.getUint32(cmd_args_, "subnet-id");
- size_t num = LeaseMgrFactory::instance().wipeLeases6(id);
+ size_t num = 0; // number of leases deleted
+ stringstream ids; // a text with subnet-ids being wiped
+
+ if (id) {
+ // Wipe a single subnet.
+ num = LeaseMgrFactory::instance().wipeLeases6(id);
+ ids << id;
+ } else {
+ // Wipe them all!
+ ConstSrvConfigPtr config = CfgMgr::instance().getCurrentCfg();
+ ConstCfgSubnets6Ptr subnets = config->getCfgSubnets6();
+ const Subnet6Collection * subs = subnets->getAll();
+
+ // Go over all subnets and wipe leases in each of them.
+ for (auto sub : *subs) {
+ num += LeaseMgrFactory::instance().wipeLeases6(sub->getID());
+ ids << sub->getID() << " ";
+ }
+ }
stringstream tmp;
- tmp << "Deleted " << num << " IPv6 lease(s).";
+ tmp << "Deleted " << num << " IPv6 lease(s) from subnet(s) " << ids.str();
ConstElementPtr response = createAnswer(num ? CONTROL_RESULT_SUCCESS
: CONTROL_RESULT_EMPTY, tmp.str());
setResponse(handle, response);
" \"subnet-id\": 44"
" }\n"
"}";
- string exp_rsp = "Deleted 2 IPv4 lease(s).";
+ string exp_rsp = "Deleted 2 IPv4 lease(s) from subnet(s) 44";
testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp);
- // Make sure the lease is really gone.
+ // Make sure the leases in subnet 44 are really gone.
EXPECT_FALSE(lmptr_->getLease4(IOAddress("192.0.2.1")));
+ EXPECT_FALSE(lmptr_->getLease4(IOAddress("192.0.2.2")));
+
+ // Make sure the leases from subnet 88 are still there.
+ EXPECT_TRUE(lmptr_->getLease4(IOAddress("192.0.3.1")));
+ EXPECT_TRUE(lmptr_->getLease4(IOAddress("192.0.3.2")));
+}
+
+// Checks that lease4-wipe can remove leases from all subnets
+// at once.
+TEST_F(LeaseCmdsTest, Lease4WipeAll) {
+
+ // Initialize lease manager (false = v4, true = add a lease)
+ initLeaseMgr(false, true);
+
+ // Query for valid, existing lease.
+ string cmd =
+ "{\n"
+ " \"command\": \"lease4-wipe\",\n"
+ " \"arguments\": {"
+ " \"subnet-id\": 0"
+ " }\n"
+ "}";
+ string exp_rsp = "Deleted 4 IPv4 lease(s) from subnet(s) 44 88 ";
+ testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp);
+
+ // Make sure the leases in subnet 44 are really gone.
+ EXPECT_FALSE(lmptr_->getLease4(IOAddress("192.0.2.1")));
+ EXPECT_FALSE(lmptr_->getLease4(IOAddress("192.0.2.2")));
+
+ // Make sure the leases from subnet 88 are gone, too.
+ EXPECT_FALSE(lmptr_->getLease4(IOAddress("192.0.3.1")));
+ EXPECT_FALSE(lmptr_->getLease4(IOAddress("192.0.3.2")));
}
// Checks that lease4-wipe properly reports when no leases were deleted.
" \"subnet-id\": 44"
" }\n"
"}";
- string exp_rsp = "Deleted 0 IPv4 lease(s).";
+ string exp_rsp = "Deleted 0 IPv4 lease(s) from subnet(s) 44";
+ testCommand(cmd, CONTROL_RESULT_EMPTY, exp_rsp);
+}
+
+// Checks that lease4-wipe properly reports when no leases were deleted.
+TEST_F(LeaseCmdsTest, Lease4WipeNoLeasesAll) {
+
+ // Initialize lease manager (false = v4, false = no leases)
+ initLeaseMgr(false, false);
+
+ // Query for valid, existing lease.
+ string cmd =
+ "{\n"
+ " \"command\": \"lease4-wipe\",\n"
+ " \"arguments\": {"
+ " \"subnet-id\": 0"
+ " }\n"
+ "}";
+ string exp_rsp = "Deleted 0 IPv4 lease(s) from subnet(s) 44 88 ";
testCommand(cmd, CONTROL_RESULT_EMPTY, exp_rsp);
}
" \"subnet-id\": 66\n"
" }\n"
"}";
- string exp_rsp = "Deleted 2 IPv6 lease(s).";
+ string exp_rsp = "Deleted 2 IPv6 lease(s) from subnet(s) 66";
// The status expected is success. The lease should be deleted.
testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp);
- // Make sure the lease is really gone.
+ // Make sure the leases in subnet 44 are really gone.
EXPECT_FALSE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::1")));
+ EXPECT_FALSE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::2")));
+
+ // The leases in subnet 88 are supposed to be still there.
+ EXPECT_TRUE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:2::1")));
+ EXPECT_TRUE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:2::2")));
+}
+
+// Checks that lease4-wipe can remove leases from all subnets
+TEST_F(LeaseCmdsTest, Lease6WipeAll) {
+
+ initLeaseMgr(true, true); // (true = v6, true = create a lease)
+
+ // Now send the command.
+ string cmd =
+ "{\n"
+ " \"command\": \"lease6-wipe\",\n"
+ " \"arguments\": {"
+ " \"subnet-id\": 0\n"
+ " }\n"
+ "}";
+ string exp_rsp = "Deleted 4 IPv6 lease(s) from subnet(s) 66 99 ";
+
+ // The status expected is success. The lease should be deleted.
+ testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp);
+
+ // Make sure the leases in subnet 44 are really gone.
+ EXPECT_FALSE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::1")));
+ EXPECT_FALSE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::2")));
+
+ // The leases in subnet 88 are supposed to be still there.
+ EXPECT_FALSE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:2::1")));
+ EXPECT_FALSE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:2::2")));
}
// Checks that lease4-wipe properly reports when no leases were deleted.
" \"subnet-id\": 66"
" }\n"
"}";
- string exp_rsp = "Deleted 0 IPv6 lease(s).";
+ string exp_rsp = "Deleted 0 IPv6 lease(s) from subnet(s) 66";
+ testCommand(cmd, CONTROL_RESULT_EMPTY, exp_rsp);
+}
+
+// Checks that lease4-wipe properly reports when no leases were deleted.
+TEST_F(LeaseCmdsTest, Lease6WipeNoLeasesAll) {
+
+ // Initialize lease manager (false = v4, false = no leases)
+ initLeaseMgr(true, false);
+
+ // Query for valid, existing lease.
+ string cmd =
+ "{\n"
+ " \"command\": \"lease6-wipe\",\n"
+ " \"arguments\": {"
+ " \"subnet-id\": 0"
+ " }\n"
+ "}";
+ string exp_rsp = "Deleted 0 IPv6 lease(s) from subnet(s) 66 99 ";
testCommand(cmd, CONTROL_RESULT_EMPTY, exp_rsp);
}