Merge "Randomize BaseFullStackTestCase._find_available_ips" into stable/train

This commit is contained in:
Zuul 2020-02-05 00:10:14 +00:00 committed by Gerrit Code Review
commit b639a83a8a
1 changed files with 13 additions and 12 deletions

View File

@ -13,7 +13,9 @@
# under the License. # under the License.
from concurrent import futures from concurrent import futures
import itertools
import os import os
import random
import netaddr import netaddr
from neutron_lib.tests import tools from neutron_lib.tests import tools
@ -127,18 +129,17 @@ class BaseFullStackTestCase(testlib_api.MySQLTestCaseMixin,
def _find_available_ips(self, network, subnet, num): def _find_available_ips(self, network, subnet, num):
ports = self.safe_client.list_ports(network_id=network['id']) ports = self.safe_client.list_ports(network_id=network['id'])
used_ips = [ip['ip_address'] used_ips = netaddr.IPSet(
for port in ports for ip in port['fixed_ips']] [netaddr.IPAddress(ip['ip_address'])
used_ips.append(subnet['gateway_ip']) for port in ports for ip in port['fixed_ips']])
available_ips = [] used_ips.add(netaddr.IPAddress(subnet['gateway_ip']))
for ip in netaddr.IPNetwork(subnet['cidr']).iter_hosts(): valid_ips = netaddr.IPSet(netaddr.IPNetwork(subnet['cidr']))
ip = str(ip) valid_ips = valid_ips.difference(used_ips)
if ip not in used_ips: if valid_ips.size < num:
available_ips.append(ip) self.fail("Cannot find enough free IP addresses.")
if len(available_ips) >= num: initial = random.randint(0, min(valid_ips.size - num, 1000))
return available_ips available_ips = itertools.islice(valid_ips, initial, initial + num)
return [str(available_ip) for available_ip in available_ips]
self.fail("Cannot find enough free IP addresses.")
def _create_external_vm(self, network, subnet): def _create_external_vm(self, network, subnet):
vm = self.useFixture( vm = self.useFixture(