From: Razvan Becheriu Date: Thu, 23 Jul 2020 16:06:49 +0000 (+0300) Subject: [#1065] lease commands update statistics X-Git-Tag: Kea-1.8.0~121 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f8b20eaf25a3a7e8ee022af0f1b60a2bbfb2283e;p=thirdparty%2Fkea.git [#1065] lease commands update statistics --- diff --git a/src/hooks/dhcp/lease_cmds/lease_cmds.cc b/src/hooks/dhcp/lease_cmds/lease_cmds.cc index e12ebf73e1..e97f4c4e81 100644 --- a/src/hooks/dhcp/lease_cmds/lease_cmds.cc +++ b/src/hooks/dhcp/lease_cmds/lease_cmds.cc @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -41,6 +42,7 @@ using namespace isc::dhcp_ddns; using namespace isc::config; using namespace isc::asiolink; using namespace isc::hooks; +using namespace isc::stats; using namespace isc::util; using namespace std; @@ -420,6 +422,10 @@ LeaseCmdsImpl::leaseAddHandler(CalloutHandle& handle) { if (!success) { isc_throw(db::DuplicateEntry, "IPv4 lease already exists."); } + StatsMgr::instance().addValue( + StatsMgr::generateName("subnet", lease4->subnet_id_, + "assigned-addresses"), + int64_t(1)); resp << "Lease for address " << lease4->addr_.toText() << ", subnet-id " << lease4->subnet_id_ << " added."; } @@ -454,6 +460,11 @@ LeaseCmdsImpl::leaseAddHandler(CalloutHandle& handle) { if (!success) { isc_throw(db::DuplicateEntry, "IPv6 lease already exists."); } + StatsMgr::instance().addValue( + StatsMgr::generateName("subnet", lease6->subnet_id_, + lease6->type_ == Lease::TYPE_NA ? + "assigned-nas" : "assigned-pds"), + int64_t(1)); if (lease6->type_ == Lease::TYPE_NA) { resp << "Lease for address " << lease6->addr_.toText() << ", subnet-id " << lease6->subnet_id_ << " added."; @@ -1167,6 +1178,10 @@ LeaseCmdsImpl::lease4DelHandler(CalloutHandle& handle) { if (LeaseMgrFactory::instance().deleteLease(lease4)) { setSuccessResponse(handle, "IPv4 lease deleted."); + StatsMgr::instance().addValue(StatsMgr::generateName("subnet", + lease4->subnet_id_, + "assigned-addresses"), + int64_t(-1)); } else { setErrorResponse (handle, "IPv4 lease not found.", CONTROL_RESULT_EMPTY); } @@ -1188,8 +1203,26 @@ namespace { // anonymous namespace. void updateOrAdd(Lease6Ptr lease) { try { + Lease6Ptr lease6 = + LeaseMgrFactory::instance().getLease6(lease->type_, lease->addr_); // Try to update. LeaseMgrFactory::instance().updateLease6(lease); + bool update = lease6->checkUpdateStats(); + if (lease6->subnet_id_ != lease->subnet_id_) { + StatsMgr::instance().addValue( + StatsMgr::generateName("subnet", lease6->subnet_id_, + lease->type_ == Lease::TYPE_NA ? + "assigned-nas" : "assigned-pds"), + int64_t(-1)); + update = true; + } + if (update) { + StatsMgr::instance().addValue( + StatsMgr::generateName("subnet", lease->subnet_id_, + lease->type_ == Lease::TYPE_NA ? + "assigned-nas" : "assigned-pds"), + int64_t(1)); + } } catch (const NoSuchLease& ex) { // Lease to be updated not found, so add it. @@ -1197,6 +1230,11 @@ void updateOrAdd(Lease6Ptr lease) { isc_throw(db::DuplicateEntry, "lost race between calls to update and add"); } + StatsMgr::instance().addValue( + StatsMgr::generateName("subnet", lease->subnet_id_, + lease->type_ == Lease::TYPE_NA ? + "assigned-nas" : "assigned-pds"), + int64_t(1)); } } @@ -1289,6 +1327,11 @@ LeaseCmdsImpl::lease6BulkApplyHandler(CalloutHandle& handle) { // leases. if (LeaseMgrFactory::instance().deleteLease(lease)) { ++success_count; + StatsMgr::instance().addValue( + StatsMgr::generateName("subnet", lease->subnet_id_, + lease->type_ == Lease::TYPE_NA ? + "assigned-nas" : "assigned-pds"), + int64_t(-1)); } else { // Lazy creation of the list of leases which failed to delete. @@ -1451,6 +1494,11 @@ LeaseCmdsImpl::lease6DelHandler(CalloutHandle& handle) { if (LeaseMgrFactory::instance().deleteLease(lease6)) { setSuccessResponse(handle, "IPv6 lease deleted."); + StatsMgr::instance().addValue( + StatsMgr::generateName("subnet", lease6->subnet_id_, + lease6->type_ == Lease::TYPE_NA ? + "assigned-nas" : "assigned-pds"), + int64_t(-1)); } else { setErrorResponse (handle, "IPv6 lease not found.", CONTROL_RESULT_EMPTY); } @@ -1471,14 +1519,33 @@ LeaseCmdsImpl::lease6DelHandler(CalloutHandle& handle) { namespace { // anonymous namepace. bool addOrUpdate4(Lease4Ptr lease, bool force_create) { - if (force_create && !LeaseMgrFactory::instance().getLease4(lease->addr_)) { + Lease4Ptr lease4 = LeaseMgrFactory::instance().getLease4(lease->addr_); + if (force_create && !lease4) { if (!LeaseMgrFactory::instance().addLease(lease)) { isc_throw(db::DuplicateEntry, "lost race between calls to get and add"); } + StatsMgr::instance().addValue( + StatsMgr::generateName("subnet", lease->subnet_id_, + "assigned-addresses"), + int64_t(1)); return (true); } LeaseMgrFactory::instance().updateLease4(lease); + bool update = lease4->checkUpdateStats(); + if (lease4->subnet_id_ != lease->subnet_id_) { + StatsMgr::instance().addValue( + StatsMgr::generateName("subnet", lease4->subnet_id_, + "assigned-addresses"), + int64_t(-1)); + update = true; + } + if (update) { + StatsMgr::instance().addValue( + StatsMgr::generateName("subnet", lease->subnet_id_, + "assigned-addresses"), + int64_t(1)); + } return (false); } @@ -1540,15 +1607,37 @@ LeaseCmdsImpl::lease4UpdateHandler(CalloutHandle& handle) { namespace { // anonymous namepace. bool addOrUpdate6(Lease6Ptr lease, bool force_create) { - if (force_create && - !LeaseMgrFactory::instance().getLease6(lease->type_, lease->addr_)) { + Lease6Ptr lease6 = + LeaseMgrFactory::instance().getLease6(lease->type_, lease->addr_); + if (force_create && !lease6) { if (!LeaseMgrFactory::instance().addLease(lease)) { isc_throw(db::DuplicateEntry, "lost race between calls to get and add"); } + StatsMgr::instance().addValue( + StatsMgr::generateName("subnet", lease->subnet_id_, + lease->type_ == Lease::TYPE_NA ? + "assigned-nas" : "assigned-pds"), + int64_t(1)); return (true); } LeaseMgrFactory::instance().updateLease6(lease); + bool update = lease6->checkUpdateStats(); + if (lease6->subnet_id_ != lease->subnet_id_) { + StatsMgr::instance().addValue( + StatsMgr::generateName("subnet", lease6->subnet_id_, + lease->type_ == Lease::TYPE_NA ? + "assigned-nas" : "assigned-pds"), + int64_t(-1)); + update = true; + } + if (update) { + StatsMgr::instance().addValue( + StatsMgr::generateName("subnet", lease->subnet_id_, + lease->type_ == Lease::TYPE_NA ? + "assigned-nas" : "assigned-pds"), + int64_t(1)); + } return (false); } @@ -1628,6 +1717,10 @@ LeaseCmdsImpl::lease4WipeHandler(CalloutHandle& handle) { // Wipe a single subnet num = LeaseMgrFactory::instance().wipeLeases4(id); ids << " " << id; + StatsMgr::instance().setValue(StatsMgr::generateName("subnet", + id, + "assigned-addresses"), + int64_t(0)); } else { // Wipe them all! ConstSrvConfigPtr config = CfgMgr::instance().getCurrentCfg(); @@ -1638,6 +1731,10 @@ LeaseCmdsImpl::lease4WipeHandler(CalloutHandle& handle) { for (auto sub : *subs) { num += LeaseMgrFactory::instance().wipeLeases4(sub->getID()); ids << " " << sub->getID(); + StatsMgr::instance().setValue(StatsMgr::generateName("subnet", + sub->getID(), + "assigned-addresses"), + int64_t(0)); } } @@ -1680,6 +1777,12 @@ LeaseCmdsImpl::lease6WipeHandler(CalloutHandle& handle) { // Wipe a single subnet. num = LeaseMgrFactory::instance().wipeLeases6(id); ids << " " << id; + StatsMgr::instance().setValue( + StatsMgr::generateName("subnet", id, "assigned-nas" ), + int64_t(0)); + StatsMgr::instance().setValue( + StatsMgr::generateName("subnet", id, "assigned-pds"), + int64_t(0)); } else { // Wipe them all! ConstSrvConfigPtr config = CfgMgr::instance().getCurrentCfg(); @@ -1690,6 +1793,12 @@ LeaseCmdsImpl::lease6WipeHandler(CalloutHandle& handle) { for (auto sub : *subs) { num += LeaseMgrFactory::instance().wipeLeases6(sub->getID()); ids << " " << sub->getID(); + StatsMgr::instance().setValue( + StatsMgr::generateName("subnet", sub->getID(), "assigned-nas" ), + int64_t(0)); + StatsMgr::instance().setValue( + StatsMgr::generateName("subnet", sub->getID(), "assigned-pds"), + int64_t(0)); } } diff --git a/src/hooks/dhcp/lease_cmds/tests/lease_cmds_unittest.cc b/src/hooks/dhcp/lease_cmds/tests/lease_cmds_unittest.cc index 251ed5bed7..999ef07a1c 100644 --- a/src/hooks/dhcp/lease_cmds/tests/lease_cmds_unittest.cc +++ b/src/hooks/dhcp/lease_cmds/tests/lease_cmds_unittest.cc @@ -15,8 +15,11 @@ #include #include #include +#include #include + #include + #include #include @@ -28,6 +31,7 @@ using namespace isc::data; using namespace isc::dhcp; using namespace isc::dhcp_ddns; using namespace isc::asiolink; +using namespace isc::stats; using namespace isc::test; namespace { @@ -272,6 +276,7 @@ public: LeaseMgrFactory::destroy(); enableD2(); lmptr_ = 0; + StatsMgr::instance().removeAll(); } /// @brief Destructor @@ -284,6 +289,7 @@ public: disableD2(); unloadLibs(); lmptr_ = 0; + StatsMgr::instance().removeAll(); } /// @brief Initializes lease manager (and optionally populates it with a lease) @@ -295,7 +301,8 @@ public: /// /// @param v6 true = v6, false = v4 /// @param insert_lease governs whether a lease should be pre-inserted - void initLeaseMgr(bool v6, bool insert_lease) { + /// @param expired governs whether a lease should be expired + void initLeaseMgr(bool v6, bool insert_lease, bool expired = false) { LeaseMgrFactory::destroy(); std::ostringstream s; @@ -324,15 +331,27 @@ public: if (insert_lease) { if (v6) { - lmptr_->addLease(createLease6("2001:db8:1::1", 66, 0x42)); - lmptr_->addLease(createLease6("2001:db8:1::2", 66, 0x56)); - lmptr_->addLease(createLease6("2001:db8:2::1", 99, 0x42)); - lmptr_->addLease(createLease6("2001:db8:2::2", 99, 0x56)); + lmptr_->addLease(createLease6("2001:db8:1::1", 66, 0x42, expired)); + lmptr_->addLease(createLease6("2001:db8:1::2", 66, 0x56, expired)); + lmptr_->addLease(createLease6("2001:db8:2::1", 99, 0x42, expired)); + lmptr_->addLease(createLease6("2001:db8:2::2", 99, 0x56, expired)); + StatsMgr::instance().setValue( + StatsMgr::generateName("subnet", 66, "assigned-nas" ), + int64_t(2)); + StatsMgr::instance().setValue( + StatsMgr::generateName("subnet", 99, "assigned-nas" ), + int64_t(2)); } else { - lmptr_->addLease(createLease4("192.0.2.1", 44, 0x08, 0x42)); - lmptr_->addLease(createLease4("192.0.2.2", 44, 0x09, 0x56)); - lmptr_->addLease(createLease4("192.0.3.1", 88, 0x08, 0x42)); - lmptr_->addLease(createLease4("192.0.3.2", 88, 0x09, 0x56)); + lmptr_->addLease(createLease4("192.0.2.1", 44, 0x08, 0x42, expired)); + lmptr_->addLease(createLease4("192.0.2.2", 44, 0x09, 0x56, expired)); + lmptr_->addLease(createLease4("192.0.3.1", 88, 0x08, 0x42, expired)); + lmptr_->addLease(createLease4("192.0.3.2", 88, 0x09, 0x56, expired)); + StatsMgr::instance().setValue( + StatsMgr::generateName("subnet", 44, "assigned-addresses"), + int64_t(2)); + StatsMgr::instance().setValue( + StatsMgr::generateName("subnet", 88, "assigned-addresses"), + int64_t(2)); } } } @@ -348,10 +367,13 @@ public: /// it 6 times. /// @param client_id_pattern value to be used for generating client identifier by /// repeating it 8 times. + /// @param expired controls weather the lease should be expired. /// @return Returns the lease created - Lease4Ptr createLease4(const std::string& ip_address, const SubnetID& subnet_id, + Lease4Ptr createLease4(const std::string& ip_address, + const SubnetID& subnet_id, const uint8_t hw_address_pattern, - const uint8_t client_id_pattern) { + const uint8_t client_id_pattern, + bool expired = false) { Lease4Ptr lease(new Lease4()); lease->addr_ = IOAddress(ip_address); @@ -361,8 +383,13 @@ public: lease->client_id_ = ClientIdPtr(new ClientId(vector(8, client_id_pattern))); // Purposely using high cltt and valid lifetime to test that // expiration time is cast properly. - lease->valid_lft_ = HIGH_VALID_LIFETIME; // Very high valid lifetime - lease->cltt_ = DEC_2030_TIME; // December 11th 2030 + if (expired) { + lease->cltt_ = 0; + lease->valid_lft_ = 60; + } else { + lease->cltt_ = DEC_2030_TIME; // December 11th 2030 + lease->valid_lft_ = HIGH_VALID_LIFETIME; // Very high valid lifetime + } lease->subnet_id_ = subnet_id; lease->fqdn_fwd_ = false; lease->fqdn_rev_ = true; @@ -381,9 +408,12 @@ public: /// @param subnet_id subnet identifier /// @param duid_address_pattern value to be used for generating DUID by /// repeating it 8 times + /// @param expired controls weather the lease should be expired. /// @return Returns the lease created - Lease6Ptr createLease6(const std::string& ip_address, const SubnetID& subnet_id, - const uint8_t duid_pattern) { + Lease6Ptr createLease6(const std::string& ip_address, + const SubnetID& subnet_id, + const uint8_t duid_pattern, + bool expired = false) { Lease6Ptr lease(new Lease6()); lease->addr_ = IOAddress(ip_address); @@ -394,8 +424,13 @@ public: lease->preferred_lft_ = 1800; // Purposely using high cltt and valid lifetime to test that // expiration time is cast properly. - lease->valid_lft_ = HIGH_VALID_LIFETIME; // Very high valid lifetime - lease->cltt_ = DEC_2030_TIME; // December 11th 2030 + if (expired) { + lease->cltt_ = 0; + lease->valid_lft_ = 60; + } else { + lease->cltt_ = DEC_2030_TIME; // December 11th 2030 + lease->valid_lft_ = HIGH_VALID_LIFETIME; // Very high valid lifetime + } lease->subnet_id_ = subnet_id; lease->fqdn_fwd_ = false; lease->fqdn_rev_ = true; @@ -813,6 +848,12 @@ TEST_F(LeaseCmdsTest, Lease4Add) { // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Now send the command. string txt = "{\n" @@ -826,6 +867,12 @@ TEST_F(LeaseCmdsTest, Lease4Add) { string exp_rsp = "Lease for address 192.0.2.202, subnet-id 44 added."; testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Now check that the lease is really there. Lease4Ptr l = lmptr_->getLease4(IOAddress("192.0.2.202")); ASSERT_TRUE(l); @@ -844,7 +891,6 @@ TEST_F(LeaseCmdsTest, Lease4Add) { // by one is ok. EXPECT_LE(abs(l->cltt_ - time(NULL)), 1); EXPECT_EQ(0, l->state_); - } // Check that a lease4 is not added when it already exists. @@ -856,6 +902,12 @@ TEST_F(LeaseCmdsTest, Lease4AddExisting) { // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Now send the command. string txt = "{\n" @@ -868,6 +920,12 @@ TEST_F(LeaseCmdsTest, Lease4AddExisting) { "}"; string exp_rsp = "IPv4 lease already exists."; testCommand(txt, CONTROL_RESULT_ERROR, exp_rsp); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); } // Check that subnet-id is optional. If not specified, Kea should select @@ -880,6 +938,12 @@ TEST_F(LeaseCmdsTest, Lease4AddSubnetIdMissing) { // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Now send the command without subnet-id. Kea should select // the subnet id on its own. string txt = @@ -893,6 +957,12 @@ TEST_F(LeaseCmdsTest, Lease4AddSubnetIdMissing) { string exp_rsp = "Lease for address 192.0.2.202, subnet-id 44 added."; testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Now check that the lease is really there. Lease4Ptr l = lmptr_->getLease4(IOAddress("192.0.2.202")); ASSERT_TRUE(l); @@ -911,6 +981,12 @@ TEST_F(LeaseCmdsTest, Lease4AddSubnetIdMissingBadAddr) { // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Now send the command without subnet-id. Kea should select // the subnet id on its own. string txt = @@ -925,6 +1001,12 @@ TEST_F(LeaseCmdsTest, Lease4AddSubnetIdMissingBadAddr) { "address 192.0.55.1"; testCommand(txt, CONTROL_RESULT_ERROR, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Now check that the lease was not added. Lease4Ptr l = lmptr_->getLease4(IOAddress("192.0.55.1")); ASSERT_FALSE(l); @@ -939,6 +1021,12 @@ TEST_F(LeaseCmdsTest, Lease4AddNegativeExpireTime) { // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Add a lease with negative expiration time. string txt = "{\n" @@ -952,6 +1040,12 @@ TEST_F(LeaseCmdsTest, Lease4AddNegativeExpireTime) { string exp_rsp = "expiration time must be positive for address 192.0.2.202"; testCommand(txt, CONTROL_RESULT_ERROR, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Now check that the lease was not added. Lease4Ptr l = lmptr_->getLease4(IOAddress("192.0.2.202")); ASSERT_FALSE(l); @@ -966,6 +1060,12 @@ TEST_F(LeaseCmdsTest, Lease4AddNegativeCltt) { // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Add a lease with negative cltt (expiration time - valid lifetime) string txt = "{\n" @@ -981,6 +1081,12 @@ TEST_F(LeaseCmdsTest, Lease4AddNegativeCltt) { "address 192.0.2.202"; testCommand(txt, CONTROL_RESULT_ERROR, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Now check that the lease was not added. Lease4Ptr l = lmptr_->getLease4(IOAddress("192.0.2.202")); ASSERT_FALSE(l); @@ -995,6 +1101,12 @@ TEST_F(LeaseCmdsTest, Lease4AddFull) { // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Now send the command. string txt = "{\n" @@ -1015,6 +1127,12 @@ TEST_F(LeaseCmdsTest, Lease4AddFull) { string exp_rsp = "Lease for address 192.0.2.202, subnet-id 44 added."; testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Now check that the lease is really there. Lease4Ptr l = lmptr_->getLease4(IOAddress("192.0.2.202")); ASSERT_TRUE(l); @@ -1041,6 +1159,12 @@ TEST_F(LeaseCmdsTest, Lease4AddComment) { // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Now send the command. string txt = "{\n" @@ -1055,6 +1179,12 @@ TEST_F(LeaseCmdsTest, Lease4AddComment) { string exp_rsp = "Lease for address 192.0.2.202, subnet-id 44 added."; testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Now check that the lease is really there. Lease4Ptr l = lmptr_->getLease4(IOAddress("192.0.2.202")); ASSERT_TRUE(l); @@ -1309,6 +1439,18 @@ TEST_F(LeaseCmdsTest, Lease6Add) { // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string txt = "{\n" @@ -1323,6 +1465,18 @@ TEST_F(LeaseCmdsTest, Lease6Add) { string exp_rsp = "Lease for address 2001:db8:1::3, subnet-id 66 added."; testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now check that the lease is really there. Lease6Ptr l = lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::3")); ASSERT_TRUE(l); @@ -1339,6 +1493,18 @@ TEST_F(LeaseCmdsTest, Lease6AddExisting) { // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string txt = "{\n" @@ -1352,6 +1518,18 @@ TEST_F(LeaseCmdsTest, Lease6AddExisting) { "}"; string exp_rsp = "IPv6 lease already exists."; testCommand(txt, CONTROL_RESULT_ERROR, exp_rsp); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); } // Check that subnet-id is optional. If not specified, Kea should select @@ -1364,6 +1542,18 @@ TEST_F(LeaseCmdsTest, Lease6AddSubnetIdMissing) { // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command (without subnet-id) string txt = "{\n" @@ -1377,6 +1567,18 @@ TEST_F(LeaseCmdsTest, Lease6AddSubnetIdMissing) { string exp_rsp = "Lease for address 2001:db8:1::3, subnet-id 66 added."; testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now check that the lease is really there and has correct subnet-id. Lease6Ptr l = lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::3")); ASSERT_TRUE(l); @@ -1394,6 +1596,18 @@ TEST_F(LeaseCmdsTest, Lease6AddSubnetIdMissingBadAddr) { // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command (without subnet-id) string txt = "{\n" @@ -1408,7 +1622,19 @@ TEST_F(LeaseCmdsTest, Lease6AddSubnetIdMissingBadAddr) { "address 2001:ffff::1"; testCommand(txt, CONTROL_RESULT_ERROR, exp_rsp); - // Now check that the lease is really there and has correct subnet-id. + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + + // Now check that the lease was not added. Lease6Ptr l = lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:ffff::1")); ASSERT_FALSE(l); } @@ -1422,6 +1648,18 @@ TEST_F(LeaseCmdsTest, Lease6AddPrefix) { // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string txt = "{\n" @@ -1438,6 +1676,18 @@ TEST_F(LeaseCmdsTest, Lease6AddPrefix) { string exp_rsp = "Lease for prefix 2001:db8:abcd::/48, subnet-id 66 added."; testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now check that the lease is really there. Lease6Ptr l = lmptr_->getLease6(Lease::TYPE_PD, IOAddress("2001:db8:abcd::")); ASSERT_TRUE(l); @@ -1456,6 +1706,18 @@ TEST_F(LeaseCmdsTest, Lease6AddFullAddr) { // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string txt = "{\n" @@ -1478,6 +1740,18 @@ TEST_F(LeaseCmdsTest, Lease6AddFullAddr) { string exp_rsp = "Lease for address 2001:db8:1::3, subnet-id 66 added."; testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now check that the lease is really there. Lease6Ptr l = lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::3")); ASSERT_TRUE(l); @@ -1505,6 +1779,18 @@ TEST_F(LeaseCmdsTest, Lease6AddComment) { // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string txt = "{\n" @@ -1520,6 +1806,18 @@ TEST_F(LeaseCmdsTest, Lease6AddComment) { string exp_rsp = "Lease for address 2001:db8:1::3, subnet-id 66 added."; testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now check that the lease is really there. Lease6Ptr l = lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::3")); ASSERT_TRUE(l); @@ -1609,9 +1907,12 @@ TEST_F(LeaseCmdsTest, Lease4GetMissingParams) { // Checks that lease4-get sanitizes its input. TEST_F(LeaseCmdsTest, Lease4GetByAddrBadParam) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Invalid family string cmd = "{\n" @@ -1639,9 +1940,12 @@ TEST_F(LeaseCmdsTest, Lease4GetByAddrBadParam) { // valid, but the lease is not there. TEST_F(LeaseCmdsTest, Lease4GetByAddrNotFound) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Invalid string cmd = "{\n" @@ -1658,9 +1962,12 @@ TEST_F(LeaseCmdsTest, Lease4GetByAddrNotFound) { // Checks that lease4-get can return a lease by address. TEST_F(LeaseCmdsTest, Lease4GetByAddr) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Query for valid, existing lease. string cmd = "{\n" @@ -1685,9 +1992,12 @@ TEST_F(LeaseCmdsTest, Lease4GetByAddr) { // well formed, but the lease is not there. TEST_F(LeaseCmdsTest, Lease4GetByHWAddrNotFound) { - // Initialize lease manager (false = v4, false = don't add a lease) + // Initialize lease manager (false = v4, false = don't add leases) initLeaseMgr(false, false); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // No such lease. string cmd = "{\n" @@ -1705,9 +2015,12 @@ TEST_F(LeaseCmdsTest, Lease4GetByHWAddrNotFound) { // Checks that lease4-get can find a lease by hardware address. TEST_F(LeaseCmdsTest, Lease4GetByHWAddr) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Invalid string cmd = "{\n" @@ -1734,9 +2047,12 @@ TEST_F(LeaseCmdsTest, Lease4GetByHWAddr) { // the query is correctly formed, but the lease is not there. TEST_F(LeaseCmdsTest, Lease6GetByAddr6NotFound) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Now send the command. string cmd = "{\n" @@ -1757,9 +2073,12 @@ TEST_F(LeaseCmdsTest, Lease6GetByAddr6NotFound) { // well formed, but the lease is not there. TEST_F(LeaseCmdsTest, Lease4GetByClientIdNotFound) { - // Initialize lease manager (false = v4, false = don't add a lease) + // Initialize lease manager (false = v4, false = don't add leases) initLeaseMgr(false, false); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // No such lease. string cmd = "{\n" @@ -1776,9 +2095,12 @@ TEST_F(LeaseCmdsTest, Lease4GetByClientIdNotFound) { // Check that lease4-get can find a lease by client identifier. TEST_F(LeaseCmdsTest, Lease4GetByClientId) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + string cmd = "{\n" " \"command\": \"lease4-get\",\n" @@ -1803,9 +2125,12 @@ TEST_F(LeaseCmdsTest, Lease4GetByClientId) { // Checks that lease6-get rejects queries by client-id. TEST_F(LeaseCmdsTest, Lease6GetByClientIdInvalidType) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // client-id query is allowed in v4 only. string cmd = "{\n" @@ -1823,9 +2148,12 @@ TEST_F(LeaseCmdsTest, Lease6GetByClientIdInvalidType) { // Checks that lease6-get(subnet-id, addr) can handle a situation when // the query is correctly formed, but the lease is not there. TEST_F(LeaseCmdsTest, Lease6GetByDuidNotFound) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Now send the command. string cmd = "{\n" @@ -1849,6 +2177,9 @@ TEST_F(LeaseCmdsTest, Lease6GetByAddr) { initLeaseMgr(true, true); // (true = v6, true = create a lease) + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Now send the command. string cmd = "{\n" @@ -1873,9 +2204,12 @@ TEST_F(LeaseCmdsTest, Lease6GetByAddr) { // Checks that lease6-get sanitizes its input. TEST_F(LeaseCmdsTest, Lease6GetByAddrBadParam) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Invalid family string cmd = "{\n" @@ -1906,6 +2240,9 @@ TEST_F(LeaseCmdsTest, Lease6GetByAddrPrefix) { // We need to get a prefix lease. We need to create it by hand. initLeaseMgr(true, false); // (true = v6, true = create a lease) + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Let's start with regular address lease and make it a prefix lease. Lease6Ptr l = createLease6("2001:db8:1::1", 66, 0x77); l->addr_ = IOAddress("2001:db8:1234:ab::"); @@ -1941,6 +2278,9 @@ TEST_F(LeaseCmdsTest, Lease6GetByDUID) { initLeaseMgr(true, true); // (true = v6, true = create a lease) + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Now send the command. string cmd = "{\n" @@ -1968,9 +2308,12 @@ TEST_F(LeaseCmdsTest, Lease6GetByDUID) { // Checks that lease4-get-all returns all leases. TEST_F(LeaseCmdsTest, Lease4GetAll) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Query for all leases. string cmd = "{\n" @@ -2003,6 +2346,9 @@ TEST_F(LeaseCmdsTest, Lease4GetAllNoLeases) { // Initialize lease manager (false = v4, false = do not add leasesxs) initLeaseMgr(false, false); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Query for all leases. string cmd = "{\n" @@ -2025,13 +2371,15 @@ TEST_F(LeaseCmdsTest, Lease4GetAllNoLeases) { EXPECT_EQ(0, leases->size()); } - // Checks that lease4-get-all returns all leases for a subnet. TEST_F(LeaseCmdsTest, Lease4GetAllBySubnetId) { // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Query for leases from subnet 44. Subnet 127 will be ignored because // it doesn't contain any leases. string cmd = @@ -2063,9 +2411,12 @@ TEST_F(LeaseCmdsTest, Lease4GetAllBySubnetId) { // Checks that lease4-get-all returns empty set when no leases are found. TEST_F(LeaseCmdsTest, Lease4GetAllBySubnetIdNoLeases) { - // Initialize lease manager (false = v4, true = do not add leases) + // Initialize lease manager (false = v4, false = don't add leases) initLeaseMgr(false, false); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Query for leases from subnet 44. Subnet 127 will be ignored because // it doesn't contain any leases. string cmd = @@ -2095,9 +2446,12 @@ TEST_F(LeaseCmdsTest, Lease4GetAllBySubnetIdNoLeases) { // Checks that lease4-get-all returns leases from multiple subnets. TEST_F(LeaseCmdsTest, Lease4GetAllByMultipleSubnetIds) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Query for leases from subnet 44 and 88. string cmd = "{\n" @@ -2130,9 +2484,12 @@ TEST_F(LeaseCmdsTest, Lease4GetAllByMultipleSubnetIds) { // Checks that lease4-get-all checks its input arguments. TEST_F(LeaseCmdsTest, Lease4GetBySubnetIdInvalidArguments) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Subnets not specified in arguments. string cmd = "{\n" @@ -2170,9 +2527,12 @@ TEST_F(LeaseCmdsTest, Lease4GetBySubnetIdInvalidArguments) { // Checks that multiple calls to lease4-get-pages return all leases. TEST_F(LeaseCmdsTest, Lease4GetPaged) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Gather all returned addresses to verify that all were returned. std::set lease_addresses; @@ -2263,9 +2623,12 @@ TEST_F(LeaseCmdsTest, Lease4GetPaged) { // zero IPv4 address. TEST_F(LeaseCmdsTest, Lease4GetPagedZeroAddress) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Query for a page of leases. string cmd = "{\n" @@ -2283,9 +2646,12 @@ TEST_F(LeaseCmdsTest, Lease4GetPagedZeroAddress) { // Verifies that IPv6 address as a start address is rejected. TEST_F(LeaseCmdsTest, Lease4GetPagedIPv4Address) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Query for a page of leases. string cmd = "{\n" @@ -2303,9 +2669,12 @@ TEST_F(LeaseCmdsTest, Lease4GetPagedIPv4Address) { // Checks that lease6-get-all returns all leases. TEST_F(LeaseCmdsTest, Lease6GetAll) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Query for all leases. string cmd = "{\n" @@ -2338,6 +2707,9 @@ TEST_F(LeaseCmdsTest, Lease6GetAllNoLeases) { // Initialize lease manager (true = v6, false = do not add leasesxs) initLeaseMgr(true, false); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Query for all leases. string cmd = "{\n" @@ -2360,13 +2732,15 @@ TEST_F(LeaseCmdsTest, Lease6GetAllNoLeases) { EXPECT_EQ(0, leases->size()); } - // Checks that lease6-get-all returns all leases for a subnet. TEST_F(LeaseCmdsTest, Lease6GetAllBySubnetId) { // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Query for leases from subnet 66. Subnet 127 will be ignored because // it doesn't contain any leases. string cmd = @@ -2398,9 +2772,12 @@ TEST_F(LeaseCmdsTest, Lease6GetAllBySubnetId) { // Checks that lease6-get-all returns empty set when no leases are found. TEST_F(LeaseCmdsTest, Lease6GetAllBySubnetIdNoLeases) { - // Initialize lease manager (true = v6, true = do not add leases) + // Initialize lease manager (true = v6, false = don't add leases) initLeaseMgr(true, false); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Query for leases from subnet 66. Subnet 127 will be ignored because // it doesn't contain any leases. string cmd = @@ -2430,9 +2807,12 @@ TEST_F(LeaseCmdsTest, Lease6GetAllBySubnetIdNoLeases) { // Checks that lease6-get-all returns leases from multiple subnets. TEST_F(LeaseCmdsTest, Lease6GetAllByMultipleSubnetIds) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Query for leases from subnet 66 and 99. string cmd = "{\n" @@ -2465,9 +2845,12 @@ TEST_F(LeaseCmdsTest, Lease6GetAllByMultipleSubnetIds) { // Checks that lease6-get-all checks its input arguments. TEST_F(LeaseCmdsTest, Lease6GetBySubnetIdInvalidArguments) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Subnets not specified in arguments. string cmd = "{\n" @@ -2505,9 +2888,12 @@ TEST_F(LeaseCmdsTest, Lease6GetBySubnetIdInvalidArguments) { // Checks that multiple calls to lease6-get-page return all leases. TEST_F(LeaseCmdsTest, Lease6GetPaged) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Gather all returned addresses to verify that all were returned. std::set lease_addresses; @@ -2599,9 +2985,12 @@ TEST_F(LeaseCmdsTest, Lease6GetPaged) { // zero IPv6 address. TEST_F(LeaseCmdsTest, Lease6GetPagedZeroAddress) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Query for a page of leases. string cmd = "{\n" @@ -2619,9 +3008,12 @@ TEST_F(LeaseCmdsTest, Lease6GetPagedZeroAddress) { // Verifies that IPv4 address as a start address is rejected. TEST_F(LeaseCmdsTest, Lease6GetPagedIPv4Address) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Query for a page of leases. string cmd = "{\n" @@ -2640,9 +3032,12 @@ TEST_F(LeaseCmdsTest, Lease6GetPagedIPv4Address) { // address is rejected. TEST_F(LeaseCmdsTest, Lease6GetPagedInvalidFrom) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Query for a page of leases. string cmd = "{\n" @@ -2661,9 +3056,12 @@ TEST_F(LeaseCmdsTest, Lease6GetPagedInvalidFrom) { // Verifies that limit is mandatory. TEST_F(LeaseCmdsTest, Lease6GetPagedNoLimit) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Query for a page of leases. string cmd = "{\n" @@ -2680,9 +3078,12 @@ TEST_F(LeaseCmdsTest, Lease6GetPagedNoLimit) { // Verifies that the limit must be a number. TEST_F(LeaseCmdsTest, Lease6GetPagedLimitNotNumber) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Query for a page of leases. string cmd = "{\n" @@ -2700,9 +3101,12 @@ TEST_F(LeaseCmdsTest, Lease6GetPagedLimitNotNumber) { // Verifies that the limit of 0 is rejected. TEST_F(LeaseCmdsTest, Lease6GetPagedLimitIsZero) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Query for a page of leases. string cmd = "{\n" @@ -2757,10 +3161,13 @@ TEST_F(LeaseCmdsTest, LeaseGetByHwAddressParams) { // Checks that lease4-get-by-hw-address works as expected (find no lease). TEST_F(LeaseCmdsTest, LeaseGetByHwAddressFind0) { - // Initialize lease manager (false = v4, false = don't add a lease) + // Initialize lease manager (false = v4, false = don't add leases) initLeaseMgr(false, false); - // No such leasea. + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + // No such lease. string cmd = "{\n" " \"command\": \"lease4-get-by-hw-address\",\n" @@ -2777,6 +3184,9 @@ TEST_F(LeaseCmdsTest, LeaseGetByHwAddressFind2) { // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Get the lease. string cmd = "{\n" @@ -2847,10 +3257,13 @@ TEST_F(LeaseCmdsTest, LeaseGetByClientIdParams) { // Checks that lease4-get-by-client-id works as expected (find no lease). TEST_F(LeaseCmdsTest, LeaseGetByClientIdFind0) { - // Initialize lease manager (false = v4, false = don't add a lease) + // Initialize lease manager (false = v4, false = don't add leases) initLeaseMgr(false, false); - // No such leasea. + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + // No such lease. string cmd = "{\n" " \"command\": \"lease4-get-by-client-id\",\n" @@ -2867,6 +3280,9 @@ TEST_F(LeaseCmdsTest, LeaseGetByClientIdFind2) { // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Get the lease. string cmd = "{\n" @@ -2937,13 +3353,16 @@ TEST_F(LeaseCmdsTest, LeaseGetByDuidParams) { // Checks that lease6-get-by-duid works as expected (find no lease). TEST_F(LeaseCmdsTest, LeaseGetByDuidFind0) { - // Initialize lease manager (true = v6, false = don't add a lease) + // Initialize lease manager (true = v6, false = don't add leases) initLeaseMgr(true, false); - // No such leasea. - string cmd = - "{\n" - " \"command\": \"lease6-get-by-duid\",\n" + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + // No such lease. + string cmd = + "{\n" + " \"command\": \"lease6-get-by-duid\",\n" " \"arguments\": {" " \"duid\": \"00:01:02:03:04:05:06:07\"\n" " }\n" @@ -2957,6 +3376,9 @@ TEST_F(LeaseCmdsTest, LeaseGetByDuidFind2) { // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Get the lease. string cmd = "{\n" @@ -3026,10 +3448,13 @@ TEST_F(LeaseCmdsTest, Lease4GetByHostnameParams) { // Checks that lease4-get-by-hostname works as expected (find no lease). TEST_F(LeaseCmdsTest, Lease4GetByHostnameFind0) { - // Initialize lease manager (false = v4, false = don't add a lease) + // Initialize lease manager (false = v4, false = don't add leases) initLeaseMgr(false, false); - // No such leasea. + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + // No such lease. string cmd = "{\n" " \"command\": \"lease4-get-by-hostname\",\n" @@ -3046,6 +3471,9 @@ TEST_F(LeaseCmdsTest, Lease4GetByHostnameFind2) { // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Get the lease. string cmd = "{\n" @@ -3115,10 +3543,13 @@ TEST_F(LeaseCmdsTest, Lease6GetByHostnameParams) { // Checks that lease6-get-by-hostname works as expected (find no lease). TEST_F(LeaseCmdsTest, Lease6GetByHostnameFind0) { - // Initialize lease manager (true = v6, false = don't add a lease) + // Initialize lease manager (true = v6, false = don't add leases) initLeaseMgr(true, false); - // No such leasea. + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + // No such lease. string cmd = "{\n" " \"command\": \"lease6-get-by-hostname\",\n" @@ -3135,6 +3566,9 @@ TEST_F(LeaseCmdsTest, Lease6GetByHostnameFind2) { // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Get the lease. string cmd = "{\n" @@ -3167,7 +3601,7 @@ TEST_F(LeaseCmdsTest, Lease6GetByHostnameFind2) { // Test checks if lease4-update handler refuses calls with missing parameters. TEST_F(LeaseCmdsTest, Lease4UpdateMissingParams) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); // Check that the lease manager pointer is there. @@ -3224,7 +3658,7 @@ TEST_F(LeaseCmdsTest, Lease4UpdateMissingParams) { // have incorrect values. TEST_F(LeaseCmdsTest, Lease4UpdateBadParams) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); // Check that the lease manager pointer is there. @@ -3305,7 +3739,7 @@ TEST_F(LeaseCmdsTest, Lease4UpdateBadParams) { // no lease to be updated. TEST_F(LeaseCmdsTest, Lease4UpdateNoLease) { - // Initialize lease manager (false = v4, false = don't add any lease) + // Initialize lease manager (false = v4, false = don't add leases) initLeaseMgr(false, false); // Check that the lease manager pointer is there. @@ -3330,12 +3764,18 @@ TEST_F(LeaseCmdsTest, Lease4UpdateNoLease) { // and a hostname. TEST_F(LeaseCmdsTest, Lease4Update) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Now send the command. string txt = "{\n" @@ -3350,6 +3790,59 @@ TEST_F(LeaseCmdsTest, Lease4Update) { string exp_rsp = "IPv4 lease updated."; testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + + // Now check that the lease is still there. + Lease4Ptr l = lmptr_->getLease4(IOAddress("192.0.2.1")); + ASSERT_TRUE(l); + + // Make sure it's been updated. + ASSERT_TRUE(l->hwaddr_); + EXPECT_EQ("1a:1b:1c:1d:1e:1f", l->hwaddr_->toText(false)); + EXPECT_EQ("newhostname.example.org", l->hostname_); + EXPECT_FALSE(l->getContext()); +} + +// Check that a lease4 can be updated. We're changing hw-address +// and a hostname. +TEST_F(LeaseCmdsTest, Lease4UpdateWithStats) { + + // Initialize lease manager (false = v4, true = add leases) + initLeaseMgr(false, true, true); + + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + + // Now send the command. + string txt = + "{\n" + " \"command\": \"lease4-update\",\n" + " \"arguments\": {" + " \"subnet-id\": 44,\n" + " \"ip-address\": \"192.0.2.1\",\n" + " \"hw-address\": \"1a:1b:1c:1d:1e:1f\",\n" + " \"hostname\": \"newhostname.example.org\"" + " }\n" + "}"; + string exp_rsp = "IPv4 lease updated."; + testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 3); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Now check that the lease is still there. Lease4Ptr l = lmptr_->getLease4(IOAddress("192.0.2.1")); ASSERT_TRUE(l); @@ -3365,12 +3858,18 @@ TEST_F(LeaseCmdsTest, Lease4Update) { // and a hostname. The subnet-id is not specified. TEST_F(LeaseCmdsTest, Lease4UpdateNoSubnetId) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Now send the command. string txt = "{\n" @@ -3384,6 +3883,58 @@ TEST_F(LeaseCmdsTest, Lease4UpdateNoSubnetId) { string exp_rsp = "IPv4 lease updated."; testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + + // Now check that the lease is still there. + Lease4Ptr l = lmptr_->getLease4(IOAddress("192.0.2.1")); + ASSERT_TRUE(l); + + // Make sure it's been updated. + ASSERT_TRUE(l->hwaddr_); + EXPECT_EQ("1a:1b:1c:1d:1e:1f", l->hwaddr_->toText(false)); + EXPECT_EQ("newhostname.example.org", l->hostname_); + EXPECT_FALSE(l->getContext()); +} + +// Check that a lease4 can be updated. We're changing hw-address +// and a hostname. The subnet-id is not specified. +TEST_F(LeaseCmdsTest, Lease4UpdateNoSubnetIdWithStats) { + + // Initialize lease manager (false = v4, true = add leases) + initLeaseMgr(false, true, true); + + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + + // Now send the command. + string txt = + "{\n" + " \"command\": \"lease4-update\",\n" + " \"arguments\": {" + " \"ip-address\": \"192.0.2.1\",\n" + " \"hw-address\": \"1a:1b:1c:1d:1e:1f\",\n" + " \"hostname\": \"newhostname.example.org\"" + " }\n" + "}"; + string exp_rsp = "IPv4 lease updated."; + testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 3); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Now check that the lease is still there. Lease4Ptr l = lmptr_->getLease4(IOAddress("192.0.2.1")); ASSERT_TRUE(l); @@ -3399,12 +3950,18 @@ TEST_F(LeaseCmdsTest, Lease4UpdateNoSubnetId) { // To trigger this behavior 'force-create' boolean parameter must be // included in the command. TEST_F(LeaseCmdsTest, Lease4UpdateForceCreate) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, false); // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Now send the command. string txt = "{\n" @@ -3420,6 +3977,12 @@ TEST_F(LeaseCmdsTest, Lease4UpdateForceCreate) { string exp_rsp = "IPv4 lease added."; testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Now check that the lease is still there. Lease4Ptr l = lmptr_->getLease4(IOAddress("192.0.2.1")); ASSERT_TRUE(l); @@ -3436,12 +3999,18 @@ TEST_F(LeaseCmdsTest, Lease4UpdateForceCreate) { // included in the command. The subnet-id is not specified, Kea will // figure it out. TEST_F(LeaseCmdsTest, Lease4UpdateForceCreateNoSubnetId) { - // Initialize lease manager (false = v4, false = don't add any lease) + // Initialize lease manager (false = v4, false = don't add leases) initLeaseMgr(false, false); // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Now send the command. string txt = "{\n" @@ -3456,6 +4025,12 @@ TEST_F(LeaseCmdsTest, Lease4UpdateForceCreateNoSubnetId) { string exp_rsp = "IPv4 lease added."; testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Now check that the lease is still there. Lease4Ptr l = lmptr_->getLease4(IOAddress("192.0.2.1")); ASSERT_TRUE(l); @@ -3474,12 +4049,18 @@ TEST_F(LeaseCmdsTest, Lease4UpdateForceCreateNoSubnetId) { // parameter is explicitly set to false. TEST_F(LeaseCmdsTest, Lease4UpdateDoNotForceCreate) { - // Initialize lease manager (false = v4, false = don't add any lease) + // Initialize lease manager (false = v4, false = don't add leases) initLeaseMgr(false, false); // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Now send the command. string txt = "{\n" @@ -3494,18 +4075,30 @@ TEST_F(LeaseCmdsTest, Lease4UpdateDoNotForceCreate) { "}"; string exp_rsp = "failed to update the lease with address 192.0.2.1 - no such lease"; testCommand(txt, CONTROL_RESULT_ERROR, exp_rsp); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); } // Check that a lease4 can be updated. We're adding a comment and an user // context. TEST_F(LeaseCmdsTest, Lease4UpdateComment) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Now send the command. string txt = "{\n" @@ -3521,6 +4114,12 @@ TEST_F(LeaseCmdsTest, Lease4UpdateComment) { string exp_rsp = "IPv4 lease updated."; testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Now check that the lease is still there. Lease4Ptr l = lmptr_->getLease4(IOAddress("192.0.2.1")); ASSERT_TRUE(l); @@ -3541,7 +4140,7 @@ TEST_F(LeaseCmdsTest, Lease4UpdateComment) { // Test checks if lease6-update handler refuses calls with missing parameters. TEST_F(LeaseCmdsTest, Lease6UpdateMissingParams) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); // Check that the lease manager pointer is there. @@ -3598,7 +4197,7 @@ TEST_F(LeaseCmdsTest, Lease6UpdateMissingParams) { // have incorrect values. TEST_F(LeaseCmdsTest, Lease6UpdateBadParams) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); // Check that the lease manager pointer is there. @@ -3698,12 +4297,85 @@ TEST_F(LeaseCmdsTest, Lease6UpdateBadParams) { // and a hostname. TEST_F(LeaseCmdsTest, Lease6Update) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + + // Now send the command. + string txt = + "{\n" + " \"command\": \"lease6-update\",\n" + " \"arguments\": {" + " \"subnet-id\": 66,\n" + " \"ip-address\": \"2001:db8:1::1\",\n" + " \"iaid\": 7654321,\n" + " \"duid\": \"88:88:88:88:88:88:88:88\",\n" + " \"hostname\": \"newhostname.example.org\"" + " }\n" + "}"; + string exp_rsp = "IPv6 lease updated."; + testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + + // Now check that the lease is really there. + Lease6Ptr l = lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::1")); + ASSERT_TRUE(l); + + // Make sure the lease has been updated. + ASSERT_TRUE(l->duid_); + EXPECT_EQ("88:88:88:88:88:88:88:88", l->duid_->toText()); + EXPECT_EQ("newhostname.example.org", l->hostname_); + EXPECT_EQ(7654321, l->iaid_); + EXPECT_FALSE(l->getContext()); +} + +// Check that a lease6 can be updated. We're changing hw-address +// and a hostname. +TEST_F(LeaseCmdsTest, Lease6UpdateWithStats) { + + // Initialize lease manager (true = v6, true = add leases) + initLeaseMgr(true, true, true); + + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string txt = "{\n" @@ -3719,6 +4391,18 @@ TEST_F(LeaseCmdsTest, Lease6Update) { string exp_rsp = "IPv6 lease updated."; testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 3); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now check that the lease is really there. Lease6Ptr l = lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::1")); ASSERT_TRUE(l); @@ -3735,12 +4419,24 @@ TEST_F(LeaseCmdsTest, Lease6Update) { // and a hostname. The subnet-id is not specified. TEST_F(LeaseCmdsTest, Lease6UpdateNoSubnetId) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string txt = "{\n" @@ -3755,6 +4451,18 @@ TEST_F(LeaseCmdsTest, Lease6UpdateNoSubnetId) { string exp_rsp = "IPv6 lease updated."; testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now check that the lease is really there. Lease6Ptr l = lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::1")); ASSERT_TRUE(l); @@ -3770,17 +4478,91 @@ TEST_F(LeaseCmdsTest, Lease6UpdateNoSubnetId) { EXPECT_FALSE(l->getContext()); } +// Check that a lease6 can be updated. We're changing hw-address +// and a hostname. The subnet-id is not specified. +TEST_F(LeaseCmdsTest, Lease6UpdateNoSubnetIdWithStats) { + + // Initialize lease manager (true = v6, true = add leases) + initLeaseMgr(true, true, true); + + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + + // Now send the command. + string txt = + "{\n" + " \"command\": \"lease6-update\",\n" + " \"arguments\": {" + " \"ip-address\": \"2001:db8:1::1\",\n" + " \"iaid\": 7654321,\n" + " \"duid\": \"88:88:88:88:88:88:88:88\",\n" + " \"hostname\": \"newhostname.example.org\"" + " }\n" + "}"; + string exp_rsp = "IPv6 lease updated."; + testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 3); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + + // Now check that the lease is really there. + Lease6Ptr l = lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::1")); + ASSERT_TRUE(l); + + // Make sure the subnet-id is correct. + EXPECT_EQ(66, l->subnet_id_); + + // Make sure the lease has been updated. + ASSERT_TRUE(l->duid_); + EXPECT_EQ("88:88:88:88:88:88:88:88", l->duid_->toText()); + EXPECT_EQ("newhostname.example.org", l->hostname_); + EXPECT_EQ(7654321, l->iaid_); + EXPECT_FALSE(l->getContext()); +} // Check that a lease6 can be updated. We're adding a comment and an user // context. TEST_F(LeaseCmdsTest, Lease6UpdateComment) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string txt = "{\n" @@ -3797,6 +4579,18 @@ TEST_F(LeaseCmdsTest, Lease6UpdateComment) { string exp_rsp = "IPv6 lease updated."; testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now check that the lease is really there. Lease6Ptr l = lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::1")); ASSERT_TRUE(l); @@ -3814,17 +4608,28 @@ TEST_F(LeaseCmdsTest, Lease6UpdateComment) { EXPECT_EQ("true", ctx->get("foobar")->str()); } - // Check that lease6-update correctly handles case when there is // no lease to be updated. TEST_F(LeaseCmdsTest, Lease6UpdateNoLease) { - // Initialize lease manager (true = v6, false = don't add any lease) + // Initialize lease manager (true = v6, false = don't add leases) initLeaseMgr(true, false); // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string txt = "{\n" @@ -3839,6 +4644,18 @@ TEST_F(LeaseCmdsTest, Lease6UpdateNoLease) { "}"; string exp_rsp = "failed to update the lease with address 2001:db8:1::1 - no such lease"; testCommand(txt, CONTROL_RESULT_ERROR, exp_rsp); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); } // Check that a lease6 is created if it doesn't exist during the update. @@ -3846,12 +4663,24 @@ TEST_F(LeaseCmdsTest, Lease6UpdateNoLease) { // included in the command. TEST_F(LeaseCmdsTest, Lease6UpdateForceCreate) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, false); // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string txt = "{\n" @@ -3868,6 +4697,18 @@ TEST_F(LeaseCmdsTest, Lease6UpdateForceCreate) { string exp_rsp = "IPv6 lease added."; testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now check that the lease is really there. Lease6Ptr l = lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::1")); ASSERT_TRUE(l); @@ -3886,12 +4727,24 @@ TEST_F(LeaseCmdsTest, Lease6UpdateForceCreate) { // figure it out. TEST_F(LeaseCmdsTest, Lease6UpdateForceCreateNoSubnetId) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, false); // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string txt = "{\n" @@ -3907,6 +4760,18 @@ TEST_F(LeaseCmdsTest, Lease6UpdateForceCreateNoSubnetId) { string exp_rsp = "IPv6 lease added."; testCommand(txt, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now check that the lease is really there. Lease6Ptr l = lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::1")); ASSERT_TRUE(l); @@ -3926,12 +4791,24 @@ TEST_F(LeaseCmdsTest, Lease6UpdateForceCreateNoSubnetId) { // parameter is explicitly set to false. TEST_F(LeaseCmdsTest, Lease6UpdateDoNotForceCreate) { - // Initialize lease manager (true = v6, false = don't add any lease) + // Initialize lease manager (true = v6, false = don't add leases) initLeaseMgr(true, false); // Check that the lease manager pointer is there. ASSERT_TRUE(lmptr_); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string txt = "{\n" @@ -3947,6 +4824,18 @@ TEST_F(LeaseCmdsTest, Lease6UpdateDoNotForceCreate) { "}"; string exp_rsp = "failed to update the lease with address 2001:db8:1::1 - no such lease"; testCommand(txt, CONTROL_RESULT_ERROR, exp_rsp); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); } // Checks that lease6-del can handle a situation when the query is @@ -4030,9 +4919,18 @@ TEST_F(LeaseCmdsTest, Lease4DelMissingParams) { // valid, but the lease is not there. TEST_F(LeaseCmdsTest, Lease4DelByAddrNotFound) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Invalid string cmd = "{\n" @@ -4044,14 +4942,29 @@ TEST_F(LeaseCmdsTest, Lease4DelByAddrNotFound) { "}"; string exp_rsp = "IPv4 lease not found."; ConstElementPtr rsp = testCommand(cmd, CONTROL_RESULT_EMPTY, exp_rsp); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); } // Checks that lease4-del can return a lease by address. TEST_F(LeaseCmdsTest, Lease4DelByAddr) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Query for valid, existing lease. string cmd = "{\n" @@ -4063,6 +4976,12 @@ TEST_F(LeaseCmdsTest, Lease4DelByAddr) { string exp_rsp = "IPv4 lease deleted."; testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Make sure the lease is really gone. EXPECT_FALSE(lmptr_->getLease4(IOAddress("192.0.2.1"))); } @@ -4098,9 +5017,18 @@ TEST_F(LeaseCmdsTest, LeaseXDelBadUpdateDdnsParam) { // Checks that lease4-del sanitizes its input. TEST_F(LeaseCmdsTest, Lease4DelByAddrBadParam) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Invalid family string cmd = "{\n" @@ -4112,6 +5040,12 @@ TEST_F(LeaseCmdsTest, Lease4DelByAddrBadParam) { string exp_rsp = "Invalid IPv4 address specified: 2001:db8:1::1"; testCommand(cmd, CONTROL_RESULT_ERROR, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // This is way off cmd = "{\n" @@ -4128,9 +5062,18 @@ TEST_F(LeaseCmdsTest, Lease4DelByAddrBadParam) { // well formed, but the lease is not there. TEST_F(LeaseCmdsTest, Lease4DelByHWAddrNotFound) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // No such lease. string cmd = "{\n" @@ -4144,6 +5087,12 @@ TEST_F(LeaseCmdsTest, Lease4DelByHWAddrNotFound) { string exp_rsp = "IPv4 lease not found."; ConstElementPtr rsp = testCommand(cmd, CONTROL_RESULT_EMPTY, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Make sure the lease is still there. EXPECT_TRUE(lmptr_->getLease4(IOAddress("192.0.2.1"))); } @@ -4151,9 +5100,18 @@ TEST_F(LeaseCmdsTest, Lease4DelByHWAddrNotFound) { // Checks that lease4-del can find a lease by hardware address. TEST_F(LeaseCmdsTest, Lease4DelByHWAddr) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Invalid string cmd = "{\n" @@ -4167,6 +5125,12 @@ TEST_F(LeaseCmdsTest, Lease4DelByHWAddr) { string exp_rsp = "IPv4 lease deleted."; ConstElementPtr rsp = testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Make sure the lease is really gone. EXPECT_FALSE(lmptr_->getLease4(IOAddress("192.0.2.1"))); } @@ -4175,9 +5139,18 @@ TEST_F(LeaseCmdsTest, Lease4DelByHWAddr) { // well formed, but the lease is not there. TEST_F(LeaseCmdsTest, Lease4DelByClientIdNotFound) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // No such lease. string cmd = "{\n" @@ -4191,15 +5164,30 @@ TEST_F(LeaseCmdsTest, Lease4DelByClientIdNotFound) { string exp_rsp = "IPv4 lease not found."; ConstElementPtr rsp = testCommand(cmd, CONTROL_RESULT_EMPTY, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Make sure the lease is still there. EXPECT_TRUE(lmptr_->getLease4(IOAddress("192.0.2.1"))); } // Checks that lease4-del can find and delete a lease by client identifier. TEST_F(LeaseCmdsTest, Lease4DelByClientId) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Invalid string cmd = "{\n" @@ -4213,6 +5201,12 @@ TEST_F(LeaseCmdsTest, Lease4DelByClientId) { string exp_rsp = "IPv4 lease deleted."; ConstElementPtr rsp = testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Make sure the lease is really gone. EXPECT_FALSE(lmptr_->getLease4(IOAddress("192.0.2.1"))); } @@ -4221,9 +5215,24 @@ TEST_F(LeaseCmdsTest, Lease4DelByClientId) { // the query is correctly formed, but the lease is not there. TEST_F(LeaseCmdsTest, Lease6DelByAddr6NotFound) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string cmd = "{\n" @@ -4238,15 +5247,42 @@ TEST_F(LeaseCmdsTest, Lease6DelByAddr6NotFound) { // Note the status expected is empty. The query completed correctly, // just didn't found the lease. testCommand(cmd, CONTROL_RESULT_EMPTY, exp_rsp); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); } // Checks that lease6-del(subnet-id, addr) can handle a situation when // the query is correctly formed, but the lease is not there. TEST_F(LeaseCmdsTest, Lease6DelByDuidNotFound) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string cmd = "{\n" @@ -4263,6 +5299,18 @@ TEST_F(LeaseCmdsTest, Lease6DelByDuidNotFound) { // just didn't found the lease. testCommand(cmd, CONTROL_RESULT_EMPTY, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Make sure the lease is still there. EXPECT_TRUE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::1"))); } @@ -4273,6 +5321,21 @@ TEST_F(LeaseCmdsTest, Lease6DelByAddr) { initLeaseMgr(true, true); // (true = v6, true = create a lease) + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string cmd = "{\n" @@ -4287,6 +5350,18 @@ TEST_F(LeaseCmdsTest, Lease6DelByAddr) { // The status expected is success. The lease should be deleted. testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Make sure the lease is really gone. EXPECT_FALSE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::1"))); } @@ -4294,9 +5369,12 @@ TEST_F(LeaseCmdsTest, Lease6DelByAddr) { // Checks that lease6-del sanitizes its input. TEST_F(LeaseCmdsTest, Lease6DelByAddrBadParam) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Invalid family string cmd = "{\n" @@ -4324,7 +5402,22 @@ TEST_F(LeaseCmdsTest, Lease6DelByAddrBadParam) { // the query is correctly formed and the lease is deleted. TEST_F(LeaseCmdsTest, Lease6DelByAddrPrefix) { - initLeaseMgr(true, false); // (true = v6, false = don't add any leases) + initLeaseMgr(true, false); // (true = v6, false = don't add leases) + + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); // Let's start with regular address lease and make it a prefix lease. Lease6Ptr l = createLease6("2001:db8:1::1", 66, 0x77); @@ -4333,6 +5426,22 @@ TEST_F(LeaseCmdsTest, Lease6DelByAddrPrefix) { l->prefixlen_ = 56; lmptr_->addLease(l); + StatsMgr::instance().setValue(StatsMgr::generateName("subnet", 66, + "assigned-pds" ), + int64_t(1)); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string cmd = "{\n" @@ -4347,6 +5456,18 @@ TEST_F(LeaseCmdsTest, Lease6DelByAddrPrefix) { // The status expected is success. The lease should be deleted. testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Make sure the lease is really gone. EXPECT_FALSE(lmptr_->getLease6(Lease::TYPE_PD, IOAddress("2001:db8:1234:ab::"))); } @@ -4357,6 +5478,21 @@ TEST_F(LeaseCmdsTest, Lease6DelByDUID) { initLeaseMgr(true, true); // (true = v6, true = create a lease) + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string cmd = "{\n" @@ -4373,6 +5509,18 @@ TEST_F(LeaseCmdsTest, Lease6DelByDUID) { // The status expected is success. The lease should be deleted. testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Make sure the lease is really gone. EXPECT_FALSE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::1"))); } @@ -4380,9 +5528,18 @@ TEST_F(LeaseCmdsTest, Lease6DelByDUID) { // Checks that lease4-wipe can remove leases. TEST_F(LeaseCmdsTest, Lease4Wipe) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Query for valid, existing lease. string cmd = "{\n" @@ -4394,6 +5551,12 @@ TEST_F(LeaseCmdsTest, Lease4Wipe) { string exp_rsp = "Deleted 2 IPv4 lease(s) from subnet(s) 44"; testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // 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"))); @@ -4407,9 +5570,18 @@ TEST_F(LeaseCmdsTest, Lease4Wipe) { // at once. TEST_F(LeaseCmdsTest, Lease4WipeAll) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Query for valid, existing lease. string cmd = "{\n" @@ -4421,6 +5593,12 @@ TEST_F(LeaseCmdsTest, Lease4WipeAll) { string exp_rsp = "Deleted 4 IPv4 lease(s) from subnet(s) 44 88"; testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // 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"))); @@ -4434,9 +5612,18 @@ TEST_F(LeaseCmdsTest, Lease4WipeAll) { // at once (when no parameters are specifed). TEST_F(LeaseCmdsTest, Lease4WipeAllNoArgs) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 2); + // Query for valid, existing lease. string cmd = "{\n" @@ -4445,6 +5632,12 @@ TEST_F(LeaseCmdsTest, Lease4WipeAllNoArgs) { string exp_rsp = "Deleted 4 IPv4 lease(s) from subnet(s) 44 88"; testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // 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"))); @@ -4457,9 +5650,18 @@ TEST_F(LeaseCmdsTest, Lease4WipeAllNoArgs) { // Checks that lease4-wipe properly reports when no leases were deleted. TEST_F(LeaseCmdsTest, Lease4WipeNoLeases) { - // Initialize lease manager (false = v4, false = no leases) + // Initialize lease manager (false = v4, false = don't add leases) initLeaseMgr(false, false); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Query for valid, existing lease. string cmd = "{\n" @@ -4470,14 +5672,29 @@ TEST_F(LeaseCmdsTest, Lease4WipeNoLeases) { "}"; string exp_rsp = "Deleted 0 IPv4 lease(s) from subnet(s) 44"; testCommand(cmd, CONTROL_RESULT_EMPTY, exp_rsp); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); } // Checks that lease4-wipe properly reports when no leases were deleted. TEST_F(LeaseCmdsTest, Lease4WipeNoLeasesAll) { - // Initialize lease manager (false = v4, false = no leases) + // Initialize lease manager (false = v4, false = don't add leases) initLeaseMgr(false, false); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); + // Query for valid, existing lease. string cmd = "{\n" @@ -4488,6 +5705,12 @@ TEST_F(LeaseCmdsTest, Lease4WipeNoLeasesAll) { "}"; string exp_rsp = "Deleted 0 IPv4 lease(s) from subnet(s) 44 88"; testCommand(cmd, CONTROL_RESULT_EMPTY, exp_rsp); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 44, "assigned-addresses"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 88, "assigned-addresses"))->getInteger().first, 0); } // Checks that lease4-wipe can remove leases. @@ -4495,6 +5718,21 @@ TEST_F(LeaseCmdsTest, Lease6Wipe) { initLeaseMgr(true, true); // (true = v6, true = create a lease) + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string cmd = "{\n" @@ -4508,11 +5746,23 @@ TEST_F(LeaseCmdsTest, Lease6Wipe) { // 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. + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + + // Make sure the leases in subnet 66 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. + // Make sure the leases from subnet 99 are 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"))); } @@ -4522,6 +5772,21 @@ TEST_F(LeaseCmdsTest, Lease6WipeAll) { initLeaseMgr(true, true); // (true = v6, true = create a lease) + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string cmd = "{\n" @@ -4535,11 +5800,23 @@ TEST_F(LeaseCmdsTest, Lease6WipeAll) { // 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. + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + + // Make sure the leases in subnet 66 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. + // Make sure the leases from subnet 99 are gone, too. EXPECT_FALSE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:2::1"))); EXPECT_FALSE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:2::2"))); } @@ -4550,6 +5827,21 @@ TEST_F(LeaseCmdsTest, Lease6WipeAllNoArgs) { initLeaseMgr(true, true); // (true = v6, true = create a lease) + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string cmd = "{\n" @@ -4560,11 +5852,23 @@ TEST_F(LeaseCmdsTest, Lease6WipeAllNoArgs) { // 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. + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + + // Make sure the leases in subnet 66 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. + // Make sure the leases from subnet 99 are gone, too. EXPECT_FALSE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:2::1"))); EXPECT_FALSE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:2::2"))); } @@ -4572,9 +5876,24 @@ TEST_F(LeaseCmdsTest, Lease6WipeAllNoArgs) { // Checks that lease4-wipe properly reports when no leases were deleted. TEST_F(LeaseCmdsTest, Lease6WipeNoLeases) { - // Initialize lease manager (false = v4, false = no leases) + // Initialize lease manager (false = v4, false = don't add leases) initLeaseMgr(true, false); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Query for valid, existing lease. string cmd = "{\n" @@ -4585,14 +5904,41 @@ TEST_F(LeaseCmdsTest, Lease6WipeNoLeases) { "}"; string exp_rsp = "Deleted 0 IPv6 lease(s) from subnet(s) 66"; testCommand(cmd, CONTROL_RESULT_EMPTY, exp_rsp); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); } // Checks that lease4-wipe properly reports when no leases were deleted. TEST_F(LeaseCmdsTest, Lease6WipeNoLeasesAll) { - // Initialize lease manager (false = v4, false = no leases) + // Initialize lease manager (false = v4, false = don't add leases) initLeaseMgr(true, false); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Query for valid, existing lease. string cmd = "{\n" @@ -4603,6 +5949,18 @@ TEST_F(LeaseCmdsTest, Lease6WipeNoLeasesAll) { "}"; string exp_rsp = "Deleted 0 IPv6 lease(s) from subnet(s) 66 99"; testCommand(cmd, CONTROL_RESULT_EMPTY, exp_rsp); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); } // Checks that an attempt to update a lease (set incorrect subnet-id) @@ -4612,13 +5970,13 @@ TEST_F(LeaseCmdsTest, brokenUpdate) { // Initialize lease manager (false = v4, false = don't add leases) initLeaseMgr(false, false); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Set the sanity checks level. CfgMgr::instance().getCurrentCfg()->getConsistency() ->setLeaseSanityCheck(CfgConsistency::LEASE_CHECK_FIX); - // Check that the lease manager pointer is there. - ASSERT_TRUE(lmptr_); - // Now send the command. string txt = "{\n" @@ -4641,6 +5999,21 @@ TEST_F(LeaseCmdsTest, Lease6BulkApply) { initLeaseMgr(true, true); // (true = v6, true = create leases) + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string cmd = "{\n" @@ -4677,7 +6050,19 @@ TEST_F(LeaseCmdsTest, Lease6BulkApply) { // The status expected is success. testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp); - // Check that the leases we inserted are stored. + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 3); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + + // Check that the leases we inserted are stored. EXPECT_TRUE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::123"))); EXPECT_TRUE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:2::123"))); @@ -4727,6 +6112,21 @@ TEST_F(LeaseCmdsTest, Lease6BulkApplyAddsOnly) { initLeaseMgr(true, false); // (true = v6, true = create leases) + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string cmd = "{\n" @@ -4753,7 +6153,19 @@ TEST_F(LeaseCmdsTest, Lease6BulkApplyAddsOnly) { // The status expected is success. testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp); - // Check that the leases we inserted are stored. + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 1); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + + // Check that the leases we inserted are stored. EXPECT_TRUE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::123"))); EXPECT_TRUE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:2::123"))); } @@ -4810,6 +6222,21 @@ TEST_F(LeaseCmdsTest, Lease6BulkApplyUpdatesOnly) { initLeaseMgr(true, true); // (true = v6, true = create leases) + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string cmd = "{\n" @@ -4836,7 +6263,19 @@ TEST_F(LeaseCmdsTest, Lease6BulkApplyUpdatesOnly) { // The status expected is success. testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp); - // Check that the leases we inserted are stored. + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + + // Check that the leases we inserted are stored. Lease6Ptr lease1 = lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::1")); Lease6Ptr lease2 = lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::2")); ASSERT_TRUE(lease1); @@ -4853,6 +6292,21 @@ TEST_F(LeaseCmdsTest, Lease6BulkApplyDeletesOnly) { initLeaseMgr(true, true); // (true = v6, true = create leases) + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string cmd = "{\n" @@ -4875,6 +6329,18 @@ TEST_F(LeaseCmdsTest, Lease6BulkApplyDeletesOnly) { // The status expected is success. testCommand(cmd, CONTROL_RESULT_SUCCESS, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Check that the leases we deleted are 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"))); @@ -4886,6 +6352,21 @@ TEST_F(LeaseCmdsTest, Lease6BulkApplyDeleteNonExiting) { initLeaseMgr(true, true); // (true = v6, true = create leases) + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string cmd = "{\n" @@ -4910,6 +6391,18 @@ TEST_F(LeaseCmdsTest, Lease6BulkApplyDeleteNonExiting) { ASSERT_TRUE(resp); ASSERT_EQ(Element::map, resp->getType()); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + auto args = resp->get("arguments"); ASSERT_TRUE(args); ASSERT_EQ(Element::map, args->getType()); @@ -4938,6 +6431,21 @@ TEST_F(LeaseCmdsTest, Lease6BulkApplyRollback) { initLeaseMgr(true, true); // (true = v6, true = create leases) + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + // Now send the command. string cmd = "{\n" @@ -4974,6 +6482,18 @@ TEST_F(LeaseCmdsTest, Lease6BulkApplyRollback) { // The status expected is success. testCommand(cmd, CONTROL_RESULT_ERROR, exp_rsp); + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 66, "assigned-pds"))->getInteger().first, 0); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-nas"))->getInteger().first, 2); + + ASSERT_EQ(StatsMgr::instance().getObservation(StatsMgr::generateName("subnet", + 99, "assigned-pds"))->getInteger().first, 0); + EXPECT_FALSE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:1::123"))); EXPECT_FALSE(lmptr_->getLease6(Lease::TYPE_NA, IOAddress("2001:db8:2::123"))); @@ -4983,9 +6503,12 @@ TEST_F(LeaseCmdsTest, Lease6BulkApplyRollback) { // Checks that lease4-resend-ddns sanitizes its input. TEST_F(LeaseCmdsTest, Lease4ResendDdnsBadParam) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Missing address parameter. string cmd = "{\n" @@ -5025,8 +6548,12 @@ TEST_F(LeaseCmdsTest, Lease4ResendDdnsBadParam) { // Checks that lease4-resend-ddns does not generate an NCR for given lease // when DDNS updating is disabled. TEST_F(LeaseCmdsTest, lease4ResendDdnsDisabled) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + disableD2(); // Query for valid, existing lease. @@ -5044,13 +6571,15 @@ TEST_F(LeaseCmdsTest, lease4ResendDdnsDisabled) { EXPECT_EQ(ncrQueueSize(), -1); } - // Checks that lease4-resend-ddns does not generate an NCR for // when there is no matching lease. TEST_F(LeaseCmdsTest, lease4ResendDdnsNoLease) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Invalid string cmd = "{\n" @@ -5066,9 +6595,12 @@ TEST_F(LeaseCmdsTest, lease4ResendDdnsNoLease) { // Checks that lease4-resend-ddns does not generate an NCR for given lease // when updates are enabled but Lease::hostname_ is blank. TEST_F(LeaseCmdsTest, lease4ResendNoHostname) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // NCR sender queue should be empty. ASSERT_EQ(ncrQueueSize(), 0); @@ -5098,9 +6630,12 @@ TEST_F(LeaseCmdsTest, lease4ResendNoHostname) { // when updates are enabled, Lease::hostname_ is not blank, but both // Lease::fqdn_fwd_ and fdqn_rev_ are false. TEST_F(LeaseCmdsTest, lease4ResendNoDirectionsEnabled) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // NCR sender queue should be empty. ASSERT_EQ(ncrQueueSize(), 0); @@ -5131,9 +6666,12 @@ TEST_F(LeaseCmdsTest, lease4ResendNoDirectionsEnabled) { // when updates are enabled, Lease::hostname_ is not blank, and at least // one of Lease::fqdn_fwd_ or fdqn_rev_ are true. TEST_F(LeaseCmdsTest, lease4ResendDdnsEnabled) { - // Initialize lease manager (false = v4, true = add a lease) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Structure detailing a test scenario. struct Scenario { std::string description_; @@ -5183,9 +6721,12 @@ TEST_F(LeaseCmdsTest, lease4ResendDdnsEnabled) { // Checks that lease6-resend-ddns sanitizes its input. TEST_F(LeaseCmdsTest, Lease6ResendDdnsBadParam) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Missing address parameter. string cmd = "{\n" @@ -5225,9 +6766,12 @@ TEST_F(LeaseCmdsTest, Lease6ResendDdnsBadParam) { // Checks that lease6-resend-ddns does not generate an NCR for given lease // when DDNS updating is disabled. TEST_F(LeaseCmdsTest, lease6ResendDdnsDisabled) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Disable DDNS updating. disableD2(); @@ -5249,9 +6793,12 @@ TEST_F(LeaseCmdsTest, lease6ResendDdnsDisabled) { // Checks that lease6-resend-ddns does not generate an NCR for // when there is no matching lease. TEST_F(LeaseCmdsTest, lease6ResendDdnsNoLease) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Invalid string cmd = "{\n" @@ -5264,13 +6811,15 @@ TEST_F(LeaseCmdsTest, lease6ResendDdnsNoLease) { ConstElementPtr rsp = testCommand(cmd, CONTROL_RESULT_EMPTY, exp_rsp); } - // Checks that lease6-resend-ddns does not generate an NCR for given lease // when updates are enabled but Lease::hostname_ is blank. TEST_F(LeaseCmdsTest, lease6ResendNoHostname) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // NCR sender queue should be empty. ASSERT_EQ(ncrQueueSize(), 0); @@ -5300,9 +6849,12 @@ TEST_F(LeaseCmdsTest, lease6ResendNoHostname) { // when updates are enabled, Lease::hostname_ is not blank, but both // Lease::fqdn_fwd_ and fdqn_rev_ are false. TEST_F(LeaseCmdsTest, lease6ResendNoDirectionsEnabled) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // NCR sender queue should be empty. ASSERT_EQ(ncrQueueSize(), 0); @@ -5333,9 +6885,12 @@ TEST_F(LeaseCmdsTest, lease6ResendNoDirectionsEnabled) { // when updates are enabled, Lease::hostname_ is not blank, and at least // one of Lease::fqdn_fwd_ or fdqn_rev_ are true. TEST_F(LeaseCmdsTest, lease6ResendDdnsEnabled) { - // Initialize lease manager (true = v6, true = add a lease) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Structure detailing a test scenario. struct Scenario { std::string description_; @@ -5386,9 +6941,12 @@ TEST_F(LeaseCmdsTest, lease6ResendDdnsEnabled) { // Checks that lease4-del does (or does not) generate an NCR to remove // DNS for a given lease based on lease content when DDNS updates are enabled. TEST_F(LeaseCmdsTest, lease4DnsRemoveD2Enabled) { - // Initialize lease manager (false = v4, true = leases) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(false, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Structure detailing a test scenario. struct Scenario { std::string description_; @@ -5506,8 +7064,12 @@ TEST_F(LeaseCmdsTest, lease4DnsRemoveD2Enabled) { // DNS for a given lease based on lease content when DDNS // updates are disabled. TEST_F(LeaseCmdsTest, lease4DnsRemoveD2Disabled) { - // Initialize lease manager (false = v4, true = leases) + // Initialize lease manager (false = v4, true = add leases) initLeaseMgr(true, true); + + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + disableD2(); // Delete for valid, existing lease. @@ -5545,9 +7107,12 @@ TEST_F(LeaseCmdsTest, lease4DnsRemoveD2Disabled) { // Checks that lease6-del does (or does not) generate an NCR to remove // DNS for a given lease based on lease content when DDNS updates are enabled. TEST_F(LeaseCmdsTest, lease6DnsRemoveD2Enabled) { - // Initialize lease manager (true = v6, false = no leases) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + // Structure detailing a test scenario. struct Scenario { std::string description_; @@ -5665,8 +7230,12 @@ TEST_F(LeaseCmdsTest, lease6DnsRemoveD2Enabled) { // DNS for a given lease based on lease content when DDNS // updates are disabled. TEST_F(LeaseCmdsTest, lease6DnsRemoveD2Disabled) { - // Initialize lease manager (true = v6, true = leases) + // Initialize lease manager (true = v6, true = add leases) initLeaseMgr(true, true); + + // Check that the lease manager pointer is there. + ASSERT_TRUE(lmptr_); + disableD2(); // Delete for valid, existing lease. diff --git a/src/lib/dhcpsrv/alloc_engine.cc b/src/lib/dhcpsrv/alloc_engine.cc index a1a709b0e7..08217247f7 100644 --- a/src/lib/dhcpsrv/alloc_engine.cc +++ b/src/lib/dhcpsrv/alloc_engine.cc @@ -1072,7 +1072,6 @@ AllocEngine::allocateUnreservedLeases6(ClientContext6& ctx) { continue; } - // there's no existing lease for selected candidate, so it is // free. Let's allocate it. @@ -3838,7 +3837,8 @@ AllocEngine::renewLease4(const Lease4Ptr& lease, LeaseMgrFactory::instance().updateLease4(lease); // We need to account for the re-assignment of The lease. - if (ctx.old_lease_->expired() || ctx.old_lease_->state_ == Lease::STATE_EXPIRED_RECLAIMED) { + if (ctx.old_lease_->checkUpdateStats()) { + StatsMgr::instance().addValue( StatsMgr::generateName("subnet", ctx.subnet_->getID(), "assigned-addresses"), @@ -4257,7 +4257,6 @@ AllocEngine::updateLease6ExtendedInfo(const Lease6Ptr& lease, lease->setContext(user_context); } - bool AllocEngine::conditionalExtendLifetime(Lease& lease) const { lease.cltt_ = time(NULL); diff --git a/src/lib/dhcpsrv/lease.cc b/src/lib/dhcpsrv/lease.cc index c9c8ba9699..542a74b9a5 100644 --- a/src/lib/dhcpsrv/lease.cc +++ b/src/lib/dhcpsrv/lease.cc @@ -130,6 +130,11 @@ Lease::hasIdenticalFqdn(const Lease& other) const { fqdn_rev_ == other.fqdn_rev_); } +bool +Lease::checkUpdateStats() const { + return (expired() || stateExpiredReclaimed()); +} + void Lease::fromElementCommon(const LeasePtr& lease, const data::ConstElementPtr& element) { if (!element) { diff --git a/src/lib/dhcpsrv/lease.h b/src/lib/dhcpsrv/lease.h index a9e27fd023..52c7a716b4 100644 --- a/src/lib/dhcpsrv/lease.h +++ b/src/lib/dhcpsrv/lease.h @@ -227,6 +227,12 @@ struct Lease : public isc::data::UserContext, public isc::data::CfgToElement { /// @param probation_period lease lifetime will be set to this value virtual void decline(uint32_t probation_period) = 0; + /// @brief Check lease for expiration or reclaimed state. + /// + /// @return true if the lease is expired or in reclaimed state, false + /// otherwise. + bool checkUpdateStats() const; + /// Avoid a clang spurious error using isc::data::CfgToElement::toElement;