From: Slawek Figiel Date: Tue, 18 Apr 2023 12:13:27 +0000 (+0200) Subject: [#2815] Fix unit test X-Git-Tag: Kea-2.3.8~52 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=94cb9661fa4c1e06523c3451625e5bd9c2b7c940;p=thirdparty%2Fkea.git [#2815] Fix unit test --- diff --git a/src/lib/dhcpsrv/cfg_hosts.cc b/src/lib/dhcpsrv/cfg_hosts.cc index c5d54034bd..22b48aa3f3 100644 --- a/src/lib/dhcpsrv/cfg_hosts.cc +++ b/src/lib/dhcpsrv/cfg_hosts.cc @@ -1202,10 +1202,11 @@ CfgHosts::del6(const SubnetID& subnet_id, } // Delete host. + auto host_id = (*key)->getHostId(); key = idx.erase(key); erased_hosts++; // Delete reservations. - erased_reservations += idx6.erase((*key)->getHostId()); + erased_reservations += idx6.erase(host_id); } LOG_DEBUG(hosts_logger, HOSTS_DBG_TRACE, HOSTS_CFG_DEL6) 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 a066a33ea0..38939277dd 100644 --- a/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc +++ b/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc @@ -4767,94 +4767,130 @@ HostMgrTest::testDelete4ByIDAndIdentifier(BaseHostDataSource& data_source1, void HostMgrTest::testDelete6ByIDAndIdentifier(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); + 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; size_t hosts_in_primary_source = is_first_source_primary + is_second_source_primary; size_t hosts_in_alternate_sources = 2 - hosts_in_primary_source; // Delete from the explicit operation target - all sources. - addHost6(data_source1, duids_[0], SubnetID(1), IOAddress("2001:db8:1::5")); - addHost6(data_source2, duids_[1], SubnetID(1), IOAddress("2001:db8:1::5")); + addHost6(data_source1, duids_[0], SubnetID(1), IOAddress("2001:db8:1::5"), 128); + addHost6(data_source2, duids_[1], SubnetID(1), IOAddress("2001:db8:1::5"), 128); CfgMgr::instance().commit(); - HostMgr::instance().del6(SubnetID(1), Host::IDENT_DUID, - &duids_[0]->getDuid()[0], - duids_[0]->getDuid().size(), - HostMgrOperationTarget::ALL_SOURCES); - HostMgr::instance().del6(SubnetID(1),Host::IDENT_DUID, - &duids_[1]->getDuid()[0], - duids_[1]->getDuid().size(), - HostMgrOperationTarget::ALL_SOURCES); + EXPECT_TRUE(HostMgr::instance().del6(SubnetID(1), Host::IDENT_DUID, + &duids_[0]->getDuid()[0], + duids_[0]->getDuid().size(), + HostMgrOperationTarget::ALL_SOURCES)); + EXPECT_TRUE(HostMgr::instance().del6(SubnetID(1),Host::IDENT_DUID, + &duids_[1]->getDuid()[0], + duids_[1]->getDuid().size(), + HostMgrOperationTarget::ALL_SOURCES)); - ASSERT_TRUE(HostMgr::instance().getAll6(SubnetID(1)).empty()); + EXPECT_TRUE(HostMgr::instance().getAll6(SubnetID(1)).empty()); // Delete from the default operation target. - addHost6(data_source1, duids_[0], SubnetID(1), IOAddress("2001:db8:1::5")); - addHost6(data_source2, duids_[1], SubnetID(1), IOAddress("2001:db8:1::5")); + addHost6(data_source1, duids_[0], SubnetID(1), IOAddress("2001:db8:1::5"), 128); + addHost6(data_source2, duids_[1], SubnetID(1), IOAddress("2001:db8:1::5"), 128); CfgMgr::instance().commit(); - HostMgr::instance().del6(SubnetID(1), Host::IDENT_DUID, - &duids_[0]->getDuid()[0], - duids_[0]->getDuid().size()); - HostMgr::instance().del6(SubnetID(1),Host::IDENT_DUID, - &duids_[1]->getDuid()[0], - duids_[1]->getDuid().size()); + if (has_alternate_source) { + EXPECT_EQ(!is_first_source_primary, HostMgr::instance().del6(SubnetID(1), + Host::IDENT_DUID, + &duids_[0]->getDuid()[0], + duids_[0]->getDuid().size())); + EXPECT_EQ(!is_second_source_primary, HostMgr::instance().del6(SubnetID(1), + Host::IDENT_DUID, + &duids_[1]->getDuid()[0], + duids_[1]->getDuid().size())); + } else { + EXPECT_THROW(HostMgr::instance().del6(SubnetID(1), Host::IDENT_DUID, + &duids_[0]->getDuid()[0], + duids_[0]->getDuid().size()), + NoHostDataSourceManager); + EXPECT_THROW(HostMgr::instance().del6(SubnetID(1),Host::IDENT_DUID, + &duids_[1]->getDuid()[0], + duids_[1]->getDuid().size()), + NoHostDataSourceManager); + } - ASSERT_EQ(hosts_in_primary_source, HostMgr::instance().getAll6(SubnetID(1)).size()); + EXPECT_EQ(hosts_in_primary_source, HostMgr::instance().getAll6(SubnetID(1)).size()); HostMgr::instance().del(SubnetID(1), IOAddress("2001:db8:1::5"), HostMgrOperationTarget::ALL_SOURCES); // Delete from the explicit operation target - alternate sources. - addHost6(data_source1, duids_[0], SubnetID(1), IOAddress("2001:db8:1::5")); - addHost6(data_source2, duids_[1], SubnetID(1), IOAddress("2001:db8:1::5")); + addHost6(data_source1, duids_[0], SubnetID(1), IOAddress("2001:db8:1::5"), 128); + addHost6(data_source2, duids_[1], SubnetID(1), IOAddress("2001:db8:1::5"), 128); CfgMgr::instance().commit(); - HostMgr::instance().del6(SubnetID(1), Host::IDENT_DUID, - &duids_[0]->getDuid()[0], - duids_[0]->getDuid().size(), - HostMgrOperationTarget::ALTERNATE_SOURCES); - HostMgr::instance().del6(SubnetID(1),Host::IDENT_DUID, - &duids_[1]->getDuid()[0], - duids_[1]->getDuid().size(), - HostMgrOperationTarget::ALTERNATE_SOURCES); + if (has_alternate_source) { + EXPECT_EQ(!is_first_source_primary, HostMgr::instance().del6(SubnetID(1), + Host::IDENT_DUID, + &duids_[0]->getDuid()[0], + duids_[0]->getDuid().size(), + HostMgrOperationTarget::ALTERNATE_SOURCES)); + EXPECT_EQ(!is_second_source_primary, HostMgr::instance().del6(SubnetID(1), + Host::IDENT_DUID, + &duids_[1]->getDuid()[0], + duids_[1]->getDuid().size(), + HostMgrOperationTarget::ALTERNATE_SOURCES)); + } else { + EXPECT_THROW(HostMgr::instance().del6(SubnetID(1), Host::IDENT_DUID, + &duids_[0]->getDuid()[0], + duids_[0]->getDuid().size(), + HostMgrOperationTarget::ALTERNATE_SOURCES), + NoHostDataSourceManager); + EXPECT_THROW(HostMgr::instance().del6(SubnetID(1),Host::IDENT_DUID, + &duids_[1]->getDuid()[0], + duids_[1]->getDuid().size(), + HostMgrOperationTarget::ALTERNATE_SOURCES), + NoHostDataSourceManager); + } - ASSERT_EQ(hosts_in_primary_source, HostMgr::instance().getAll6(SubnetID(1)).size()); + EXPECT_EQ(hosts_in_primary_source, HostMgr::instance().getAll6(SubnetID(1)).size()); HostMgr::instance().del(SubnetID(1), IOAddress("2001:db8:1::5"), HostMgrOperationTarget::ALL_SOURCES); // Delete from the explicit operation target - primary source. - addHost6(data_source1, duids_[0], SubnetID(1), IOAddress("2001:db8:1::5")); - addHost6(data_source2, duids_[1], SubnetID(1), IOAddress("2001:db8:1::5")); + addHost6(data_source1, duids_[0], SubnetID(1), IOAddress("2001:db8:1::5"), 128); + addHost6(data_source2, duids_[1], SubnetID(1), IOAddress("2001:db8:1::5"), 128); CfgMgr::instance().commit(); - HostMgr::instance().del6(SubnetID(1), Host::IDENT_DUID, - &duids_[0]->getDuid()[0], - duids_[0]->getDuid().size(), - HostMgrOperationTarget::PRIMARY_SOURCE); - HostMgr::instance().del6(SubnetID(1),Host::IDENT_DUID, - &duids_[1]->getDuid()[0], - duids_[1]->getDuid().size(), - HostMgrOperationTarget::PRIMARY_SOURCE); + EXPECT_EQ(is_first_source_primary, HostMgr::instance().del6(SubnetID(1), + Host::IDENT_DUID, + &duids_[0]->getDuid()[0], + duids_[0]->getDuid().size(), + HostMgrOperationTarget::PRIMARY_SOURCE)); + EXPECT_EQ(is_second_source_primary, HostMgr::instance().del6(SubnetID(1), + Host::IDENT_DUID, + &duids_[1]->getDuid()[0], + duids_[1]->getDuid().size(), + HostMgrOperationTarget::PRIMARY_SOURCE)); - ASSERT_EQ(hosts_in_alternate_sources, HostMgr::instance().getAll6(SubnetID(1)).size()); + EXPECT_EQ(hosts_in_alternate_sources, HostMgr::instance().getAll6(SubnetID(1)).size()); HostMgr::instance().del(SubnetID(1), IOAddress("2001:db8:1::5"), HostMgrOperationTarget::ALL_SOURCES); // Delete from the explicit operation target - unspecified source. - addHost6(data_source1, duids_[0], SubnetID(1), IOAddress("2001:db8:1::5")); - addHost6(data_source2, duids_[1], SubnetID(1), IOAddress("2001:db8:1::5")); + addHost6(data_source1, duids_[0], SubnetID(1), IOAddress("2001:db8:1::5"), 128); + addHost6(data_source2, duids_[1], SubnetID(1), IOAddress("2001:db8:1::5"), 128); CfgMgr::instance().commit(); - HostMgr::instance().del6(SubnetID(1),Host::IDENT_DUID, + EXPECT_FALSE(HostMgr::instance().del6(SubnetID(1),Host::IDENT_DUID, &duids_[0]->getDuid()[0], duids_[0]->getDuid().size(), - HostMgrOperationTarget::UNSPECIFIED_SOURCE); - HostMgr::instance().del6(SubnetID(1), Host::IDENT_DUID, + HostMgrOperationTarget::UNSPECIFIED_SOURCE)); + EXPECT_FALSE(HostMgr::instance().del6(SubnetID(1), Host::IDENT_DUID, &duids_[1]->getDuid()[0], duids_[1]->getDuid().size(), - HostMgrOperationTarget::UNSPECIFIED_SOURCE); + HostMgrOperationTarget::UNSPECIFIED_SOURCE)); - ASSERT_EQ(2, HostMgr::instance().getAll6(SubnetID(1)).size()); + EXPECT_EQ(2, HostMgr::instance().getAll6(SubnetID(1)).size()); HostMgr::instance().del(SubnetID(1), IOAddress("2001:db8:1::5"), HostMgrOperationTarget::ALL_SOURCES); }