From: Slawek Figiel Date: Mon, 17 Apr 2023 20:24:37 +0000 (+0200) Subject: [#2815] Fix unit test X-Git-Tag: Kea-2.3.8~55 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=de3dc078a9165316509a2c7bb01b955567e0e8d2;p=thirdparty%2Fkea.git [#2815] Fix unit test --- diff --git a/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc b/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc index dcacbed957..b033d48b27 100644 --- a/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc +++ b/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc @@ -4378,6 +4378,9 @@ HostMgrTest::testGetAll6BySubnetIP(BaseHostDataSource& data_source1, void HostMgrTest::testAdd(BaseHostDataSource& data_source1, BaseHostDataSource& data_source2) { + bool is_first_source_primary = isPrimaryDataSource(data_source1); + bool is_second_source_primary = isPrimaryDataSource(data_source2); + bool has_alternate_source = !is_first_source_primary || !is_second_source_primary; // Initially, no reservations should be present. ConstHostCollection hosts4 = HostMgr::instance().getAll4(SubnetID(1)); ConstHostCollection hosts6 = HostMgr::instance().getAll6(SubnetID(1)); @@ -4385,77 +4388,111 @@ HostMgrTest::testAdd(BaseHostDataSource& data_source1, ASSERT_TRUE(hosts6.empty()); // Add hosts using the implicit operation target. - HostMgr::instance().add(HostPtr(new Host( + auto host = HostPtr(new Host( hwaddrs_[0]->toText(false), "hw-address", SubnetID(1), SUBNET_ID_UNUSED, IOAddress("192.0.2.5") - ))); + )); + if (has_alternate_source) { + EXPECT_NO_THROW(HostMgr::instance().add(host)); + } else { + EXPECT_THROW(HostMgr::instance().add(host), NoHostDataSourceManager); + } - HostMgr::instance().add(HostPtr(new Host( + host = HostPtr(new Host( hwaddrs_[1]->toText(false), "hw-address", SUBNET_ID_UNUSED, SubnetID(1), - IOAddress("2001:db8:1::5") - ))); + IOAddress::IPV4_ZERO_ADDRESS() + )); + host->addReservation(IPv6Resrv(IPv6Resrv::TYPE_NA, + IOAddress("2001:db8:1::5"), 128)); + if (has_alternate_source) { + EXPECT_NO_THROW(HostMgr::instance().add(host)); + } else { + EXPECT_THROW(HostMgr::instance().add(host), NoHostDataSourceManager); + } // Add hosts using the explicit operation target - all data sources. - HostMgr::instance().add(HostPtr(new Host( - hwaddrs_[0]->toText(false), "hw-address", + host = HostPtr(new Host( + hwaddrs_[2]->toText(false), "hw-address", SubnetID(1), SUBNET_ID_UNUSED, IOAddress("192.0.2.6") - )), HostMgrOperationTarget::ALL_SOURCES); + )); + HostMgr::instance().add(host, HostMgrOperationTarget::ALL_SOURCES); - HostMgr::instance().add(HostPtr(new Host( - hwaddrs_[1]->toText(false), "hw-address", + host = HostPtr(new Host( + hwaddrs_[3]->toText(false), "hw-address", SUBNET_ID_UNUSED, SubnetID(1), - IOAddress("2001:db8:1::6") - )), HostMgrOperationTarget::ALL_SOURCES); + IOAddress::IPV4_ZERO_ADDRESS() + )); + host->addReservation(IPv6Resrv(IPv6Resrv::TYPE_NA, + IOAddress("2001:db8:1::6"), 128)); + HostMgr::instance().add(host, HostMgrOperationTarget::ALL_SOURCES); // Add hosts using the explicit operation target - primary data source. - HostMgr::instance().add(HostPtr(new Host( - hwaddrs_[0]->toText(false), "hw-address", + host = HostPtr(new Host( + hwaddrs_[4]->toText(false), "hw-address", SubnetID(1), SUBNET_ID_UNUSED, IOAddress("192.0.2.7") - )), HostMgrOperationTarget::PRIMARY_SOURCE); + )); + HostMgr::instance().add(host, HostMgrOperationTarget::PRIMARY_SOURCE); - HostMgr::instance().add(HostPtr(new Host( - hwaddrs_[1]->toText(false), "hw-address", + host = HostPtr(new Host( + hwaddrs_[5]->toText(false), "hw-address", SUBNET_ID_UNUSED, SubnetID(1), - IOAddress("2001:db8:1::7") - )), HostMgrOperationTarget::PRIMARY_SOURCE); + IOAddress::IPV4_ZERO_ADDRESS() + )); + host->addReservation(IPv6Resrv(IPv6Resrv::TYPE_NA, + IOAddress("2001:db8:1::7"), 128)); + HostMgr::instance().add(host, HostMgrOperationTarget::PRIMARY_SOURCE); // Add hosts using the explicit operation target - alternate data sources. - HostMgr::instance().add(HostPtr(new Host( - hwaddrs_[0]->toText(false), "hw-address", + host = HostPtr(new Host( + hwaddrs_[6]->toText(false), "hw-address", SubnetID(1), SUBNET_ID_UNUSED, IOAddress("192.0.2.8") - )), HostMgrOperationTarget::ALTERNATE_SOURCES); + )); + if (has_alternate_source) { + EXPECT_NO_THROW(HostMgr::instance().add(host, HostMgrOperationTarget::ALTERNATE_SOURCES)); + } else { + EXPECT_THROW(HostMgr::instance().add(host, HostMgrOperationTarget::ALTERNATE_SOURCES), NoHostDataSourceManager); + } - HostMgr::instance().add(HostPtr(new Host( - hwaddrs_[1]->toText(false), "hw-address", + host = HostPtr(new Host( + hwaddrs_[7]->toText(false), "hw-address", SUBNET_ID_UNUSED, SubnetID(1), - IOAddress("2001:db8:1::8") - )), HostMgrOperationTarget::ALTERNATE_SOURCES); + IOAddress::IPV4_ZERO_ADDRESS() + )); + host->addReservation(IPv6Resrv(IPv6Resrv::TYPE_NA, + IOAddress("2001:db8:1::8"), 128)); + if (has_alternate_source) { + EXPECT_NO_THROW(HostMgr::instance().add(host, HostMgrOperationTarget::ALTERNATE_SOURCES)); + } else { + EXPECT_THROW(HostMgr::instance().add(host, HostMgrOperationTarget::ALTERNATE_SOURCES), NoHostDataSourceManager); + } // Add hosts using the explicit operation target - unspecified data source. - HostMgr::instance().add(HostPtr(new Host( - hwaddrs_[0]->toText(false), "hw-address", + host = HostPtr(new Host( + hwaddrs_[8]->toText(false), "hw-address", SubnetID(1), SUBNET_ID_UNUSED, IOAddress("192.0.2.9") - )), HostMgrOperationTarget::UNSPECIFIED_SOURCE); + )); + HostMgr::instance().add(host, HostMgrOperationTarget::UNSPECIFIED_SOURCE); - HostMgr::instance().add(HostPtr(new Host( - hwaddrs_[1]->toText(false), "hw-address", + host = HostPtr(new Host( + hwaddrs_[9]->toText(false), "hw-address", SUBNET_ID_UNUSED, SubnetID(1), - IOAddress("2001:db8:1::9") - )), HostMgrOperationTarget::UNSPECIFIED_SOURCE); + IOAddress::IPV4_ZERO_ADDRESS() + )); + host->addReservation(IPv6Resrv(IPv6Resrv::TYPE_NA, + IOAddress("2001:db8:1::9"), 128)); + HostMgr::instance().add(host, HostMgrOperationTarget::UNSPECIFIED_SOURCE); // Verify the hosts were added. - bool is_first_source_primary = isPrimaryDataSource(data_source1); - bool is_second_source_primary = isPrimaryDataSource(data_source2); // ALL_SOURCES + PRIMARY_SOURCE targets for IPv4 and IPv6. - size_t hosts_in_primary_source = 2 * 2 * (is_first_source_primary + is_second_source_primary); + size_t hosts_in_primary_source = 2 * 2 * (is_first_source_primary || is_second_source_primary); // Default + ALL_SOURCES + ALTERNATE_SOURCES targets for IPv4 and IPv6. - size_t hosts_in_alternate_sources = 3 * 2 * (is_first_source_primary + is_second_source_primary); + size_t hosts_in_alternate_sources = 3 * 2 * (!is_first_source_primary || !is_second_source_primary); // Verify primary sources. hosts4 = HostMgr::instance().getAll4(SubnetID(1), HostMgrOperationTarget::PRIMARY_SOURCE);