Improve NeutronFixture and remove unncessary stubbing

With a small improvement on NeutronFixture that allows creating more
than two ports we can let our tests to exercise and therefore cover
most of the neutronv2/api code as well. To do that this path removes a
lot of fake_network.set_stub_network_methods() calls from the tests.
The remaining calls are not that trivial to remove so those are left in
for a later patch.

The numa functional tests uses the libvirt fixture and during the guest
config xml generation it tries to instantiate OVOs from os_vif. To make
this work the libvirt fixture has to make sure that the
os_vif.initialize() is called as that call registers the OVOs.

Change-Id: I1dbccc2be6ba79bf267edac9208c80e187e6256a
This commit is contained in:
Balazs Gibizer 2018-07-31 15:04:04 +02:00
parent da31f67892
commit a2224f38d9

@ -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):