Fix iteration in floatingip's add dependencies method

port.Port.FIXED_IPS can be None and we can't iterate by None.

Closes bug: #1608973

Change-Id: I273c6383ab77adfbc5c51b94a2f3b2fa7cdbafc0
This commit is contained in:
Dmitriy Uvarenkov 2016-08-02 16:53:40 +03:00
parent deb4031023
commit 432e240270
2 changed files with 35 additions and 3 deletions

View File

@ -330,9 +330,9 @@ class FloatingIPAssociation(neutron.NeutronResource):
def port_on_subnet(resource, subnet):
if not resource.has_interface('OS::Neutron::Port'):
return False
for fixed_ip in resource.properties.get(
port.Port.FIXED_IPS):
fixed_ips = resource.properties.get(
port.Port.FIXED_IPS) or []
for fixed_ip in fixed_ips:
port_subnet = (
fixed_ip.get(port.Port.FIXED_IP_SUBNET)
or fixed_ip.get(port.Port.FIXED_IP_SUBNET_ID))

View File

@ -730,3 +730,35 @@ class NeutronFloatingIPTest(common.HeatTestCase):
scheduler.TaskRunner(p.delete)()
self.m.VerifyAll()
def test_add_dependencies(self):
t = template_format.parse(neutron_floating_template)
stack = utils.parse_stack(t)
fipa = stack['floating_ip_assoc']
port = stack['port_floating']
r_int = stack['router_interface']
deps = mock.MagicMock()
dep_list = []
def iadd(obj):
dep_list.append(obj[1])
deps.__iadd__.side_effect = iadd
deps.graph.return_value = {fipa: [port]}
fipa.add_dependencies(deps)
self.assertEqual([r_int], dep_list)
def test_add_dependencies_without_fixed_ips_in_port(self):
t = template_format.parse(neutron_floating_template)
del t['resources']['port_floating']['properties']['fixed_ips']
stack = utils.parse_stack(t)
fipa = stack['floating_ip_assoc']
port = stack['port_floating']
deps = mock.MagicMock()
dep_list = []
def iadd(obj):
dep_list.append(obj[1])
deps.__iadd__.side_effect = iadd
deps.graph.return_value = {fipa: [port]}
fipa.add_dependencies(deps)
self.assertEqual([], dep_list)