From: Slawek Figiel Date: Mon, 17 Apr 2023 19:44:33 +0000 (+0200) Subject: [#2815] Implement unit test X-Git-Tag: Kea-2.3.8~56 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a55aaf478157739f2b1021dafdf8f6a4222dfec8;p=thirdparty%2Fkea.git [#2815] Implement 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 448bb8c657..dcacbed957 100644 --- a/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc +++ b/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc @@ -4593,7 +4593,6 @@ HostMgrTest::testDelete4ByIDAndIdentifier(BaseHostDataSource& data_source1, ASSERT_EQ(hosts_in_primary_source, HostMgr::instance().getAll4(SubnetID(1)).size()); HostMgr::instance().del(SubnetID(1), IOAddress("192.0.2.5"), HostMgrOperationTarget::ALL_SOURCES); - HostMgr::instance().del(SubnetID(1), IOAddress("2001:db8:1::5"), HostMgrOperationTarget::ALL_SOURCES); // Delete from the explicit operation target - alternate sources. addHost4(data_source1, hwaddrs_[0], SubnetID(1), IOAddress("192.0.2.5")); @@ -4647,6 +4646,96 @@ HostMgrTest::testDelete4ByIDAndIdentifier(BaseHostDataSource& data_source1, HostMgr::instance().del(SubnetID(1), IOAddress("192.0.2.5"), HostMgrOperationTarget::ALL_SOURCES); } +void +HostMgrTest::testDelete6ByIDAndIdentifier(BaseHostDataSource& data_source1, + BaseHostDataSource& data_source2) { + 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; + 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")); + + 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); + + ASSERT_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")); + + 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()); + + ASSERT_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")); + + 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); + + ASSERT_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")); + + 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); + + ASSERT_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")); + + 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, + &duids_[1]->getDuid()[0], + duids_[1]->getDuid().size(), + HostMgrOperationTarget::UNSPECIFIED_SOURCE); + + ASSERT_EQ(2, HostMgr::instance().getAll6(SubnetID(1)).size()); + + HostMgr::instance().del(SubnetID(1), IOAddress("2001:db8:1::5"), HostMgrOperationTarget::ALL_SOURCES); +} + bool HostMgrTest::isPrimaryDataSource(const BaseHostDataSource& data_source) const { const auto ptr = dynamic_cast(&data_source); return ptr != nullptr;