diff --git a/nova/network/neutronv2/api.py b/nova/network/neutronv2/api.py index 50659b62c8de..ee832f1f9b36 100644 --- a/nova/network/neutronv2/api.py +++ b/nova/network/neutronv2/api.py @@ -1283,7 +1283,7 @@ class API(base_api.NetworkAPI): return network_model.NetworkInfo.hydrate(nw_info) def _gather_port_ids_and_networks(self, context, instance, networks=None, - port_ids=None): + port_ids=None, neutron=None): """Return an instance's complete list of port_ids and networks.""" if ((networks is None and port_ids is not None) or @@ -1302,7 +1302,7 @@ class API(base_api.NetworkAPI): if networks is None: networks = self._get_available_networks(context, instance.project_id, - net_ids) + net_ids, neutron) # an interface was added/removed from instance. else: @@ -2049,8 +2049,8 @@ class API(base_api.NetworkAPI): network_IPs.append(fixed) return network_IPs - def _nw_info_get_subnets(self, context, port, network_IPs): - subnets = self._get_subnets_from_port(context, port) + def _nw_info_get_subnets(self, context, port, network_IPs, client=None): + subnets = self._get_subnets_from_port(context, port, client) for subnet in subnets: subnet['ips'] = [fixed_ip for fixed_ip in network_IPs if fixed_ip.is_in_subnet(subnet)] @@ -2167,7 +2167,7 @@ class API(base_api.NetworkAPI): current_neutron_ports = data.get('ports', []) nw_info_refresh = networks is None and port_ids is None networks, port_ids = self._gather_port_ids_and_networks( - context, instance, networks, port_ids) + context, instance, networks, port_ids, client) nw_info = network_model.NetworkInfo() if preexisting_port_ids is None: @@ -2192,7 +2192,7 @@ class API(base_api.NetworkAPI): current_neutron_port) subnets = self._nw_info_get_subnets(context, current_neutron_port, - network_IPs) + network_IPs, client) devname = "tap" + current_neutron_port['id'] devname = devname[:network_model.NIC_NAME_LEN] @@ -2225,7 +2225,7 @@ class API(base_api.NetworkAPI): return nw_info - def _get_subnets_from_port(self, context, port): + def _get_subnets_from_port(self, context, port, client=None): """Return the subnets for a given port.""" fixed_ips = port['fixed_ips'] @@ -2236,8 +2236,10 @@ class API(base_api.NetworkAPI): # related to the port. To avoid this, the method returns here. if not fixed_ips: return [] + if not client: + client = get_client(context) search_opts = {'id': [ip['subnet_id'] for ip in fixed_ips]} - data = get_client(context).list_subnets(**search_opts) + data = client.list_subnets(**search_opts) ipam_subnets = data.get('subnets', []) subnets = [] @@ -2251,7 +2253,7 @@ class API(base_api.NetworkAPI): # attempt to populate DHCP server field search_opts = {'network_id': subnet['network_id'], 'device_owner': 'network:dhcp'} - data = get_client(context).list_ports(**search_opts) + data = client.list_ports(**search_opts) dhcp_ports = data.get('ports', []) for p in dhcp_ports: for ip_pair in p['fixed_ips']: diff --git a/nova/tests/unit/network/test_neutronv2.py b/nova/tests/unit/network/test_neutronv2.py index fbf412a4c1b5..04792ed62d51 100644 --- a/nova/tests/unit/network/test_neutronv2.py +++ b/nova/tests/unit/network/test_neutronv2.py @@ -800,11 +800,6 @@ class TestNeutronv2Base(test.TestCase): class TestNeutronv2(TestNeutronv2Base): - def setUp(self): - super(TestNeutronv2, self).setUp() - neutronapi.get_client(mox.IgnoreArg()).MultipleTimes().AndReturn( - self.moxed_client) - def test_get_instance_nw_info_1(self): # Test to get one port in one network and subnet. neutronapi.get_client(mox.IgnoreArg(), @@ -1023,6 +1018,8 @@ class TestNeutronv2(TestNeutronv2Base): api.db.instance_info_cache_update( mox.IgnoreArg(), self.instance['uuid'], mox.IgnoreArg()).AndReturn(fake_info_cache) + neutronapi.get_client(mox.IgnoreArg(), admin=True).AndReturn( + self.moxed_client) self.moxed_client.list_ports( tenant_id=self.instance['project_id'], device_id=self.instance['uuid']).AndReturn( @@ -1030,9 +1027,6 @@ class TestNeutronv2(TestNeutronv2Base): self.moxed_client.list_networks( id=[self.port_data1[0]['network_id']]).AndReturn( {'networks': self.nets1}) - neutronapi.get_client(mox.IgnoreArg(), - admin=True).MultipleTimes().AndReturn( - self.moxed_client) net_info_cache = [] for port in self.port_data3: @@ -1095,10 +1089,12 @@ class TestNeutronv2(TestNeutronv2Base): def test_allocate_for_instance_1(self): # Allocate one port in one network env. + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self._allocate_for_instance(1) def test_allocate_for_instance_2(self): # Allocate one port in two networks env. + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) api = self._stub_allocate_for_instance(net_idx=2) self.assertRaises(exception.NetworkAmbiguous, api.allocate_for_instance, @@ -1106,17 +1102,20 @@ class TestNeutronv2(TestNeutronv2Base): def test_allocate_for_instance_accepts_macs_kwargs_None(self): # The macs kwarg should be accepted as None. + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self._allocate_for_instance(1, macs=None) def test_allocate_for_instance_accepts_macs_kwargs_set(self): # The macs kwarg should be accepted, as a set, the # _allocate_for_instance helper checks that the mac is used to create a # port. + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self._allocate_for_instance(1, macs=set(['ab:cd:ef:01:23:45'])) def test_allocate_for_instance_with_mac_added_to_port(self): requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(port_id=uuids.portid_1)]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) # NOTE(johngarbutt) we override the provided mac with a new one self._allocate_for_instance(net_idx=1, requested_networks=requested_networks, @@ -1127,6 +1126,7 @@ class TestNeutronv2(TestNeutronv2Base): def test_allocate_for_instance_accepts_only_portid(self): # Make sure allocate_for_instance works when only a portid is provided self._returned_nw_info = self.port_data1 + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) result = self._allocate_for_instance( requested_networks=objects.NetworkRequestList( objects=[objects.NetworkRequest(port_id=uuids.portid_1, @@ -1152,6 +1152,7 @@ class TestNeutronv2(TestNeutronv2Base): objects = [ objects.NetworkRequest(network_id=self.nets2[1]['id']), objects.NetworkRequest(port_id=uuids.portid_1)]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) api = self._stub_allocate_for_instance( net_idx=2, requested_networks=requested_networks, macs=set(['my_mac1']), @@ -1173,6 +1174,7 @@ class TestNeutronv2(TestNeutronv2Base): requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(network_id=self.nets2[1]['id']), objects.NetworkRequest(network_id=self.nets2[0]['id'])]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) api = self._stub_allocate_for_instance( net_idx=2, requested_networks=requested_networks, macs=set(['my_mac2']), @@ -1192,11 +1194,13 @@ class TestNeutronv2(TestNeutronv2Base): requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(network_id=self.nets2[1]['id']), objects.NetworkRequest(network_id=self.nets2[0]['id'])]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self._allocate_for_instance( net_idx=2, requested_networks=requested_networks, macs=set(['my_mac2', 'my_mac1'])) def test_allocate_for_instance_without_requested_networks(self): + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) api = self._stub_allocate_for_instance(net_idx=3) self.assertRaises(exception.NetworkAmbiguous, api.allocate_for_instance, @@ -1211,6 +1215,7 @@ class TestNeutronv2(TestNeutronv2Base): objects=[objects.NetworkRequest(network_id=net['id']) for net in (self.nets3[0], self.nets3[2], self.nets3[1])]) requested_networks[0].tag = 'foo' + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self._allocate_for_instance(net_idx=2, requested_networks=requested_networks) self.assertEqual(2, len(self._vifs_created)) @@ -1229,6 +1234,7 @@ class TestNeutronv2(TestNeutronv2Base): requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(network_id=net['id']) for net in (self.nets3[1], self.nets3[0], self.nets3[2])]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self._allocate_for_instance(net_idx=3, requested_networks=requested_networks) @@ -1238,6 +1244,7 @@ class TestNeutronv2(TestNeutronv2Base): # able to associate the default security group to the port # requested to be created. We expect an exception to be # raised. + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.assertRaises(exception.SecurityGroupCannotBeApplied, self._allocate_for_instance, net_idx=4, _break='post_list_extensions') @@ -1246,6 +1253,7 @@ class TestNeutronv2(TestNeutronv2Base): requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest( network_id=uuids.non_existent_uuid)]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) api = self._stub_allocate_for_instance(net_idx=9, requested_networks=requested_networks, _break='post_list_networks') @@ -1259,12 +1267,14 @@ class TestNeutronv2(TestNeutronv2Base): requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(network_id=self.nets1[0]['id'], address='10.0.1.0')]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self._allocate_for_instance(net_idx=1, requested_networks=requested_networks) def test_allocate_for_instance_with_requested_networks_with_port(self): requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(port_id=uuids.portid_1)]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self._allocate_for_instance(net_idx=1, requested_networks=requested_networks) @@ -1277,6 +1287,7 @@ class TestNeutronv2(TestNeutronv2Base): tenant_id=self.instance.project_id, shared=False).AndReturn( {'networks': model.NetworkInfo([])}) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks(shared=True).AndReturn( {'networks': model.NetworkInfo([])}) self.mox.ReplayAll() @@ -1302,6 +1313,7 @@ class TestNeutronv2(TestNeutronv2Base): requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(network_id=net['id']) for net in (self.nets2[0], self.nets2[1])]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks( id=[uuids.my_netid1, uuids.my_netid2]).AndReturn( {'networks': self.nets2}) @@ -1367,6 +1379,7 @@ class TestNeutronv2(TestNeutronv2Base): requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(network_id=net['id']) for net in (self.nets2[0], self.nets2[1])]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks( id=[uuids.my_netid1, uuids.my_netid2]).AndReturn( {'networks': self.nets2}) @@ -1392,6 +1405,7 @@ class TestNeutronv2(TestNeutronv2Base): self.instance = fake_instance.fake_instance_obj(self.context, **self.instance) api = neutronapi.API() + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.mox.StubOutWithMock(api, '_get_available_networks') # Make sure we get an empty list and then bail out of the rest # of the function @@ -1413,6 +1427,7 @@ class TestNeutronv2(TestNeutronv2Base): # allocated during _that_ run. new_port = {'id': uuids.fake} self._returned_nw_info = self.port_data1 + [new_port] + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) nw_info = self._allocate_for_instance() self.assertEqual([new_port], nw_info) @@ -1420,6 +1435,7 @@ class TestNeutronv2(TestNeutronv2Base): # If a port is already in use, an exception should be raised. requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(port_id=uuids.portid_1)]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) api = self._stub_allocate_for_instance( requested_networks=requested_networks, _break='pre_list_networks', @@ -1432,6 +1448,7 @@ class TestNeutronv2(TestNeutronv2Base): # If a port is not found, an exception should be raised. requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(port_id=uuids.non_existent_uuid)]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) api = self._stub_allocate_for_instance( requested_networks=requested_networks, _break='pre_list_networks') @@ -1443,6 +1460,7 @@ class TestNeutronv2(TestNeutronv2Base): self.tenant_id = 'invalid_id' requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(port_id=uuids.portid_1)]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) api = self._stub_allocate_for_instance( requested_networks=requested_networks, _break='pre_list_networks') @@ -1456,6 +1474,7 @@ class TestNeutronv2(TestNeutronv2Base): """ self.instance = fake_instance.fake_instance_obj(self.context, **self.instance) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) # no networks in the tenant self.moxed_client.list_networks( tenant_id=self.instance.project_id, @@ -1476,6 +1495,7 @@ class TestNeutronv2(TestNeutronv2Base): """ self.instance = fake_instance.fake_instance_obj(self.context, **self.instance) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) # network found in the tenant self.moxed_client.list_networks( tenant_id=self.instance.project_id, @@ -1497,12 +1517,14 @@ class TestNeutronv2(TestNeutronv2Base): """ admin_ctx = context.RequestContext('userid', uuids.my_tenant, is_admin=True) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) api = self._stub_allocate_for_instance(net_idx=8) api.allocate_for_instance(admin_ctx, self.instance) def test_allocate_for_instance_with_external_shared_net(self): """Only one network is available, it's external and shared.""" ctx = context.RequestContext('userid', uuids.my_tenant) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) api = self._stub_allocate_for_instance(net_idx=10) api.allocate_for_instance(ctx, self.instance) @@ -1529,6 +1551,7 @@ class TestNeutronv2(TestNeutronv2Base): 'admin_state_up': True, 'fixed_ips': [], 'mac_address': 'fake_mac', }) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_ports( device_id=self.instance.uuid).AndReturn( {'ports': ret_data}) @@ -1591,6 +1614,7 @@ class TestNeutronv2(TestNeutronv2Base): **self.instance) mock_preexisting.return_value = [] port_data = self.port_data1 + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_ports( device_id=self.instance.uuid).AndReturn( {'ports': port_data}) @@ -1617,15 +1641,15 @@ class TestNeutronv2(TestNeutronv2Base): self.instance['info_cache'] = self._fake_instance_info_cache( net_info_cache, self.instance['uuid']) api = neutronapi.API() - neutronapi.get_client(mox.IgnoreArg(), admin=True).AndReturn( + neutronapi.get_client(mox.IgnoreArg()).AndReturn( self.moxed_client) self.moxed_client.list_ports( tenant_id=self.instance['project_id'], device_id=self.instance['uuid']).AndReturn( {'ports': port_data[1:]}) - neutronapi.get_client(mox.IgnoreArg()).MultipleTimes().AndReturn( - self.moxed_client) net_ids = [port['network_id'] for port in port_data] + neutronapi.get_client(mox.IgnoreArg(), admin=True).AndReturn( + self.moxed_client) self.moxed_client.list_networks(id=net_ids).AndReturn( {'networks': nets}) float_data = number == 1 and self.float_data1 or self.float_data2 @@ -1662,11 +1686,13 @@ class TestNeutronv2(TestNeutronv2Base): def test_list_ports(self): search_opts = {'parm': 'value'} + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_ports(**search_opts) self.mox.ReplayAll() neutronapi.API().list_ports(self.context, **search_opts) def test_show_port(self): + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.show_port('foo').AndReturn( {'port': self.port_data1[0]}) self.mox.ReplayAll() @@ -1676,6 +1702,7 @@ class TestNeutronv2(TestNeutronv2Base): requested_networks = [(uuids.my_netid1, None, None, None), (uuids.my_netid2, None, None, None)] ids = [uuids.my_netid1, uuids.my_netid2] + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks( id=mox.SameElementsAs(ids)).AndReturn( {'networks': self.nets2}) @@ -1693,6 +1720,7 @@ class TestNeutronv2(TestNeutronv2Base): requested_networks = [(uuids.my_netid1, None, None, None), (uuids.my_netid2, None, None, None)] ids = [uuids.my_netid1, uuids.my_netid2] + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks( id=mox.SameElementsAs(ids)).AndReturn( {'networks': self.nets2}) @@ -1705,6 +1733,7 @@ class TestNeutronv2(TestNeutronv2Base): def test_validate_networks_ex_1(self): requested_networks = [(uuids.my_netid1, None, None, None)] + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks( id=mox.SameElementsAs([uuids.my_netid1])).AndReturn( {'networks': self.nets1}) @@ -1726,6 +1755,7 @@ class TestNeutronv2(TestNeutronv2Base): (uuids.my_netid2, None, None, None), (uuids.my_netid3, None, None, None)] ids = [uuids.my_netid1, uuids.my_netid2, uuids.my_netid3] + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks( id=mox.SameElementsAs(ids)).AndReturn( {'networks': self.nets1}) @@ -1744,7 +1774,7 @@ class TestNeutronv2(TestNeutronv2Base): objects=[objects.NetworkRequest(network_id=uuids.my_netid1), objects.NetworkRequest(network_id=uuids.my_netid1)]) ids = [uuids.my_netid1, uuids.my_netid1] - + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks( id=mox.SameElementsAs(ids)).AndReturn( {'networks': self.nets1}) @@ -1763,6 +1793,8 @@ class TestNeutronv2(TestNeutronv2Base): requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(network_id=net['id']) for net in (self.nets6[0], self.nets6[1])]) + neutronapi.get_client(mox.IgnoreArg()).MultipleTimes().AndReturn( + self.moxed_client) self._allocate_for_instance(net_idx=6, requested_networks=requested_networks) @@ -1771,6 +1803,8 @@ class TestNeutronv2(TestNeutronv2Base): requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(port_id=port['id']) for port in (self.port_data1[0], self.port_data3[0])]) + neutronapi.get_client(mox.IgnoreArg()).MultipleTimes().AndReturn( + self.moxed_client) self._allocate_for_instance(net_idx=6, requested_networks=requested_networks) @@ -1781,11 +1815,14 @@ class TestNeutronv2(TestNeutronv2Base): objects.NetworkRequest(port_id=self.port_data1[0]['id']), objects.NetworkRequest(network_id=uuids.my_netid2), objects.NetworkRequest(port_id=self.port_data3[0]['id'])]) + neutronapi.get_client(mox.IgnoreArg()).MultipleTimes().AndReturn( + self.moxed_client) self._allocate_for_instance(net_idx=7, requested_networks=requested_networks) def test_validate_networks_not_specified(self): requested_networks = objects.NetworkRequestList(objects=[]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks( tenant_id=self.context.project_id, shared=False).AndReturn( @@ -1809,11 +1846,10 @@ class TestNeutronv2(TestNeutronv2Base): port_id=uuids.portid_1)]) PortNotFound = exceptions.PortNotFoundClient() + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.show_port(requested_networks[0].port_id).AndRaise( PortNotFound) self.mox.ReplayAll() - # Expected call from setUp. - neutronapi.get_client(None) api = neutronapi.API() self.assertRaises(exception.PortNotFound, api.validate_networks, @@ -1830,11 +1866,10 @@ class TestNeutronv2(TestNeutronv2Base): port_id=fake_port_id)]) NeutronNotFound = exceptions.NeutronClientException(status_code=0) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.show_port(requested_networks[0].port_id).AndRaise( NeutronNotFound) self.mox.ReplayAll() - # Expected call from setUp. - neutronapi.get_client(None) api = neutronapi.API() exc = self.assertRaises(exception.NovaException, api.validate_networks, @@ -1847,6 +1882,7 @@ class TestNeutronv2(TestNeutronv2Base): def test_validate_networks_port_in_use(self): requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(port_id=self.port_data3[0]['id'])]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.show_port(self.port_data3[0]['id']).\ AndReturn({'port': self.port_data3[0]}) @@ -1864,6 +1900,7 @@ class TestNeutronv2(TestNeutronv2Base): requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(port_id=port_a['id'])]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.show_port(port_a['id']).AndReturn({'port': port_a}) self.mox.ReplayAll() @@ -1877,6 +1914,7 @@ class TestNeutronv2(TestNeutronv2Base): requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(network_id='his_netid4')]) ids = ['his_netid4'] + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks( id=mox.SameElementsAs(ids)).AndReturn( {'networks': self.nets4}) @@ -1901,6 +1939,7 @@ class TestNeutronv2(TestNeutronv2Base): requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(port_id=port_a['id']), objects.NetworkRequest(port_id=port_b['id'])]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.show_port(port_a['id']).AndReturn( {'port': port_a}) self.moxed_client.show_port(port_b['id']).AndReturn( @@ -1924,6 +1963,7 @@ class TestNeutronv2(TestNeutronv2Base): requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(port_id=port_a['id']), objects.NetworkRequest(port_id=port_b['id'])]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.show_port(port_a['id']).AndReturn({'port': port_a}) self.moxed_client.show_port(port_b['id']).AndReturn({'port': port_b}) self.mox.ReplayAll() @@ -1939,6 +1979,7 @@ class TestNeutronv2(TestNeutronv2Base): objects=[objects.NetworkRequest(network_id=uuids.my_netid1), objects.NetworkRequest(network_id=uuids.my_netid2)]) ids = [uuids.my_netid1, uuids.my_netid2] + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks( id=mox.SameElementsAs(ids)).AndReturn( {'networks': self.nets2}) @@ -1963,6 +2004,7 @@ class TestNeutronv2(TestNeutronv2Base): requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(network_id=uuids.my_netid1), objects.NetworkRequest(port_id=port_b['id'])]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.show_port(port_b['id']).AndReturn({'port': port_b}) ids = [uuids.my_netid1] self.moxed_client.list_networks( @@ -1988,6 +2030,7 @@ class TestNeutronv2(TestNeutronv2Base): port_b['device_owner'] = None requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(port_id=port_b['id'])]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.show_port(port_b['id']).AndReturn({'port': port_b}) self.mox.ReplayAll() api = neutronapi.API() @@ -2003,6 +2046,7 @@ class TestNeutronv2(TestNeutronv2Base): objects=[objects.NetworkRequest(network_id=uuids.my_netid1), objects.NetworkRequest(network_id=uuids.my_netid2)]) ids = [uuids.my_netid1, uuids.my_netid2] + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks( id=mox.SameElementsAs(ids)).AndReturn( {'networks': self.nets2}) @@ -2026,6 +2070,7 @@ class TestNeutronv2(TestNeutronv2Base): objects=[objects.NetworkRequest(network_id=uuids.my_netid1), objects.NetworkRequest(network_id=uuids.my_netid2)]) ids = [uuids.my_netid1, uuids.my_netid2] + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks( id=mox.SameElementsAs(ids)).AndReturn( {'networks': self.nets2}) @@ -2051,6 +2096,7 @@ class TestNeutronv2(TestNeutronv2Base): requested_networks = objects.NetworkRequestList( objects=[objects.NetworkRequest(port_id=port_a['id']), objects.NetworkRequest(port_id=port_b['id'])]) + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.show_port(port_a['id']).AndReturn({'port': port_a}) self.moxed_client.show_port(port_b['id']).AndReturn({'port': port_b}) @@ -2065,6 +2111,7 @@ class TestNeutronv2(TestNeutronv2Base): if port_data is None: port_data = self.port_data2 address = self.port_address + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_ports( fixed_ips=MyComparator('ip_address=%s' % address)).AndReturn( {'ports': port_data}) @@ -2094,6 +2141,7 @@ class TestNeutronv2(TestNeutronv2Base): def _get_available_networks(self, prv_nets, pub_nets, req_ids=None, context=None): api = neutronapi.API() + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) nets = prv_nets + pub_nets if req_ids: mox_list_params = {'id': req_ids} @@ -2140,6 +2188,7 @@ class TestNeutronv2(TestNeutronv2Base): def test_get_floating_ip_pools(self): api = neutronapi.API() search_opts = {'router:external': True} + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks(**search_opts).\ AndReturn({'networks': [self.fip_pool, self.fip_pool_nova]}) self.mox.ReplayAll() @@ -2175,6 +2224,7 @@ class TestNeutronv2(TestNeutronv2Base): fip_id = fip_data['id'] net_id = fip_data['floating_network_id'] address = fip_data['floating_ip_address'] + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) if by_address: self.moxed_client.list_floatingips(floating_ip_address=address).\ AndReturn({'floatingips': [fip_data]}) @@ -2213,6 +2263,7 @@ class TestNeutronv2(TestNeutronv2Base): def test_get_floating_ip_by_address_not_found(self): api = neutronapi.API() address = self.fip_unassociated['floating_ip_address'] + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_floatingips(floating_ip_address=address).\ AndReturn({'floatingips': []}) self.mox.ReplayAll() @@ -2224,6 +2275,7 @@ class TestNeutronv2(TestNeutronv2Base): api = neutronapi.API() NeutronNotFound = exceptions.NeutronClientException(status_code=404) floating_ip_id = self.fip_unassociated['id'] + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.show_floatingip(floating_ip_id).\ AndRaise(NeutronNotFound) self.mox.ReplayAll() @@ -2235,6 +2287,7 @@ class TestNeutronv2(TestNeutronv2Base): api = neutronapi.API() NeutronNotFound = exceptions.NeutronClientException(status_code=0) floating_ip_id = self.fip_unassociated['id'] + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.show_floatingip(floating_ip_id).\ AndRaise(NeutronNotFound) self.mox.ReplayAll() @@ -2245,6 +2298,7 @@ class TestNeutronv2(TestNeutronv2Base): def test_get_floating_ip_by_address_multiple_found(self): api = neutronapi.API() address = self.fip_unassociated['floating_ip_address'] + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_floatingips(floating_ip_address=address).\ AndReturn({'floatingips': [self.fip_unassociated] * 2}) self.mox.ReplayAll() @@ -2255,6 +2309,7 @@ class TestNeutronv2(TestNeutronv2Base): def test_get_floating_ips_by_project(self): api = neutronapi.API() project_id = self.context.project_id + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_floatingips(tenant_id=project_id).\ AndReturn({'floatingips': [self.fip_unassociated, self.fip_associated]}) @@ -2276,6 +2331,7 @@ class TestNeutronv2(TestNeutronv2Base): associated=False): api = neutronapi.API() address = fip_data['floating_ip_address'] + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_floatingips(floating_ip_address=address).\ AndReturn({'floatingips': [fip_data]}) if associated: @@ -2304,6 +2360,7 @@ class TestNeutronv2(TestNeutronv2Base): search_opts = {'router:external': True, 'fields': 'id', 'name': pool_name} + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks(**search_opts).\ AndReturn({'networks': [self.fip_pool]}) self.moxed_client.create_floatingip( @@ -2320,6 +2377,7 @@ class TestNeutronv2(TestNeutronv2Base): search_opts = {'router:external': True, 'fields': 'id', 'name': pool_name} + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks(**search_opts).\ AndReturn({'networks': [self.fip_pool]}) self.moxed_client.create_floatingip( @@ -2336,6 +2394,7 @@ class TestNeutronv2(TestNeutronv2Base): search_opts = {'router:external': True, 'fields': 'id', 'name': pool_name} + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks(**search_opts).\ AndReturn({'networks': [self.fip_pool]}) self.moxed_client.create_floatingip( @@ -2351,6 +2410,7 @@ class TestNeutronv2(TestNeutronv2Base): search_opts = {'router:external': True, 'fields': 'id', 'id': pool_id} + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks(**search_opts).\ AndReturn({'networks': [self.fip_pool]}) self.moxed_client.create_floatingip( @@ -2367,6 +2427,7 @@ class TestNeutronv2(TestNeutronv2Base): search_opts = {'router:external': True, 'fields': 'id', 'name': pool_name} + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks(**search_opts).\ AndReturn({'networks': [self.fip_pool_nova]}) self.moxed_client.create_floatingip( @@ -2380,7 +2441,7 @@ class TestNeutronv2(TestNeutronv2Base): api = neutronapi.API() address = self.fip_unassociated['floating_ip_address'] fip_id = self.fip_unassociated['id'] - + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_floatingips(floating_ip_address=address).\ AndReturn({'floatingips': [self.fip_unassociated]}) self.moxed_client.delete_floatingip(fip_id) @@ -2392,7 +2453,7 @@ class TestNeutronv2(TestNeutronv2Base): address = self.fip_unassociated['floating_ip_address'] fip_id = self.fip_unassociated['id'] floating_ip = {'address': address} - + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_floatingips(floating_ip_address=address).\ AndReturn({'floatingips': [self.fip_unassociated]}) self.moxed_client.delete_floatingip(fip_id) @@ -2406,7 +2467,7 @@ class TestNeutronv2(TestNeutronv2Base): fip_id = self.fip_unassociated['id'] floating_ip = {'address': address} instance = self._fake_instance_object(self.instance) - + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_floatingips(floating_ip_address=address).\ AndReturn({'floatingips': [self.fip_unassociated]}) self.moxed_client.delete_floatingip(fip_id) @@ -2418,7 +2479,7 @@ class TestNeutronv2(TestNeutronv2Base): def test_release_floating_ip_associated(self): api = neutronapi.API() address = self.fip_associated['floating_ip_address'] - + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_floatingips(floating_ip_address=address).\ AndReturn({'floatingips': [self.fip_associated]}) self.mox.ReplayAll() @@ -2446,6 +2507,8 @@ class TestNeutronv2(TestNeutronv2Base): search_opts = {'device_owner': 'compute:nova', 'device_id': instance.uuid} + + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_ports(**search_opts).\ AndReturn({'ports': [self.port_data2[1]]}) self.moxed_client.list_floatingips(floating_ip_address=address).\ @@ -2468,6 +2531,7 @@ class TestNeutronv2(TestNeutronv2Base): search_opts = {'device_owner': 'compute:nova', 'device_id': self.instance2['uuid']} + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_ports(**search_opts).\ AndReturn({'ports': [self.port_data2[0]]}) self.moxed_client.list_floatingips(floating_ip_address=address).\ @@ -2496,6 +2560,7 @@ class TestNeutronv2(TestNeutronv2Base): search_opts = {'device_owner': 'compute:nova', 'device_id': self.instance['uuid']} + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_ports(**search_opts).\ AndReturn({'ports': [self.port_data2[0]]}) @@ -2509,7 +2574,7 @@ class TestNeutronv2(TestNeutronv2Base): api = neutronapi.API() address = self.fip_associated['floating_ip_address'] fip_id = self.fip_associated['id'] - + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_floatingips(floating_ip_address=address).\ AndReturn({'floatingips': [self.fip_associated]}) self.moxed_client.update_floatingip( @@ -2525,6 +2590,7 @@ class TestNeutronv2(TestNeutronv2Base): self._setup_mock_for_refresh_cache(api, [instance]) network_id = uuids.my_netid1 search_opts = {'network_id': network_id} + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_subnets( **search_opts).AndReturn({'subnets': self.subnet_data_n}) @@ -2558,6 +2624,7 @@ class TestNeutronv2(TestNeutronv2Base): search_opts = {'device_id': self.instance['uuid'], 'device_owner': zone, 'fixed_ips': 'ip_address=%s' % address} + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_ports( **search_opts).AndReturn({'ports': self.port_data1}) port_req_body = { @@ -2577,6 +2644,7 @@ class TestNeutronv2(TestNeutronv2Base): def test_list_floating_ips_without_l3_support(self): api = neutronapi.API() NeutronNotFound = exceptions.NotFound() + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_floatingips( fixed_ip_address='1.1.1.1', port_id=1).AndRaise(NeutronNotFound) self.mox.ReplayAll() @@ -2592,6 +2660,7 @@ class TestNeutronv2(TestNeutronv2Base): 'id': 'port-id', } api = neutronapi.API() + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.mox.StubOutWithMock(api, '_get_floating_ips_by_fixed_and_port') api._get_floating_ips_by_fixed_and_port( self.moxed_client, '1.1.1.1', 'port-id').AndReturn( @@ -2614,10 +2683,10 @@ class TestNeutronv2(TestNeutronv2Base): fake_ips = [model.IP(x['ip_address']) for x in fake_port['fixed_ips']] api = neutronapi.API() self.mox.StubOutWithMock(api, '_get_subnets_from_port') - api._get_subnets_from_port(self.context, fake_port).AndReturn( + api._get_subnets_from_port( + self.context, fake_port, None).AndReturn( [fake_subnet]) self.mox.ReplayAll() - neutronapi.get_client(uuids.fake) subnets = api._nw_info_get_subnets(self.context, fake_port, fake_ips) self.assertEqual(1, len(subnets)) self.assertEqual(1, len(subnets[0]['ips'])) @@ -2634,6 +2703,7 @@ class TestNeutronv2(TestNeutronv2Base): fake_nets = [{'id': 'net-id', 'name': 'foo', 'tenant_id': 'tenant', 'mtu': 9000}] api = neutronapi.API() + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.mox.ReplayAll() neutronapi.get_client(uuids.fake) net, iid = api._nw_info_build_network(fake_port, fake_nets, @@ -2688,6 +2758,7 @@ class TestNeutronv2(TestNeutronv2Base): fake_subnets = [model.Subnet(cidr='1.0.0.0/8')] fake_nets = [{'id': 'net-id2', 'name': 'foo', 'tenant_id': 'tenant'}] api = neutronapi.API() + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.mox.ReplayAll() neutronapi.get_client(uuids.fake) net, iid = api._nw_info_build_network(fake_port, fake_nets, @@ -2709,6 +2780,7 @@ class TestNeutronv2(TestNeutronv2Base): fake_subnets = [model.Subnet(cidr='1.0.0.0/8')] fake_nets = [{'id': 'net-id', 'name': 'foo', 'tenant_id': 'tenant'}] api = neutronapi.API() + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.mox.ReplayAll() neutronapi.get_client(uuids.fake) net, iid = api._nw_info_build_network(fake_port, fake_nets, @@ -2737,6 +2809,7 @@ class TestNeutronv2(TestNeutronv2Base): fake_subnets = [model.Subnet(cidr='1.0.0.0/8')] fake_nets = [{'id': 'net-id', 'name': 'foo', 'tenant_id': 'tenant'}] api = neutronapi.API() + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.mox.ReplayAll() neutronapi.get_client(uuids.fake) net, iid = api._nw_info_build_network(fake_port, fake_nets, @@ -2852,8 +2925,8 @@ class TestNeutronv2(TestNeutronv2Base): 'tenant_id': uuids.fake, } ] - neutronapi.get_client(mox.IgnoreArg(), admin=True).MultipleTimes( - ).AndReturn(self.moxed_client) + neutronapi.get_client(mox.IgnoreArg(), admin=True).AndReturn( + self.moxed_client) self.moxed_client.list_ports( tenant_id=uuids.fake, device_id=uuids.instance).AndReturn( {'ports': fake_ports}) @@ -2867,13 +2940,13 @@ class TestNeutronv2(TestNeutronv2Base): self.moxed_client, '1.1.1.1', requested_port['id']).AndReturn( [{'floating_ip_address': '10.0.0.1'}]) for requested_port in requested_ports: - api._get_subnets_from_port(self.context, requested_port - ).AndReturn(fake_subnets) + api._get_subnets_from_port(self.context, requested_port, + self.moxed_client).AndReturn( + fake_subnets) self.mox.StubOutWithMock(api, '_get_preexisting_port_ids') api._get_preexisting_port_ids(fake_inst).AndReturn(['port5']) self.mox.ReplayAll() - neutronapi.get_client(uuids.fake) fake_inst.info_cache = objects.InstanceInfoCache.new( self.context, uuids.instance) fake_inst.info_cache.network_info = model.NetworkInfo.hydrate([]) @@ -2964,8 +3037,8 @@ class TestNeutronv2(TestNeutronv2Base): ] fake_subnets = [model.Subnet(cidr='1.0.0.0/8')] - neutronapi.get_client(mox.IgnoreArg(), admin=True).MultipleTimes( - ).AndReturn(self.moxed_client) + neutronapi.get_client(mox.IgnoreArg(), admin=True).AndReturn( + self.moxed_client) self.moxed_client.list_ports( tenant_id=uuids.fake, device_id=uuids.instance).AndReturn( {'ports': fake_ports}) @@ -2977,7 +3050,6 @@ class TestNeutronv2(TestNeutronv2Base): mock_nw_info_get_subnets.return_value = fake_subnets self.mox.ReplayAll() - neutronapi.get_client(uuids.fake) nw_infos = api._build_network_info_model( self.context, fake_inst) @@ -2991,7 +3063,7 @@ class TestNeutronv2(TestNeutronv2Base): subnet_data1[0]['host_routes'] = [ {'destination': '192.168.0.0/24', 'nexthop': '1.0.0.10'} ] - + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_subnets( id=[port_data['fixed_ips'][0]['subnet_id']] ).AndReturn({'subnets': subnet_data1}) @@ -3011,6 +3083,7 @@ class TestNeutronv2(TestNeutronv2Base): def test_get_all_empty_list_networks(self): api = neutronapi.API() + neutronapi.get_client(mox.IgnoreArg()).AndReturn(self.moxed_client) self.moxed_client.list_networks().AndReturn({'networks': []}) self.mox.ReplayAll() networks = api.get_all(self.context)