diff --git a/nova/tests/fixtures.py b/nova/tests/fixtures.py index be0dc961c..6f39f646f 100644 --- a/nova/tests/fixtures.py +++ b/nova/tests/fixtures.py @@ -22,6 +22,7 @@ from contextlib import contextmanager import copy import logging as std_logging import os +import random import warnings import fixtures @@ -1121,6 +1122,7 @@ class NeutronFixture(fixtures.Fixture): 'admin_state_up': True, 'tenant_id': tenant_id, 'id': '3cb9bc59-5699-4588-a4b1-b87f96708bc6', + 'shared': False, } subnet_1 = { 'name': 'private-subnet', @@ -1156,7 +1158,8 @@ class NeutronFixture(fixtures.Fixture): 'subnet_id': subnet_1['id'] } ], - 'tenant_id': tenant_id + 'tenant_id': tenant_id, + 'binding:vif_type': 'ovs' } port_2 = { @@ -1171,7 +1174,8 @@ class NeutronFixture(fixtures.Fixture): 'subnet_id': subnet_1['id'] } ], - 'tenant_id': tenant_id + 'tenant_id': tenant_id, + 'binding:vif_type': 'ovs' } nw_info = [{ @@ -1235,10 +1239,6 @@ class NeutronFixture(fixtures.Fixture): def setUp(self): super(NeutronFixture, self).setUp() - self.test.stub_out( - 'nova.network.neutronv2.api.API.' - 'validate_networks', - lambda *args, **kwargs: 1) self.test.stub_out( 'nova.network.neutronv2.api.API.setup_networks_on_host', lambda *args, **kwargs: None) @@ -1302,6 +1302,9 @@ class NeutronFixture(fixtures.Fixture): networks = copy.deepcopy(self._networks) if 'id' in _params: networks = [x for x in networks if x['id'] in _params['id']] + if 'shared' in _params: + networks = [x for x in networks if x['shared'] == + _params['shared']] return {'networks': networks} def list_ports(self, retrieve_all=True, **_params): @@ -1314,8 +1317,23 @@ class NeutronFixture(fixtures.Fixture): return copy.deepcopy({'floatingips': self._floatingips}) def create_port(self, body=None): - self._ports.append(copy.deepcopy(NeutronFixture.port_2)) - return copy.deepcopy({'port': NeutronFixture.port_2}) + if self._get_first_id_match(NeutronFixture.port_2['id'], + self._ports) is None: + # we need the double copy as port_2 is a class variable but + # self._ports is an instance variable + new_port = copy.deepcopy(NeutronFixture.port_2) + self._ports.append(new_port) + else: + new_port = copy.deepcopy(NeutronFixture.port_2) + # we need truly random uuids instead of named sentinels as some + # tests needs more than 3 ports + new_port.update({ + 'id': str(uuidutils.generate_uuid()), + 'mac_address': '00:' + ':'.join( + ['%02x' % random.randint(0, 255) for _ in range(5)]), + }) + self._ports.append(new_port) + return {'port': copy.deepcopy(new_port)} def update_port(self, port_id, body=None): new_port = self._get_first_id_match(port_id, self._ports) @@ -1326,6 +1344,10 @@ class NeutronFixture(fixtures.Fixture): return {'port': new_port} + def show_quota(self, project_id): + # unlimited quota + return {'quota': {'port': -1}} + class _NoopConductor(object): def __getattr__(self, key):