2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-31 05:55:28 +00:00

[#2795] adding new UT for IPv6 prefixes check

This commit is contained in:
Piotrek Zadroga
2023-06-22 01:23:25 +02:00
parent bc506ed6df
commit 0d236b55a5
5 changed files with 135 additions and 0 deletions

View File

@@ -63,6 +63,13 @@ TEST_F(HostMgrTest, getAll6ByIP) {
testGetAll6ByIP(*getCfgHosts(), *getCfgHosts());
}
// This test verifies that HostMgr returns all reservations for the
// IPv6 reserved prefix. The reservations are specified in the
// server's configuration.
TEST_F(HostMgrTest, getAll6ByIpPrefix) {
testGetAll6ByIpPrefix(*getCfgHosts(), *getCfgHosts());
}
// This test verifies that HostMgr returns all reservations for the
// specified DHCPv6 subnet. The reservations are defined in the server's
// configuration.

View File

@@ -1583,6 +1583,12 @@ TEST_F(MySQLHostMgrTest, getAll6ByIP) {
testGetAll6ByIP(*getCfgHosts(), *getCfgHosts());
}
// This test verifies that HostMgr returns all reservations for the
// IPv6 reserved prefix.
TEST_F(MySQLHostMgrTest, getAll6ByIpPrefix) {
testGetAll6ByIpPrefix(*getCfgHosts(), *getCfgHosts());
}
// This test verifies that reservations for a particular hostname can be
// retrieved from the configuration file and a database simultaneously.
TEST_F(MySQLHostMgrTest, getAllbyHostname) {

View File

@@ -1551,6 +1551,12 @@ TEST_F(PgSQLHostMgrTest, getAll6ByIP) {
testGetAll6ByIP(*getCfgHosts(), *getCfgHosts());
}
// This test verifies that HostMgr returns all reservations for the
// IPv6 reserved prefix.
TEST_F(PgSQLHostMgrTest, getAll6ByIpPrefix) {
testGetAll6ByIpPrefix(*getCfgHosts(), *getCfgHosts());
}
// This test verifies that reservations for a particular hostname can be
// retrieved from the configuration file and a database simultaneously.
TEST_F(PgSQLHostMgrTest, getAllbyHostname) {

View File

@@ -4512,6 +4512,110 @@ HostMgrTest::testGetAll6ByIP(BaseHostDataSource& data_source1, BaseHostDataSourc
EXPECT_EQ(0, hosts.size());
}
void
HostMgrTest::testGetAll6ByIpPrefix(BaseHostDataSource& data_source1,
BaseHostDataSource& data_source2) {
// Set the mode of operation with multiple reservations for the same
// IP address.
ASSERT_TRUE(HostMgr::instance().setIPReservationsUnique(false));
CfgMgr::instance().getStagingCfg()->getCfgHosts()->setIPReservationsUnique(false);
// Initially, no reservations should be present.
ConstHostCollection hosts = HostMgr::instance().getAll6(SubnetID(1),
IOAddress("2001:db8:1:10::"));
ASSERT_TRUE(hosts.empty());
// Prepare vectors of IPv6 prefix reservations for new hosts.
std::vector<IOAddress> addresses1;
std::vector<IOAddress> addresses2;
addresses1.push_back(IOAddress("2001:db8:1:10::"));
addresses1.push_back(IOAddress("2001:db8:1:11::"));
addresses2.push_back(IOAddress("2001:db8:1:10::"));
addresses2.push_back(IOAddress("2001:db8:1:12::"));
// Add two hosts for the same subnet with 2 IPv6 prefix reservations per host.
addHost6(data_source1, duids_[0], SubnetID(1), addresses1, 64);
addHost6(data_source2, duids_[1], SubnetID(1), addresses2, 64);
CfgMgr::instance().commit();
// If a non-matching subnet is specified, nothing should be returned.
hosts = HostMgr::instance().getAll6(SubnetID(100), IOAddress("2001:db8:1:10::"));
ASSERT_TRUE(hosts.empty());
// For given IP prefix there should be one reservation.
hosts = HostMgr::instance().getAll6(IOAddress("2001:db8:1:11::"));
ASSERT_EQ(1, hosts.size());
// For given IP prefix there should be one reservation.
hosts = HostMgr::instance().getAll6(IOAddress("2001:db8:1:12::"));
ASSERT_EQ(1, hosts.size());
// For given IP prefix there should be two reservations.
hosts = HostMgr::instance().getAll6(IOAddress("2001:db8:1:10::"));
ASSERT_EQ(2, hosts.size());
// Make sure that subnet is correct.
EXPECT_EQ(1, hosts[0]->getIPv6SubnetID());
EXPECT_EQ(1, hosts[1]->getIPv6SubnetID());
// Make sure that all hosts were returned with different identifiers, and
// they have expected reservations.
EXPECT_NE(hosts[0]->getIdentifierAsText(), hosts[1]->getIdentifierAsText());
EXPECT_TRUE(
hosts[0]->hasReservation(IPv6Resrv(IPv6Resrv::TYPE_PD, IOAddress("2001:db8:1:10::"), 64)));
EXPECT_TRUE(
hosts[0]->hasReservation(IPv6Resrv(IPv6Resrv::TYPE_PD, IOAddress("2001:db8:1:11::"), 64)));
EXPECT_TRUE(
hosts[1]->hasReservation(IPv6Resrv(IPv6Resrv::TYPE_PD, IOAddress("2001:db8:1:10::"), 64)));
EXPECT_TRUE(
hosts[1]->hasReservation(IPv6Resrv(IPv6Resrv::TYPE_PD, IOAddress("2001:db8:1:12::"), 64)));
// Make sure that the operation target is supported.
bool is_first_source_primary = isPrimaryDataSource(data_source1);
bool is_second_source_primary = isPrimaryDataSource(data_source2);
size_t hosts_in_primary_source = is_first_source_primary + is_second_source_primary;
// Select hosts only from the primary source.
hosts = HostMgr::instance().getAll6(IOAddress("2001:db8:1:10::"),
HostMgrOperationTarget::PRIMARY_SOURCE);
EXPECT_EQ(hosts_in_primary_source, hosts.size());
if (is_first_source_primary) {
EXPECT_TRUE(hosts[0]->hasReservation(
IPv6Resrv(IPv6Resrv::TYPE_PD, IOAddress("2001:db8:1:10::"), 64)));
EXPECT_TRUE(hosts[0]->hasReservation(
IPv6Resrv(IPv6Resrv::TYPE_PD, IOAddress("2001:db8:1:11::"), 64)));
}
if (is_second_source_primary) {
EXPECT_TRUE(hosts[hosts_in_primary_source - 1]->hasReservation(
IPv6Resrv(IPv6Resrv::TYPE_PD, IOAddress("2001:db8:1:10::"), 64)));
EXPECT_TRUE(hosts[hosts_in_primary_source - 1]->hasReservation(
IPv6Resrv(IPv6Resrv::TYPE_PD, IOAddress("2001:db8:1:12::"), 64)));
}
// Select hosts only from the alternate sources.
hosts = HostMgr::instance().getAll6(IOAddress("2001:db8:1:10::"),
HostMgrOperationTarget::ALTERNATE_SOURCES);
EXPECT_EQ(2 - hosts_in_primary_source, hosts.size());
if (!is_first_source_primary) {
EXPECT_TRUE(hosts[0]->hasReservation(
IPv6Resrv(IPv6Resrv::TYPE_PD, IOAddress("2001:db8:1:10::"), 64)));
EXPECT_TRUE(hosts[0]->hasReservation(
IPv6Resrv(IPv6Resrv::TYPE_PD, IOAddress("2001:db8:1:11::"), 64)));
}
if (!is_second_source_primary) {
EXPECT_TRUE(hosts[2 - hosts_in_primary_source - 1]->hasReservation(
IPv6Resrv(IPv6Resrv::TYPE_PD, IOAddress("2001:db8:1:10::"), 64)));
EXPECT_TRUE(hosts[2 - hosts_in_primary_source - 1]->hasReservation(
IPv6Resrv(IPv6Resrv::TYPE_PD, IOAddress("2001:db8:1:11::"), 64)));
}
// Select hosts for an unspecified source.
hosts = HostMgr::instance().getAll4(IOAddress("2001:db8:1:10::"),
HostMgrOperationTarget::UNSPECIFIED_SOURCE);
EXPECT_EQ(0, hosts.size());
}
void
HostMgrTest::testAdd(BaseHostDataSource& data_source1,
BaseHostDataSource& data_source2) {

View File

@@ -965,6 +965,18 @@ protected:
void testGetAll6ByIP(BaseHostDataSource& data_source1,
BaseHostDataSource& data_source2);
/// @brief This test verifies that HostMgr returns all reservations for the
/// specified IPv6 prefix/es.
///
/// If reservations are added to different host data sources, it is expected
/// that the @c HostMgr will retrieve reservations from both of them.
///
/// @param data_source1 Host data source to which first reservation is
/// inserted.
/// @param data_source2 Host data source to which second reservation is
/// inserted.
void testGetAll6ByIpPrefix(BaseHostDataSource& data_source1, BaseHostDataSource& data_source2);
/// @brief This test verifies that HostMgr adds the reservations to any
/// data source.
///