Merge "Fixes race condition in test_add_remove_fixed_ip"
This commit is contained in:
commit
b47d1d2b8a
|
@ -86,12 +86,16 @@ class AttachInterfacesTestBase(base.BaseV2ComputeTest):
|
||||||
# apparently not enough? Add cleanup here.
|
# apparently not enough? Add cleanup here.
|
||||||
self.addCleanup(self.delete_server, server['id'])
|
self.addCleanup(self.delete_server, server['id'])
|
||||||
self._wait_for_validation(server, validation_resources)
|
self._wait_for_validation(server, validation_resources)
|
||||||
|
try:
|
||||||
|
fip = set([validation_resources['floating_ip']['ip']])
|
||||||
|
except KeyError:
|
||||||
|
fip = ()
|
||||||
ifs = (self.interfaces_client.list_interfaces(server['id'])
|
ifs = (self.interfaces_client.list_interfaces(server['id'])
|
||||||
['interfaceAttachments'])
|
['interfaceAttachments'])
|
||||||
body = waiters.wait_for_interface_status(
|
body = waiters.wait_for_interface_status(
|
||||||
self.interfaces_client, server['id'], ifs[0]['port_id'], 'ACTIVE')
|
self.interfaces_client, server['id'], ifs[0]['port_id'], 'ACTIVE')
|
||||||
ifs[0]['port_state'] = body['port_state']
|
ifs[0]['port_state'] = body['port_state']
|
||||||
return server, ifs
|
return server, ifs, fip
|
||||||
|
|
||||||
|
|
||||||
class AttachInterfacesTestJSON(AttachInterfacesTestBase):
|
class AttachInterfacesTestJSON(AttachInterfacesTestBase):
|
||||||
|
@ -226,7 +230,7 @@ class AttachInterfacesTestJSON(AttachInterfacesTestBase):
|
||||||
@decorators.idempotent_id('73fe8f02-590d-4bf1-b184-e9ca81065051')
|
@decorators.idempotent_id('73fe8f02-590d-4bf1-b184-e9ca81065051')
|
||||||
@utils.services('network')
|
@utils.services('network')
|
||||||
def test_create_list_show_delete_interfaces_by_network_port(self):
|
def test_create_list_show_delete_interfaces_by_network_port(self):
|
||||||
server, ifs = self._create_server_get_interfaces()
|
server, ifs, _ = self._create_server_get_interfaces()
|
||||||
interface_count = len(ifs)
|
interface_count = len(ifs)
|
||||||
self.assertGreater(interface_count, 0)
|
self.assertGreater(interface_count, 0)
|
||||||
|
|
||||||
|
@ -268,7 +272,7 @@ class AttachInterfacesTestJSON(AttachInterfacesTestBase):
|
||||||
raise self.skipException("Only owner network supports "
|
raise self.skipException("Only owner network supports "
|
||||||
"creating interface by fixed ip.")
|
"creating interface by fixed ip.")
|
||||||
|
|
||||||
server, ifs = self._create_server_get_interfaces()
|
server, ifs, _ = self._create_server_get_interfaces()
|
||||||
interface_count = len(ifs)
|
interface_count = len(ifs)
|
||||||
self.assertGreater(interface_count, 0)
|
self.assertGreater(interface_count, 0)
|
||||||
|
|
||||||
|
@ -354,9 +358,8 @@ class AttachInterfacesUnderV243Test(AttachInterfacesTestBase):
|
||||||
not CONF.network.shared_physical_network):
|
not CONF.network.shared_physical_network):
|
||||||
raise self.skipException("Only owner network supports "
|
raise self.skipException("Only owner network supports "
|
||||||
"creating interface by fixed ip.")
|
"creating interface by fixed ip.")
|
||||||
|
|
||||||
# Add and Remove the fixed IP to server.
|
# Add and Remove the fixed IP to server.
|
||||||
server, ifs = self._create_server_get_interfaces()
|
server, ifs, fip = self._create_server_get_interfaces()
|
||||||
original_interface_count = len(ifs) # This is the number of ports.
|
original_interface_count = len(ifs) # This is the number of ports.
|
||||||
self.assertGreater(original_interface_count, 0)
|
self.assertGreater(original_interface_count, 0)
|
||||||
# Get the starting list of IPs on the server.
|
# Get the starting list of IPs on the server.
|
||||||
|
@ -369,6 +372,9 @@ class AttachInterfacesUnderV243Test(AttachInterfacesTestBase):
|
||||||
self.assertEqual(1, len(addresses), addresses) # number of networks
|
self.assertEqual(1, len(addresses), addresses) # number of networks
|
||||||
# Keep track of the original addresses so we can know which IP is new.
|
# Keep track of the original addresses so we can know which IP is new.
|
||||||
original_ips = [addr['addr'] for addr in list(addresses.values())[0]]
|
original_ips = [addr['addr'] for addr in list(addresses.values())[0]]
|
||||||
|
# Make sure the floating IP possibly assigned during
|
||||||
|
# server creation is always present in the set of original ips.
|
||||||
|
original_ips = set(original_ips).union(fip)
|
||||||
original_ip_count = len(original_ips)
|
original_ip_count = len(original_ips)
|
||||||
self.assertGreater(original_ip_count, 0, addresses) # at least 1
|
self.assertGreater(original_ip_count, 0, addresses) # at least 1
|
||||||
network_id = ifs[0]['net_id']
|
network_id = ifs[0]['net_id']
|
||||||
|
@ -376,40 +382,22 @@ class AttachInterfacesUnderV243Test(AttachInterfacesTestBase):
|
||||||
# fixed IP on the same network (and same port since we only have one
|
# fixed IP on the same network (and same port since we only have one
|
||||||
# port).
|
# port).
|
||||||
self.servers_client.add_fixed_ip(server['id'], networkId=network_id)
|
self.servers_client.add_fixed_ip(server['id'], networkId=network_id)
|
||||||
# Wait for the ips count to increase by one.
|
|
||||||
|
|
||||||
def _get_server_floating_ips():
|
def _wait_for_ip_change(expected_count):
|
||||||
_floating_ips = []
|
|
||||||
_server = self.os_primary.servers_client.show_server(
|
|
||||||
server['id'])['server']
|
|
||||||
for _ip_set in _server['addresses']:
|
|
||||||
for _ip in _server['addresses'][_ip_set]:
|
|
||||||
if _ip['OS-EXT-IPS:type'] == 'floating':
|
|
||||||
_floating_ips.append(_ip['addr'])
|
|
||||||
return _floating_ips
|
|
||||||
|
|
||||||
def _wait_for_ip_increase():
|
|
||||||
_addresses = self.os_primary.servers_client.list_addresses(
|
_addresses = self.os_primary.servers_client.list_addresses(
|
||||||
server['id'])['addresses']
|
server['id'])['addresses']
|
||||||
_ips = [addr['addr'] for addr in list(_addresses.values())[0]]
|
_ips = set([addr['addr'] for addr in list(_addresses.values())[0]])
|
||||||
LOG.debug("Wait for IP increase. All IPs still associated to "
|
# Make sure possible floating ip is always present in the set.
|
||||||
|
_ips = _ips.union(fip)
|
||||||
|
LOG.debug("Wait for change of IPs. All IPs still associated to "
|
||||||
"the server %(id)s: %(ips)s",
|
"the server %(id)s: %(ips)s",
|
||||||
{'id': server['id'], 'ips': _ips})
|
{'id': server['id'], 'ips': _ips})
|
||||||
if len(_ips) == original_ip_count + 1:
|
return len(_ips) == expected_count
|
||||||
return True
|
|
||||||
elif len(_ips) == original_ip_count:
|
|
||||||
return False
|
|
||||||
# If not, lets remove any floating IP from the list and check again
|
|
||||||
_fips = _get_server_floating_ips()
|
|
||||||
_ips = [_ip for _ip in _ips if _ip not in _fips]
|
|
||||||
LOG.debug("Wait for IP increase. Fixed IPs still associated to "
|
|
||||||
"the server %(id)s: %(ips)s",
|
|
||||||
{'id': server['id'], 'ips': _ips})
|
|
||||||
return len(_ips) == original_ip_count + 1
|
|
||||||
|
|
||||||
|
# Wait for the ips count to increase by one.
|
||||||
if not test_utils.call_until_true(
|
if not test_utils.call_until_true(
|
||||||
_wait_for_ip_increase, CONF.compute.build_timeout,
|
_wait_for_ip_change, CONF.compute.build_timeout,
|
||||||
CONF.compute.build_interval):
|
CONF.compute.build_interval, original_ip_count + 1):
|
||||||
raise lib_exc.TimeoutException(
|
raise lib_exc.TimeoutException(
|
||||||
'Timed out while waiting for IP count to increase.')
|
'Timed out while waiting for IP count to increase.')
|
||||||
|
|
||||||
|
@ -428,26 +416,8 @@ class AttachInterfacesUnderV243Test(AttachInterfacesTestBase):
|
||||||
break
|
break
|
||||||
self.servers_client.remove_fixed_ip(server['id'], address=fixed_ip)
|
self.servers_client.remove_fixed_ip(server['id'], address=fixed_ip)
|
||||||
# Wait for the interface count to decrease by one.
|
# Wait for the interface count to decrease by one.
|
||||||
|
|
||||||
def _wait_for_ip_decrease():
|
|
||||||
_addresses = self.os_primary.servers_client.list_addresses(
|
|
||||||
server['id'])['addresses']
|
|
||||||
_ips = [addr['addr'] for addr in list(_addresses.values())[0]]
|
|
||||||
LOG.debug("Wait for IP decrease. All IPs still associated to "
|
|
||||||
"the server %(id)s: %(ips)s",
|
|
||||||
{'id': server['id'], 'ips': _ips})
|
|
||||||
if len(_ips) == original_ip_count:
|
|
||||||
return True
|
|
||||||
# If not, lets remove any floating IP from the list and check again
|
|
||||||
_fips = _get_server_floating_ips()
|
|
||||||
_ips = [_ip for _ip in _ips if _ip not in _fips]
|
|
||||||
LOG.debug("Wait for IP decrease. Fixed IPs still associated to "
|
|
||||||
"the server %(id)s: %(ips)s",
|
|
||||||
{'id': server['id'], 'ips': _ips})
|
|
||||||
return len(_ips) == original_ip_count
|
|
||||||
|
|
||||||
if not test_utils.call_until_true(
|
if not test_utils.call_until_true(
|
||||||
_wait_for_ip_decrease, CONF.compute.build_timeout,
|
_wait_for_ip_change, CONF.compute.build_timeout,
|
||||||
CONF.compute.build_interval):
|
CONF.compute.build_interval, original_ip_count):
|
||||||
raise lib_exc.TimeoutException(
|
raise lib_exc.TimeoutException(
|
||||||
'Timed out while waiting for IP count to decrease.')
|
'Timed out while waiting for IP count to decrease.')
|
||||||
|
|
Loading…
Reference in New Issue