using namespace isc::data;
using namespace isc::dhcp;
using namespace isc::dhcp::test;
+using namespace isc::stats;
namespace {
ASSERT_EQ(DHCPACK, static_cast<int>(clientB.getContext().response_->getType()));
IOAddress client_b_addr = clientB.config_.lease_.addr_;
ASSERT_NE(client_b_addr, in_pool_addr);
+ // Ensure stats are being recorded for HR conflicts
+ ObservationPtr subnet_conflicts = StatsMgr::instance().getObservation(
+ "subnet[1].reservation-conflicts");
+ ASSERT_TRUE(subnet_conflicts);
+ ASSERT_EQ(1, subnet_conflicts->getInteger().first);
+ subnet_conflicts = StatsMgr::instance().getObservation("v4-reservation-conflicts");
+ ASSERT_TRUE(subnet_conflicts);
+ ASSERT_EQ(1, subnet_conflicts->getInteger().first);
// Client A renews the lease.
client.setState(Dhcp4Client::RENEWING);
ASSERT_EQ(DHCPACK, static_cast<int>(clientB.getContext().response_->getType()));
ASSERT_NE(clientB.config_.lease_.addr_, in_pool_addr);
ASSERT_EQ(client_b_addr, clientB.config_.lease_.addr_);
+ // Ensure stats are being recorded for HR conflicts
+ subnet_conflicts = StatsMgr::instance().getObservation("subnet[1].reservation-conflicts");
+ ASSERT_TRUE(subnet_conflicts);
+ ASSERT_EQ(2, subnet_conflicts->getInteger().first);
+ subnet_conflicts = StatsMgr::instance().getObservation("v4-reservation-conflicts");
+ ASSERT_TRUE(subnet_conflicts);
+ ASSERT_EQ(2, subnet_conflicts->getInteger().first);
// Client B renews its lease.
clientB.setState(Dhcp4Client::RENEWING);
using namespace isc::data;
using namespace isc::dhcp;
using namespace isc::dhcp::test;
+using namespace isc::stats;
+
namespace {
// server should not assign this address because another client
// has taken it already.
EXPECT_NE("10.0.0.123", resp->getYiaddr().toText());
+ // Ensure stats are being recorded for HR conflicts
+ ObservationPtr subnet_conflicts = StatsMgr::instance().getObservation(
+ "subnet[10].reservation-conflicts");
+ ASSERT_TRUE(subnet_conflicts);
+ ASSERT_EQ(1, subnet_conflicts->getInteger().first);
+ subnet_conflicts = StatsMgr::instance().getObservation("v4-reservation-conflicts");
+ ASSERT_TRUE(subnet_conflicts);
+ ASSERT_EQ(1, subnet_conflicts->getInteger().first);
// If the client1 releases the reserved lease, the client2 should acquire it.
ASSERT_NO_THROW(client1.doRelease());
EXPECT_EQ(DHCPACK, resp1->getType());
EXPECT_NE("10.0.0.29", resp1->getYiaddr().toText());
EXPECT_NE("192.0.2.28", resp1->getYiaddr().toText());
+ // Ensure stats are being recorded for HR conflicts
+ ObservationPtr subnet_conflicts = StatsMgr::instance().getObservation(
+ "subnet[10].reservation-conflicts");
+ ASSERT_TRUE(subnet_conflicts);
+ ASSERT_EQ(1, subnet_conflicts->getInteger().first);
+ subnet_conflicts = StatsMgr::instance().getObservation("v4-reservation-conflicts");
+ ASSERT_TRUE(subnet_conflicts);
+ ASSERT_EQ(1, subnet_conflicts->getInteger().first);
// Client #2 is now doing 4-way exchange and should get its newly reserved
// address, released by the 4-way transaction of client 1.
"subnet[10].reservation-conflicts");
ASSERT_TRUE(subnet_conflicts);
ASSERT_EQ(1, subnet_conflicts->getInteger().first);
- ObservationPtr global_conflicts = StatsMgr::instance().getObservation(
- "v4-reservation-conflicts");
- ASSERT_TRUE(global_conflicts);
- ASSERT_EQ(1, global_conflicts->getInteger().first);
+ subnet_conflicts = StatsMgr::instance().getObservation("v4-reservation-conflicts");
+ ASSERT_TRUE(subnet_conflicts);
+ ASSERT_EQ(1, subnet_conflicts->getInteger().first);
}
// Reserved address can't be assigned as long as access to a subnet is