mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-08-30 21:45:37 +00:00
[3799] Add more tests
Update the documents a bit Fix up handling reservations from outside the subnet Add more tests
This commit is contained in:
@@ -2608,13 +2608,14 @@ should include options from the isc option space:
|
||||
<entry>subnet[id].total-NAs</entry>
|
||||
<entry>integer</entry>
|
||||
<entry>
|
||||
This statistic shows the total number of NA addresses available for the
|
||||
DHCPv6 management. In other words, this is the sum of all addresses in
|
||||
all configured pools. This statistic changes only during configuration
|
||||
changes. Note it does not take into account any addresses that may be
|
||||
reserved due to host reservation. The <emphasis>id</emphasis> is the
|
||||
subnet-id of a given subnet. This statistic is exposed for each subnet
|
||||
separately. This statistic is reset during reconfiguration event.
|
||||
This statistic shows the total number of NA addresses available for
|
||||
DHCPv6 management for a given subnet. In other words, this is the sum
|
||||
of all addresses in all configured pools. This statistic changes only
|
||||
during configuration changes. Note it does not take into account any
|
||||
addresses that may be reserved due to host reservation. The
|
||||
<emphasis>id</emphasis> is the subnet-id of a given subnet. This
|
||||
statistic is exposed for each subnet separately. This statistic is
|
||||
reset during a reconfiguration event.
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
@@ -2622,14 +2623,14 @@ should include options from the isc option space:
|
||||
<entry>subnet[id].assigned-NAs</entry>
|
||||
<entry>integer</entry>
|
||||
<entry>
|
||||
This statistic shows the number of assigned NA addresses in a given subnet.
|
||||
This statistic increases every time a new lease is allocated (as a result
|
||||
of receiving a REQUEST message) and is decreased every time a lease is
|
||||
released (a RELEASE message is received). When lease expiration
|
||||
This statistic shows the number of NA addresses in a given subnet that
|
||||
are assigned. This statistic increases every time a new lease is allocated
|
||||
(as a result of receiving a REQUEST message) and is decreased every time a
|
||||
lease is released (a RELEASE message is received). When lease expiration
|
||||
is implemented (planned for Kea 1.0), it will also decrease when a lease
|
||||
is expired. The <emphasis>id</emphasis> is the subnet-id of a given
|
||||
subnet. This statistic is exposed for each subnet separately. This
|
||||
statistic is reset during reconfiguration event.
|
||||
statistic is reset during a reconfiguration event.
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
@@ -2637,13 +2638,14 @@ should include options from the isc option space:
|
||||
<entry>subnet[id].total-PDs</entry>
|
||||
<entry>integer</entry>
|
||||
<entry>
|
||||
This statistic shows the total number of PD prefixes available for the
|
||||
DHCPv6 management. In other words, this is the sum of all prefixes in
|
||||
all configured pools. This statistic changes only during configuration
|
||||
changes. Note it does not take into account any prefixes that may be
|
||||
reserved due to host reservation. The <emphasis>id</emphasis> is the
|
||||
subnet-id of a given subnet. This statistic is exposed for each subnet
|
||||
separately. This statistic is reset during reconfiguration event.
|
||||
This statistic shows the total number of PD prefixes available for
|
||||
DHCPv6 management for a given subnet. In other words, this is the sum
|
||||
of all prefixes in all configured pools. This statistic changes only
|
||||
during configuration changes. Note it does not take into account any
|
||||
prefixes that may be reserved due to host reservation. The
|
||||
<emphasis>id</emphasis> is the subnet-id of a given subnet. This
|
||||
statistic is exposed for each subnet separately. This statistic is
|
||||
reset during a reconfiguration event.
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
@@ -2651,14 +2653,14 @@ should include options from the isc option space:
|
||||
<entry>subnet[id].assigned-PDs</entry>
|
||||
<entry>integer</entry>
|
||||
<entry>
|
||||
This statistic shows the number of assigned PD prefixes in a given subnet.
|
||||
This statistic increases every time a new lease is allocated (as a result
|
||||
of receiving a REQUEST message) and is decreased every time a lease is
|
||||
released (a RELEASE message is received). When lease expiration
|
||||
This statistic shows the number of PD prefixes in a given subnet that
|
||||
are assigned. This statistic increases every time a new lease is allocated
|
||||
(as a result of receiving a REQUEST message) and is decreased every time a
|
||||
lease is released (a RELEASE message is received). When lease expiration
|
||||
is implemented (planned for Kea 1.0), it will also decrease when a lease
|
||||
is expired. The <emphasis>id</emphasis> is the subnet-id of a given
|
||||
subnet. This statistic is exposed for each subnet separately. This
|
||||
statistic is reset during reconfiguration event.
|
||||
statistic is reset during a reconfiguration event.
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
|
@@ -966,6 +966,7 @@ TEST_F(Dhcpv6SrvTest, pdRenewReject) {
|
||||
// - returned REPLY message has server-id
|
||||
// - returned REPLY message has IA_NA that does not include an IAADDR
|
||||
// - lease is actually removed from LeaseMgr
|
||||
// - assigned-NAs stats counter is properly decremented
|
||||
TEST_F(Dhcpv6SrvTest, ReleaseBasic) {
|
||||
testReleaseBasic(Lease::TYPE_NA, IOAddress("2001:db8:1:1::cafe:babe"),
|
||||
IOAddress("2001:db8:1:1::cafe:babe"));
|
||||
@@ -980,6 +981,7 @@ TEST_F(Dhcpv6SrvTest, ReleaseBasic) {
|
||||
// - returned REPLY message has server-id
|
||||
// - returned REPLY message has IA_PD that does not include an IAPREFIX
|
||||
// - lease is actually removed from LeaseMgr
|
||||
// - assigned-PDs stats counter is properly decremented
|
||||
TEST_F(Dhcpv6SrvTest, pdReleaseBasic) {
|
||||
testReleaseBasic(Lease::TYPE_PD, IOAddress("2001:db8:1:2::"),
|
||||
IOAddress("2001:db8:1:2::"));
|
||||
@@ -998,6 +1000,7 @@ TEST_F(Dhcpv6SrvTest, pdReleaseBasic) {
|
||||
// - returned REPLY message has server-id
|
||||
// - returned REPLY message has IA_NA that includes STATUS-CODE
|
||||
// - No lease in LeaseMgr
|
||||
// - assigned-NAs stats counter is properly not decremented
|
||||
TEST_F(Dhcpv6SrvTest, ReleaseReject) {
|
||||
testReleaseReject(Lease::TYPE_NA, IOAddress("2001:db8:1:1::dead"));
|
||||
}
|
||||
@@ -1015,6 +1018,7 @@ TEST_F(Dhcpv6SrvTest, ReleaseReject) {
|
||||
// - returned REPLY message has server-id
|
||||
// - returned REPLY message has IA_PD that includes STATUS-CODE
|
||||
// - No lease in LeaseMgr
|
||||
// - assigned-PDs stats counter is properly not decremented
|
||||
TEST_F(Dhcpv6SrvTest, pdReleaseReject) {
|
||||
testReleaseReject(Lease::TYPE_PD, IOAddress("2001:db8:1:2::"));
|
||||
}
|
||||
|
@@ -17,6 +17,7 @@
|
||||
#include <dhcp/option6_status_code.h>
|
||||
#include <dhcp6/tests/dhcp6_test_utils.h>
|
||||
#include <dhcp6/json_config_parser.h>
|
||||
#include <stats/stats_mgr.h>
|
||||
#include <util/pointer_util.h>
|
||||
#include <cc/command_interpreter.h>
|
||||
#include <string.h>
|
||||
@@ -24,6 +25,7 @@
|
||||
using namespace isc::data;
|
||||
using namespace isc::dhcp;
|
||||
using namespace isc::asiolink;
|
||||
using namespace isc::stats;
|
||||
|
||||
namespace isc {
|
||||
namespace test {
|
||||
@@ -590,6 +592,12 @@ Dhcpv6SrvTest::testReleaseBasic(Lease::Type type, const IOAddress& existing,
|
||||
Lease6Ptr l = LeaseMgrFactory::instance().getLease6(type, existing);
|
||||
ASSERT_TRUE(l);
|
||||
|
||||
// And prepopulate the stats counter
|
||||
std::string name = StatsMgr::generateName("subnet", subnet_->getID(),
|
||||
type == Lease::TYPE_NA ? "assigned-NAs" :
|
||||
"assigned-PDs");
|
||||
StatsMgr::instance().setValue(name, static_cast<int64_t>(1));
|
||||
|
||||
// Let's create a RELEASE
|
||||
Pkt6Ptr rel = createMessage(DHCPV6_RELEASE, type, release_addr, prefix_len,
|
||||
iaid);
|
||||
@@ -628,6 +636,11 @@ Dhcpv6SrvTest::testReleaseBasic(Lease::Type type, const IOAddress& existing,
|
||||
l = LeaseMgrFactory::instance().getLease6(type, *duid_, iaid,
|
||||
subnet_->getID());
|
||||
ASSERT_FALSE(l);
|
||||
|
||||
// We should have decremented the address counter
|
||||
ObservationPtr stat = StatsMgr::instance().getObservation(name);
|
||||
ASSERT_TRUE(stat);
|
||||
EXPECT_EQ(0, stat->getInteger().first);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -656,6 +669,12 @@ Dhcpv6SrvTest::testReleaseReject(Lease::Type type, const IOAddress& addr) {
|
||||
// GenerateClientId() also sets duid_
|
||||
OptionPtr clientid = generateClientId();
|
||||
|
||||
// Pretend we have allocated 1 lease
|
||||
std::string name = StatsMgr::generateName("subnet", subnet_->getID(),
|
||||
type == Lease::TYPE_NA ? "assigned-NAs" :
|
||||
"assigned-PDs");
|
||||
StatsMgr::instance().setValue(name, static_cast<int64_t>(1));
|
||||
|
||||
// Check that the lease is NOT in the database
|
||||
Lease6Ptr l = LeaseMgrFactory::instance().getLease6(type, addr);
|
||||
ASSERT_FALSE(l);
|
||||
@@ -685,6 +704,11 @@ Dhcpv6SrvTest::testReleaseReject(Lease::Type type, const IOAddress& addr) {
|
||||
l = LeaseMgrFactory::instance().getLease6(type, addr);
|
||||
ASSERT_FALSE(l);
|
||||
|
||||
// Verify we didn't decrement the stats counter
|
||||
ObservationPtr stat = StatsMgr::instance().getObservation(name);
|
||||
ASSERT_TRUE(stat);
|
||||
EXPECT_EQ(1, stat->getInteger().first);
|
||||
|
||||
// CASE 2: Lease is known and belongs to this client, but to a different IAID
|
||||
SCOPED_TRACE("CASE 2: Lease is known and belongs to this client, but to a different IAID");
|
||||
|
||||
@@ -713,6 +737,9 @@ Dhcpv6SrvTest::testReleaseReject(Lease::Type type, const IOAddress& addr) {
|
||||
l = LeaseMgrFactory::instance().getLease6(type, addr);
|
||||
ASSERT_TRUE(l);
|
||||
|
||||
// Verify we didn't decrement the stats counter
|
||||
EXPECT_EQ(1, stat->getInteger().first);
|
||||
|
||||
// CASE 3: Lease belongs to a client with different client-id
|
||||
SCOPED_TRACE("CASE 3: Lease belongs to a client with different client-id");
|
||||
|
||||
@@ -737,6 +764,9 @@ Dhcpv6SrvTest::testReleaseReject(Lease::Type type, const IOAddress& addr) {
|
||||
l = LeaseMgrFactory::instance().getLease6(type, addr);
|
||||
ASSERT_TRUE(l);
|
||||
|
||||
// Verify we didn't decrement the stats counter
|
||||
EXPECT_EQ(1, stat->getInteger().first);
|
||||
|
||||
// Finally, let's cleanup the database
|
||||
EXPECT_TRUE(LeaseMgrFactory::instance().deleteLease(addr));
|
||||
}
|
||||
|
@@ -1038,12 +1038,15 @@ Lease6Ptr AllocEngine::createLease6(ClientContext6& ctx,
|
||||
bool status = LeaseMgrFactory::instance().addLease(lease);
|
||||
|
||||
if (status) {
|
||||
// The lease insertion succeeded, let's bump up the statistic.
|
||||
StatsMgr::instance().addValue(
|
||||
StatsMgr::generateName("subnet", ctx.subnet_->getID(),
|
||||
ctx.type_ == Lease::TYPE_NA ? "assigned-NAs" :
|
||||
"assigned-PDs"),
|
||||
static_cast<int64_t>(1));
|
||||
// The lease insertion succeeded - if the lease is in the
|
||||
// current subnet lets bump up the statistic.
|
||||
if (ctx.subnet_->inPool(ctx.type_, addr)) {
|
||||
StatsMgr::instance().addValue(
|
||||
StatsMgr::generateName("subnet", ctx.subnet_->getID(),
|
||||
ctx.type_ == Lease::TYPE_NA ? "assigned-NAs" :
|
||||
"assigned-PDs"),
|
||||
static_cast<int64_t>(1));
|
||||
}
|
||||
|
||||
return (lease);
|
||||
} else {
|
||||
|
@@ -53,59 +53,51 @@ TEST_F(AllocEngine6Test, constructor) {
|
||||
}
|
||||
|
||||
// This test checks if the simple allocation (REQUEST) can succeed
|
||||
// and the stats counter is properly bumped by 1
|
||||
TEST_F(AllocEngine6Test, simpleAlloc6) {
|
||||
|
||||
// Pretend our pool has allocated 100 addresses
|
||||
string name = StatsMgr::generateName("subnet", subnet_->getID(), "assigned-NAs");
|
||||
StatsMgr::instance().addValue(name, static_cast<int64_t>(100));
|
||||
|
||||
simpleAlloc6Test(pool_, IOAddress("::"), false);
|
||||
|
||||
// We should have bumped the address counter by 1
|
||||
string name = StatsMgr::generateName("subnet", subnet_->getID(), "assigned-NAs");
|
||||
ObservationPtr stat = StatsMgr::instance().getObservation(name);
|
||||
ASSERT_TRUE(stat);
|
||||
EXPECT_EQ(101, stat->getInteger().first);
|
||||
}
|
||||
|
||||
// This test checks if the simple PD allocation (REQUEST) can succeed
|
||||
// and the stats counter is properly bumped by 1
|
||||
TEST_F(AllocEngine6Test, pdSimpleAlloc6) {
|
||||
|
||||
// Pretend our pool has allocated 100 prefixes
|
||||
string name = StatsMgr::generateName("subnet", subnet_->getID(), "assigned-PDs");
|
||||
StatsMgr::instance().addValue(name, static_cast<int64_t>(100));
|
||||
|
||||
simpleAlloc6Test(pd_pool_, IOAddress("::"), false);
|
||||
|
||||
// We should have bumped the address counter by 1
|
||||
string name = StatsMgr::generateName("subnet", subnet_->getID(), "assigned-PDs");
|
||||
ObservationPtr stat = StatsMgr::instance().getObservation(name);
|
||||
ASSERT_TRUE(stat);
|
||||
EXPECT_EQ(101, stat->getInteger().first);
|
||||
}
|
||||
|
||||
// This test checks if the fake allocation (for SOLICIT) can succeed
|
||||
// and the stats counter isn't bumped
|
||||
TEST_F(AllocEngine6Test, fakeAlloc6) {
|
||||
|
||||
// Pretend our pool has allocated 100 prefixes
|
||||
string name = StatsMgr::generateName("subnet", subnet_->getID(), "assigned-NAs");
|
||||
StatsMgr::instance().addValue(name, static_cast<int64_t>(100));
|
||||
|
||||
simpleAlloc6Test(pool_, IOAddress("::"), true);
|
||||
|
||||
// We should not have bumped the address counter
|
||||
string name = StatsMgr::generateName("subnet", subnet_->getID(), "assigned-NAs");
|
||||
ObservationPtr stat = StatsMgr::instance().getObservation(name);
|
||||
ASSERT_TRUE(stat);
|
||||
EXPECT_EQ(100, stat->getInteger().first);
|
||||
}
|
||||
|
||||
// This test checks if the fake PD allocation (for SOLICIT) can succeed
|
||||
// and the stats counter isn't bumped
|
||||
TEST_F(AllocEngine6Test, pdFakeAlloc6) {
|
||||
// Pretend our pool has allocated 100 prefixes
|
||||
string name = StatsMgr::generateName("subnet", subnet_->getID(), "assigned-PDs");
|
||||
StatsMgr::instance().addValue(name, static_cast<int64_t>(100));
|
||||
|
||||
simpleAlloc6Test(pd_pool_, IOAddress("::"), true);
|
||||
|
||||
// We should not have bumped the address counter
|
||||
string name = StatsMgr::generateName("subnet", subnet_->getID(), "assigned-PDs");
|
||||
ObservationPtr stat = StatsMgr::instance().getObservation(name);
|
||||
ASSERT_TRUE(stat);
|
||||
EXPECT_EQ(100, stat->getInteger().first);
|
||||
@@ -566,6 +558,10 @@ TEST_F(AllocEngine6Test, requestReuseExpiredLease6) {
|
||||
lease->hostname_ = "myhost.example.com.";
|
||||
ASSERT_TRUE(LeaseMgrFactory::instance().addLease(lease));
|
||||
|
||||
// By default we pretend our subnet has 100 addresses
|
||||
string name = StatsMgr::generateName("subnet", subnet_->getID(), "assigned-NAs");
|
||||
StatsMgr::instance().setValue(name, static_cast<int64_t>(100));
|
||||
|
||||
// A client comes along, asking specifically for this address
|
||||
AllocEngine::ClientContext6 ctx(subnet_, duid_, iaid_, addr, Lease::TYPE_NA,
|
||||
false, false, "", false);
|
||||
@@ -596,6 +592,13 @@ TEST_F(AllocEngine6Test, requestReuseExpiredLease6) {
|
||||
|
||||
// Now check that the lease in LeaseMgr has the same parameters
|
||||
detailCompareLease(lease, from_mgr);
|
||||
|
||||
// We should not have bumped the address counter
|
||||
// NOTE: when we start expiring addresses and removing them from
|
||||
// the stats this will no longer be true.
|
||||
ObservationPtr stat = StatsMgr::instance().getObservation(name);
|
||||
ASSERT_TRUE(stat);
|
||||
EXPECT_EQ(100, stat->getInteger().first);
|
||||
}
|
||||
|
||||
// --- v6 host reservation ---
|
||||
@@ -639,9 +642,9 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolRequestNoHint) {
|
||||
|
||||
AllocEngine engine(AllocEngine::ALLOC_ITERATIVE, 100, false);
|
||||
|
||||
// Pretend our pool has allocated 100 addresses
|
||||
// By default we pretend our subnet has 100 addresses
|
||||
string name = StatsMgr::generateName("subnet", subnet_->getID(), "assigned-NAs");
|
||||
StatsMgr::instance().addValue(name, static_cast<int64_t>(100));
|
||||
StatsMgr::instance().setValue(name, static_cast<int64_t>(100));
|
||||
|
||||
Lease6Ptr lease = simpleAlloc6Test(pool_, IOAddress("::"), false);
|
||||
ASSERT_TRUE(lease);
|
||||
@@ -757,7 +760,7 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolRequestMatchingHint) {
|
||||
// This test checks the behavior of the allocation engine in the following
|
||||
// scenario:
|
||||
// - Client has no lease in the database.
|
||||
// - Client has an in-pool reservation.
|
||||
// - Client has an out-of-pool reservation.
|
||||
// - Client sends SOLICIT without any hints.
|
||||
// - Client is allocated a reserved address.
|
||||
//
|
||||
@@ -773,13 +776,14 @@ TEST_F(AllocEngine6Test, reservedAddressOutOfPoolSolicitNoHint) {
|
||||
Lease6Ptr lease = simpleAlloc6Test(pool_, IOAddress("::"), true, false);
|
||||
ASSERT_TRUE(lease);
|
||||
EXPECT_EQ("2001:db8::abcd", lease->addr_.toText());
|
||||
|
||||
}
|
||||
|
||||
// Checks that a client gets the address reserved (in-pool case)
|
||||
// Checks that a client gets the address reserved (out-of-pool case)
|
||||
// This test checks the behavior of the allocation engine in the following
|
||||
// scenario:
|
||||
// - Client has no lease in the database.
|
||||
// - Client has an in-pool reservation.
|
||||
// - Client has an out-of-pool reservation.
|
||||
// - Client sends REQUEST without any hints.
|
||||
// - Client is allocated a reserved address.
|
||||
//
|
||||
@@ -792,9 +796,18 @@ TEST_F(AllocEngine6Test, reservedAddressOutOfPoolRequestNoHint) {
|
||||
|
||||
AllocEngine engine(AllocEngine::ALLOC_ITERATIVE, 100, false);
|
||||
|
||||
// By default we pretend our subnet has 100 addresses
|
||||
string name = StatsMgr::generateName("subnet", subnet_->getID(), "assigned-NAs");
|
||||
StatsMgr::instance().setValue(name, static_cast<int64_t>(100));
|
||||
|
||||
Lease6Ptr lease = simpleAlloc6Test(pool_, IOAddress("::"), false, false);
|
||||
ASSERT_TRUE(lease);
|
||||
EXPECT_EQ("2001:db8::abcd", lease->addr_.toText());
|
||||
|
||||
// We should not have bumped the address counter
|
||||
ObservationPtr stat = StatsMgr::instance().getObservation(name);
|
||||
ASSERT_TRUE(stat);
|
||||
EXPECT_EQ(100, stat->getInteger().first);
|
||||
}
|
||||
|
||||
// Checks that a client gets the address reserved (in-pool case)
|
||||
@@ -822,11 +835,11 @@ TEST_F(AllocEngine6Test, reservedAddressOutOfPoolSolicitValidHint) {
|
||||
EXPECT_EQ("2001:db8::abcd", lease->addr_.toText());
|
||||
}
|
||||
|
||||
// Checks that a client gets the address reserved (in-pool case)
|
||||
// Checks that a client gets the address reserved (out-of-pool case)
|
||||
// This test checks the behavior of the allocation engine in the following
|
||||
// scenario:
|
||||
// - Client has no lease in the database.
|
||||
// - Client has an in-pool reservation.
|
||||
// - Client has an out-of-pool reservation.
|
||||
// - Client sends REQUEST with a hint that does not match reservation
|
||||
// - Client is allocated a reserved address, not the hint.
|
||||
//
|
||||
@@ -847,11 +860,11 @@ TEST_F(AllocEngine6Test, reservedAddressOutOfPoolRequestValidHint) {
|
||||
EXPECT_EQ("2001:db8::abcd", lease->addr_.toText());
|
||||
}
|
||||
|
||||
// Checks that a client gets the address reserved (in-pool case)
|
||||
// Checks that a client gets the address reserved (out-of-pool case)
|
||||
// This test checks the behavior of the allocation engine in the following
|
||||
// scenario:
|
||||
// - Client has no lease in the database.
|
||||
// - Client has an in-pool reservation.
|
||||
// - Client has an out-of-pool reservation.
|
||||
// - Client sends SOLICIT with a hint that does matches reservation
|
||||
// - Client is allocated a reserved address, not the hint.
|
||||
//
|
||||
@@ -872,11 +885,11 @@ TEST_F(AllocEngine6Test, reservedAddressOutOfPoolSolicitMatchingHint) {
|
||||
EXPECT_EQ("2001:db8::abcd", lease->addr_.toText());
|
||||
}
|
||||
|
||||
// Checks that a client gets the address reserved (in-pool case)
|
||||
// Checks that a client gets the address reserved (out-of-pool case)
|
||||
// This test checks the behavior of the allocation engine in the following
|
||||
// scenario:
|
||||
// - Client has no lease in the database.
|
||||
// - Client has an in-pool reservation.
|
||||
// - Client has an out-of-pool reservation.
|
||||
// - Client sends REQUEST with a hint that does not match reservation
|
||||
// - Client is allocated a reserved address, not the hint.
|
||||
//
|
||||
@@ -903,18 +916,16 @@ TEST_F(AllocEngine6Test, reservedAddressOutOfPoolRequestMatchingHint) {
|
||||
// - client tries to get address A:
|
||||
// Check that his existing lease for lease A is removed
|
||||
// Check that he is assigned a new lease for B
|
||||
// - verify that the number of assigned address behaves as expected
|
||||
TEST_F(AllocEngine6Test, reservedAddressInPoolReassignedThis) {
|
||||
AllocEngine engine(AllocEngine::ALLOC_ITERATIVE, 100, false);
|
||||
|
||||
// Pretend our pool has allocated 100 addresses
|
||||
string name = StatsMgr::generateName("subnet", subnet_->getID(), "assigned-NAs");
|
||||
StatsMgr::instance().addValue(name, static_cast<int64_t>(100));
|
||||
|
||||
// Client gets an address
|
||||
Lease6Ptr lease1 = simpleAlloc6Test(pool_, IOAddress("::"), false);
|
||||
ASSERT_TRUE(lease1);
|
||||
|
||||
// We should have bumped the address counter
|
||||
string name = StatsMgr::generateName("subnet", subnet_->getID(), "assigned-NAs");
|
||||
ObservationPtr stat = StatsMgr::instance().getObservation(name);
|
||||
ASSERT_TRUE(stat);
|
||||
EXPECT_EQ(101, stat->getInteger().first);
|
||||
@@ -959,9 +970,7 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolReassignedThis) {
|
||||
// Lastly check to see that the address counter is still 101 we should have
|
||||
// have decremented it on the implied release and incremented it on the reserved
|
||||
EXPECT_EQ(101, stat->getInteger().first);
|
||||
|
||||
}
|
||||
|
||||
// In the following situation:
|
||||
// - client X is assigned an address A
|
||||
// - HR is made for client Y (*other* client) to get A
|
||||
@@ -975,12 +984,21 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolReassignedOther) {
|
||||
Lease6Ptr lease1 = simpleAlloc6Test(pool_, IOAddress("::"), false);
|
||||
ASSERT_TRUE(lease1);
|
||||
|
||||
// We should have bumped the address counter
|
||||
string name = StatsMgr::generateName("subnet", subnet_->getID(), "assigned-NAs");
|
||||
ObservationPtr stat = StatsMgr::instance().getObservation(name);
|
||||
ASSERT_TRUE(stat);
|
||||
EXPECT_EQ(101, stat->getInteger().first);
|
||||
|
||||
// Just check that if the client requests again, it will get the same
|
||||
// address.
|
||||
Lease6Ptr lease2 = simpleAlloc6Test(pool_, lease1->addr_, false);
|
||||
ASSERT_TRUE(lease2);
|
||||
detailCompareLease(lease1, lease2);
|
||||
|
||||
// We should not have bumped the address counter again
|
||||
EXPECT_EQ(101, stat->getInteger().first);
|
||||
|
||||
// Now admin creates a reservation for this client. Let's use the
|
||||
// address client X just received. Let's generate a host, but don't add it
|
||||
// to the HostMgr yet.
|
||||
@@ -1014,6 +1032,10 @@ TEST_F(AllocEngine6Test, reservedAddressInPoolReassignedOther) {
|
||||
|
||||
// Now check that the lease in LeaseMgr has the same parameters
|
||||
detailCompareLease(lease3, from_mgr);
|
||||
|
||||
// Lastly check to see that the address counter is still 101 we should have
|
||||
// have decremented it on the implied release and incremented it on the reserved
|
||||
EXPECT_EQ(101, stat->getInteger().first);
|
||||
}
|
||||
|
||||
// Checks that a reserved address for client A is not assigned when
|
||||
@@ -1430,30 +1452,6 @@ TEST_F(AllocEngine6Test, reservedAddressByMacInPoolRequestValidHint) {
|
||||
}
|
||||
|
||||
|
||||
// This test checks that NULL values are handled properly
|
||||
TEST_F(AllocEngine6Test, allocateAddress6Stats) {
|
||||
boost::scoped_ptr<AllocEngine> engine;
|
||||
ASSERT_NO_THROW(engine.reset(new AllocEngine(AllocEngine::ALLOC_ITERATIVE, 100)));
|
||||
ASSERT_TRUE(engine);
|
||||
|
||||
// Verify our pool hasn't allocated any addresses
|
||||
string name = StatsMgr::generateName("subnet", subnet_->getID(), "assigned-NAs");
|
||||
StatsMgr::instance().addValue(name, static_cast<int64_t>(100));
|
||||
|
||||
Lease6Ptr lease;
|
||||
AllocEngine::ClientContext6 ctx1(subnet_, duid_, iaid_, IOAddress("::"),
|
||||
Lease::TYPE_NA, false, false, "", false);
|
||||
ctx1.query_.reset(new Pkt6(DHCPV6_REQUEST, 1234));
|
||||
EXPECT_NO_THROW(lease = expectOneLease(engine->allocateLeases6(ctx1)));
|
||||
ASSERT_TRUE(lease);
|
||||
|
||||
// We should have bumped the address counter by 1
|
||||
ObservationPtr stat = StatsMgr::instance().getObservation(name);
|
||||
ASSERT_TRUE(stat);
|
||||
EXPECT_EQ(101, stat->getInteger().first);
|
||||
}
|
||||
|
||||
|
||||
}; // namespace test
|
||||
}; // namespace dhcp
|
||||
}; // namespace isc
|
||||
|
@@ -22,6 +22,7 @@
|
||||
#include <dhcpsrv/host_mgr.h>
|
||||
#include <dhcpsrv/lease_mgr.h>
|
||||
#include <dhcpsrv/memfile_lease_mgr.h>
|
||||
#include <stats/stats_mgr.h>
|
||||
|
||||
#include <dhcpsrv/tests/test_utils.h>
|
||||
#include <dhcpsrv/tests/alloc_engine_utils.h>
|
||||
@@ -40,6 +41,7 @@
|
||||
using namespace std;
|
||||
using namespace isc::hooks;
|
||||
using namespace isc::asiolink;
|
||||
using namespace isc::stats;
|
||||
|
||||
namespace isc {
|
||||
namespace dhcp {
|
||||
@@ -82,6 +84,14 @@ AllocEngine6Test::initSubnet(const asiolink::IOAddress& subnet,
|
||||
|
||||
cfg_mgr.getStagingCfg()->getCfgSubnets6()->add(subnet_);
|
||||
cfg_mgr.commit();
|
||||
|
||||
// By default we pretend our subnet has 100 addresses and prefixes allocated.
|
||||
StatsMgr::instance().setValue(
|
||||
StatsMgr::generateName("subnet", subnet_->getID(), "assigned-NAs"),
|
||||
static_cast<int64_t>(100));
|
||||
StatsMgr::instance().setValue(
|
||||
StatsMgr::generateName("subnet", subnet_->getID(), "assigned-PDs"),
|
||||
static_cast<int64_t>(100));
|
||||
}
|
||||
|
||||
void
|
||||
|
@@ -583,7 +583,7 @@ TEST_F(CfgMgrTest, commitStats4) {
|
||||
StatsMgr& stats_mgr = StatsMgr::instance();
|
||||
|
||||
// Let's prepare the "old" configuration: a subnet with id 123
|
||||
// and pretend there ware addresses assigned, so statistics are non-zero.
|
||||
// and pretend there were addresses assigned, so statistics are non-zero.
|
||||
Subnet4Ptr subnet1(new Subnet4(IOAddress("192.1.2.0"), 24, 1, 2, 3, 123));
|
||||
CfgSubnets4Ptr subnets = cfg_mgr.getStagingCfg()->getCfgSubnets4();
|
||||
subnets->add(subnet1);
|
||||
@@ -622,7 +622,7 @@ TEST_F(CfgMgrTest, clearStats4) {
|
||||
StatsMgr& stats_mgr = StatsMgr::instance();
|
||||
|
||||
// Let's prepare the "old" configuration: a subnet with id 123
|
||||
// and pretend there ware addresses assigned, so statistics are non-zero.
|
||||
// and pretend there were addresses assigned, so statistics are non-zero.
|
||||
Subnet4Ptr subnet1(new Subnet4(IOAddress("192.1.2.0"), 24, 1, 2, 3, 123));
|
||||
CfgSubnets4Ptr subnets = cfg_mgr.getStagingCfg()->getCfgSubnets4();
|
||||
subnets->add(subnet1);
|
||||
@@ -649,7 +649,7 @@ TEST_F(CfgMgrTest, commitStats6) {
|
||||
StatsMgr& stats_mgr = StatsMgr::instance();
|
||||
|
||||
// Let's prepare the "old" configuration: a subnet with id 123
|
||||
// and pretend there ware addresses assigned, so statistics are non-zero.
|
||||
// and pretend there were addresses assigned, so statistics are non-zero.
|
||||
Subnet6Ptr subnet1(new Subnet6(IOAddress("2001:db8:1::"), 48, 1, 2, 3, 4, 123));
|
||||
CfgSubnets6Ptr subnets = cfg_mgr.getStagingCfg()->getCfgSubnets6();
|
||||
subnets->add(subnet1);
|
||||
@@ -700,7 +700,7 @@ TEST_F(CfgMgrTest, clearStats6) {
|
||||
StatsMgr& stats_mgr = StatsMgr::instance();
|
||||
|
||||
// Let's prepare the "old" configuration: a subnet with id 123
|
||||
// and pretend there ware addresses assigned, so statistics are non-zero.
|
||||
// and pretend there were addresses assigned, so statistics are non-zero.
|
||||
Subnet6Ptr subnet1(new Subnet6(IOAddress("2001:db8:1::"), 48, 1, 2, 3, 4, 123));
|
||||
CfgSubnets6Ptr subnets = cfg_mgr.getStagingCfg()->getCfgSubnets6();
|
||||
subnets->add(subnet1);
|
||||
|
Reference in New Issue
Block a user