]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2815] Implement unit test
authorSlawek Figiel <slawek@isc.org>
Mon, 17 Apr 2023 19:44:33 +0000 (21:44 +0200)
committerSlawek Figiel <slawek@isc.org>
Thu, 25 May 2023 11:29:29 +0000 (13:29 +0200)
src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc

index 448bb8c657617fd97de4452c4ea9a0522af0e2c3..dcacbed9574bb9e037001cdbf898e437a2376065 100644 (file)
@@ -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<const CfgHosts*>(&data_source);
     return ptr != nullptr;