]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#580,!308] Updated shared networks handling in test DHCP config backends.
authorMarcin Siodelski <marcin@isc.org>
Tue, 23 Apr 2019 14:13:13 +0000 (16:13 +0200)
committerMarcin Siodelski <marcin@isc.org>
Tue, 23 Apr 2019 14:13:13 +0000 (16:13 +0200)
src/lib/dhcpsrv/testutils/test_config_backend_dhcp4.cc
src/lib/dhcpsrv/testutils/test_config_backend_dhcp6.cc

index 59b576f3990f4dd97c7ea697512e254c3eed760f..9dc6e2604def7cfbe162f57b68b550081fbc9c7f 100644 (file)
@@ -367,23 +367,32 @@ uint64_t
 TestConfigBackendDHCPv4::deleteSharedNetworkSubnets4(const db::ServerSelector& /* server_selector */,
                                                      const std::string& shared_network_name) {
     uint64_t cnt = 0;
-    auto& index = shared_networks_.get<SharedNetworkNameIndexTag>();
-    auto network_it = index.find(shared_network_name);
-    if (network_it == index.end()) {
-        return (cnt);
-    }
-    for (auto subnet : *(*network_it)->getAllSubnets()) {
-        const SubnetID& subnet_id = subnet->getID();
-        auto& subnet_index = subnets_.get<SubnetSubnetIdIndexTag>();
-        cnt += subnet_index.erase(subnet_id);
+    auto& index = subnets_.get<SubnetRandomAccessIndexTag>();
+    for (auto subnet = index.begin(); subnet != index.end(); ++subnet) {
+        SharedNetwork4Ptr network;
+        (*subnet)->getSharedNetwork(network);
+        if (network && (network->getName() == shared_network_name)) {
+            network->del((*subnet)->getID());
+        }
+
+        if ((network && (network->getName() == shared_network_name)) ||
+            ((*subnet)->getSharedNetworkName() == shared_network_name)) {
+            subnet = index.erase(subnet);
+            ++cnt;
+        }
     }
-    (*network_it)->delAll();
     return (cnt);
 }
 
 uint64_t
 TestConfigBackendDHCPv4::deleteSharedNetwork4(const db::ServerSelector& /* server_selector */,
                                               const std::string& name) {
+    for (auto subnet = subnets_.begin(); subnet != subnets_.end(); ++subnet) {
+        if ((*subnet)->getSharedNetworkName() == name) {
+            (*subnet)->setSharedNetworkName("");
+        }
+    }
+
     auto& index = shared_networks_.get<SharedNetworkNameIndexTag>();
     auto network_it = index.find(name);
     if (network_it != index.end()) {
index 16ed733ee8180d9f6ac66e6406dac571e65e4b75..35c456a4a93d2824ba2ab9ba746c809f29a416f4 100644 (file)
@@ -386,23 +386,32 @@ uint64_t
 TestConfigBackendDHCPv6::deleteSharedNetworkSubnets6(const db::ServerSelector& /* server_selector */,
                                                      const std::string& shared_network_name) {
     uint64_t cnt = 0;
-    auto& index = shared_networks_.get<SharedNetworkNameIndexTag>();
-    auto network_it = index.find(shared_network_name);
-    if (network_it == index.end()) {
-        return (cnt);
-    }
-    for (auto subnet : *(*network_it)->getAllSubnets()) {
-        const SubnetID& subnet_id = subnet->getID();
-        auto& subnet_index = subnets_.get<SubnetSubnetIdIndexTag>();
-        cnt += subnet_index.erase(subnet_id);
+    auto& index = subnets_.get<SubnetRandomAccessIndexTag>();
+    for (auto subnet = index.begin(); subnet != index.end(); ++subnet) {
+        SharedNetwork6Ptr network;
+        (*subnet)->getSharedNetwork(network);
+        if (network && (network->getName() == shared_network_name)) {
+            network->del((*subnet)->getID());
+        }
+
+        if ((network && (network->getName() == shared_network_name)) ||
+            ((*subnet)->getSharedNetworkName() == shared_network_name)) {
+            subnet = index.erase(subnet);
+            ++cnt;
+        }
     }
-    (*network_it)->delAll();
     return (cnt);
 }
 
 uint64_t
 TestConfigBackendDHCPv6::deleteSharedNetwork6(const db::ServerSelector& /* server_selector */,
                                               const std::string& name) {
+    for (auto subnet = subnets_.begin(); subnet != subnets_.end(); ++subnet) {
+        if ((*subnet)->getSharedNetworkName() == name) {
+            (*subnet)->setSharedNetworkName("");
+        }
+    }
+
     auto& index = shared_networks_.get<SharedNetworkNameIndexTag>();
     auto network_it = index.find(name);
     if (network_it != index.end()) {