]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2815] Fix unit test
authorSlawek Figiel <slawek@isc.org>
Mon, 17 Apr 2023 20:24:37 +0000 (22:24 +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 dcacbed9574bb9e037001cdbf898e437a2376065..b033d48b27f5e2be1bc04e02c518aa539f2a4723 100644 (file)
@@ -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);