Skip to content

Commit b36bc92

Browse files
gibizerSeanMooney
authored andcommitted
Remove double mocking... again
I thought we fixed all the double mocking issues with I3998d0d49583806ac1c3ae64f1b1fe343cefd20d but I was wrong. While we used both mock and unittest.mock the fixtures.MockPatch used the mock lib instead of the unittest.mock lib. The path Ibf4f36136f2c65adad64f75d665c00cf2de4b400 (Remove the PowerVM driver) removed the last user of mock lib from nova. So it is also removed the mock from test-requirements. This triggered that fixtures.MockPatch athat started using unittest.mock too. Before Ibf4f36136f2c65adad64f75d665c00cf2de4b400 a function can be mocked twice once with unittest.mock and once with fixtures.MockPatch (still using mock). However after that patch both path of such double mocking goes through unittest.mock and the second one fails. So this patch fixes double mocking so far hidden behind fixtures.MockPatch. This patch made the py310 and functional-py310 jobs voting on master however that has been dropped as part of the backport. Conflicts: nova/tests/fixtures/nova.py nova/tests/unit/api/openstack/compute/test_quotas.py nova/tests/unit/api/openstack/compute/test_server_group_quotas.py Conflicts are due to lack of unified limits feature in xena Change-Id: Ic1352ec31996577a5d0ad18a057339df3e49de25 (cherry picked from commit bf654e3) (cherry picked from commit 69667a8)
1 parent 54c7c97 commit b36bc92

20 files changed

+158
-187
lines changed

nova/tests/fixtures/libvirt.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2180,8 +2180,8 @@ def setUp(self):
21802180

21812181
self.useFixture(
21822182
fixtures.MockPatch('nova.virt.libvirt.utils.get_fs_info'))
2183-
self.useFixture(
2184-
fixtures.MockPatch('nova.compute.utils.get_machine_ips'))
2183+
self.mock_get_machine_ips = self.useFixture(
2184+
fixtures.MockPatch('nova.compute.utils.get_machine_ips')).mock
21852185

21862186
# libvirt driver needs to call out to the filesystem to get the
21872187
# parent_ifname for the SRIOV VFs.
@@ -2191,20 +2191,25 @@ def setUp(self):
21912191

21922192
self.useFixture(fixtures.MockPatch(
21932193
'nova.pci.utils.get_mac_by_pci_address',
2194-
new=self.fake_get_mac_by_pci_address))
2194+
side_effect=self.fake_get_mac_by_pci_address))
21952195

21962196
# libvirt calls out to sysfs to get the vfs ID during macvtap plug
2197-
self.useFixture(fixtures.MockPatch(
2198-
'nova.pci.utils.get_vf_num_by_pci_address', return_value=1))
2197+
self.mock_get_vf_num_by_pci_address = self.useFixture(
2198+
fixtures.MockPatch(
2199+
'nova.pci.utils.get_vf_num_by_pci_address', return_value=1
2200+
)
2201+
).mock
21992202

22002203
# libvirt calls out to privsep to set the mac and vlan of a macvtap
2201-
self.useFixture(fixtures.MockPatch(
2202-
'nova.privsep.linux_net.set_device_macaddr_and_vlan'))
2204+
self.mock_set_device_macaddr_and_vlan = self.useFixture(
2205+
fixtures.MockPatch(
2206+
'nova.privsep.linux_net.set_device_macaddr_and_vlan')).mock
22032207

22042208
# libvirt calls out to privsep to set the port state during macvtap
22052209
# plug
2206-
self.useFixture(fixtures.MockPatch(
2207-
'nova.privsep.linux_net.set_device_macaddr'))
2210+
self.mock_set_device_macaddr = self.useFixture(
2211+
fixtures.MockPatch(
2212+
'nova.privsep.linux_net.set_device_macaddr')).mock
22082213

22092214
# Don't assume that the system running tests has a valid machine-id
22102215
self.useFixture(fixtures.MockPatch(
@@ -2219,8 +2224,8 @@ def setUp(self):
22192224
# Ensure tests perform the same on all host architectures
22202225
fake_uname = os_uname(
22212226
'Linux', '', '5.4.0-0-generic', '', obj_fields.Architecture.X86_64)
2222-
self.useFixture(
2223-
fixtures.MockPatch('os.uname', return_value=fake_uname))
2227+
self.mock_uname = self.useFixture(
2228+
fixtures.MockPatch('os.uname', return_value=fake_uname)).mock
22242229

22252230
# ...and on all machine types
22262231
fake_loaders = [

nova/tests/fixtures/nova.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -949,9 +949,18 @@ def setUp(self):
949949
base_url += '/' + self.project_id
950950

951951
self.api = client.TestOpenStackClient(
952-
'fake', base_url, project_id=self.project_id)
952+
'fake', base_url, project_id=self.project_id,
953+
)
954+
self.alternative_api = client.TestOpenStackClient(
955+
'fake', base_url, project_id=self.project_id,
956+
)
953957
self.admin_api = client.TestOpenStackClient(
954-
'admin', base_url, project_id=self.project_id)
958+
'admin', base_url, project_id=self.project_id,
959+
)
960+
self.alternative_admin_api = client.TestOpenStackClient(
961+
'admin', base_url, project_id=self.project_id,
962+
)
963+
955964
# Provide a way to access the wsgi application to tests using
956965
# the fixture.
957966
self.app = app
@@ -1039,9 +1048,9 @@ def evloop(*args, **kwargs):
10391048
# Don't poison the function if it's already mocked
10401049
import nova.virt.libvirt.host
10411050
if not isinstance(nova.virt.libvirt.host.Host._init_events, mock.Mock):
1042-
self.useFixture(fixtures.MockPatch(
1051+
self.useFixture(fixtures.MonkeyPatch(
10431052
'nova.virt.libvirt.host.Host._init_events',
1044-
side_effect=evloop))
1053+
evloop))
10451054

10461055

10471056
class IndirectionAPIFixture(fixtures.Fixture):

nova/tests/functional/compute/test_resource_tracker.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
from nova import context
3030
from nova import objects
3131
from nova import test
32-
from nova.tests import fixtures as nova_fixtures
3332
from nova.tests.functional import fixtures as func_fixtures
3433
from nova.tests.functional import integrated_helpers
3534
from nova.virt import driver as virt_driver
@@ -694,15 +693,6 @@ def test_end_to_end(self):
694693
feature a vm cannot be spawning using a custom trait and then start a
695694
compute service that provides that trait.
696695
"""
697-
698-
self.useFixture(nova_fixtures.NeutronFixture(self))
699-
self.useFixture(nova_fixtures.GlanceFixture(self))
700-
701-
# Start nova services.
702-
self.api = self.useFixture(nova_fixtures.OSAPIFixture(
703-
api_version='v2.1')).admin_api
704-
self.api.microversion = 'latest'
705-
self.start_service('conductor')
706696
# start nova-compute that will not have the additional trait.
707697
self._start_compute("fake-host-1")
708698

nova/tests/functional/libvirt/base.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,12 @@ def setUp(self):
5151
self.useFixture(fixtures.MockPatch(
5252
'nova.virt.libvirt.LibvirtDriver._get_local_gb_info',
5353
return_value={'total': 128, 'used': 44, 'free': 84}))
54-
self.useFixture(fixtures.MockPatch(
54+
self.mock_is_valid_hostname = self.useFixture(fixtures.MockPatch(
5555
'nova.virt.libvirt.driver.libvirt_utils.is_valid_hostname',
56-
return_value=True))
57-
self.useFixture(fixtures.MockPatch(
56+
return_value=True)).mock
57+
self.mock_file_open = self.useFixture(fixtures.MockPatch(
5858
'nova.virt.libvirt.driver.libvirt_utils.file_open',
59-
side_effect=lambda *a, **k: io.BytesIO(b'')))
59+
side_effect=lambda *a, **k: io.BytesIO(b''))).mock
6060
self.useFixture(fixtures.MockPatch(
6161
'nova.privsep.utils.supports_direct_io',
6262
return_value=True))

nova/tests/functional/libvirt/test_reshape.py

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,7 @@
3030

3131
class VGPUReshapeTests(base.ServersTestBase):
3232

33-
@mock.patch('nova.virt.libvirt.LibvirtDriver._get_local_gb_info',
34-
return_value={'total': 128,
35-
'used': 44,
36-
'free': 84})
37-
@mock.patch('nova.virt.libvirt.driver.libvirt_utils.is_valid_hostname',
38-
return_value=True)
39-
@mock.patch('nova.virt.libvirt.driver.libvirt_utils.file_open',
40-
side_effect=[io.BytesIO(b''), io.BytesIO(b''),
41-
io.BytesIO(b'')])
42-
def test_create_servers_with_vgpu(
43-
self, mock_file_open, mock_valid_hostname, mock_get_fs_info):
33+
def test_create_servers_with_vgpu(self):
4434
"""Verify that vgpu reshape works with libvirt driver
4535
4636
1) create two servers with an old tree where the VGPU resource is on
@@ -49,7 +39,8 @@ def test_create_servers_with_vgpu(
4939
3) check that the allocations of the servers are still valid
5040
4) create another server now against the new tree
5141
"""
52-
42+
self.mock_file_open.side_effect = [
43+
io.BytesIO(b''), io.BytesIO(b''), io.BytesIO(b'')]
5344
# NOTE(gibi): We cannot simply ask the virt driver to create an old
5445
# RP tree with vgpu on the root RP as that code path does not exist
5546
# any more. So we have to hack a "bit". We will create a compute

nova/tests/functional/libvirt/test_vgpu.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,11 @@ class VGPUTestBase(base.ServersTestBase):
4949

5050
def setUp(self):
5151
super(VGPUTestBase, self).setUp()
52-
self.useFixture(fixtures.MockPatch(
53-
'nova.virt.libvirt.LibvirtDriver._get_local_gb_info',
54-
return_value={'total': 128,
55-
'used': 44,
56-
'free': 84}))
52+
libvirt_driver.LibvirtDriver._get_local_gb_info.return_value = {
53+
'total': 128,
54+
'used': 44,
55+
'free': 84,
56+
}
5757
self.useFixture(fixtures.MockPatch(
5858
'nova.privsep.libvirt.create_mdev',
5959
side_effect=self._create_mdev))

nova/tests/functional/test_aggregates.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -826,11 +826,11 @@ def setUp(self):
826826

827827
# Start nova services.
828828
self.start_service('conductor')
829-
self.admin_api = self.useFixture(
830-
nova_fixtures.OSAPIFixture(api_version='v2.1')).admin_api
831-
self.api = self.useFixture(
832-
nova_fixtures.OSAPIFixture(api_version='v2.1',
833-
project_id=uuids.non_admin)).api
829+
api_fixture = self.useFixture(
830+
nova_fixtures.OSAPIFixture(api_version='v2.1'))
831+
self.admin_api = api_fixture.admin_api
832+
self.api = api_fixture.api
833+
self.api.project_id = uuids.non_admin
834834
# Add the AggregateMultiTenancyIsolation to the list of enabled
835835
# filters since it is not enabled by default.
836836
enabled_filters = CONF.filter_scheduler.enabled_filters
@@ -928,15 +928,15 @@ def setUp(self):
928928
self.glance = self.useFixture(nova_fixtures.GlanceFixture(self))
929929
self.useFixture(nova_fixtures.NeutronFixture(self))
930930
self.useFixture(func_fixtures.PlacementFixture())
931-
# Intentionally keep these separate since we want to create the
932-
# server with the non-admin user in a different project.
933-
admin_api_fixture = self.useFixture(nova_fixtures.OSAPIFixture(
931+
# Intentionally define different project id for the two client since
932+
# we want to create the server with the non-admin user in a different
933+
# project.
934+
api_fixture = self.useFixture(nova_fixtures.OSAPIFixture(
934935
api_version='v2.1', project_id=uuids.admin_project))
935-
self.admin_api = admin_api_fixture.admin_api
936+
self.admin_api = api_fixture.admin_api
936937
self.admin_api.microversion = 'latest'
937-
user_api_fixture = self.useFixture(nova_fixtures.OSAPIFixture(
938-
api_version='v2.1', project_id=uuids.user_project))
939-
self.api = user_api_fixture.api
938+
self.api = api_fixture.api
939+
self.api.project_id = uuids.user_project
940940
self.api.microversion = 'latest'
941941

942942
self.start_service('conductor')

nova/tests/functional/test_images.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212

1313
from oslo_utils.fixture import uuidsentinel as uuids
1414

15-
from nova.tests import fixtures as nova_fixtures
1615
from nova.tests.functional.api import client
1716
from nova.tests.functional import integrated_helpers
1817

@@ -70,10 +69,9 @@ def test_admin_snapshot_user_image_access_member(self):
7069
server = self.api.post_server({"server": server})
7170
server = self._wait_for_state_change(server, 'ACTIVE')
7271

73-
# Create an admin API fixture with a unique project ID.
74-
admin_api = self.useFixture(
75-
nova_fixtures.OSAPIFixture(
76-
project_id=uuids.admin_project)).admin_api
72+
# use an admin API with a unique project ID.
73+
admin_api = self.api_fixture.alternative_admin_api
74+
admin_api.project_id = uuids.admin_project
7775

7876
# Create a snapshot of the server using the admin project.
7977
name = 'admin-created-snapshot'

nova/tests/functional/test_server_group.py

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,12 @@ def setUp(self):
6464
self.useFixture(nova_fixtures.NeutronFixture(self))
6565

6666
self.useFixture(func_fixtures.PlacementFixture())
67-
api_fixture = self.useFixture(nova_fixtures.OSAPIFixture(
67+
self.api_fixture = self.useFixture(nova_fixtures.OSAPIFixture(
6868
api_version='v2.1'))
6969

70-
self.api = api_fixture.api
70+
self.api = self.api_fixture.api
7171
self.api.microversion = self.microversion
72-
self.admin_api = api_fixture.admin_api
72+
self.admin_api = self.api_fixture.admin_api
7373
self.admin_api.microversion = self.microversion
7474

7575
self.start_service('conductor')
@@ -174,13 +174,8 @@ def test_get_groups_all_projects(self):
174174

175175
# Create an API using project 'openstack1'.
176176
# This is a non-admin API.
177-
#
178-
# NOTE(sdague): this is actually very much *not* how this
179-
# fixture should be used. This actually spawns a whole
180-
# additional API server. Should be addressed in the future.
181-
api_openstack1 = self.useFixture(nova_fixtures.OSAPIFixture(
182-
api_version=self.api_major_version,
183-
project_id=PROJECT_ID_ALT)).api
177+
api_openstack1 = self.api_fixture.alternative_api
178+
api_openstack1.project_id = PROJECT_ID_ALT
184179
api_openstack1.microversion = self.microversion
185180

186181
# Create a server group in project 'openstack'

nova/tests/functional/test_servers.py

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,19 +1253,15 @@ def test_get_servers_detail_non_admin_with_deleted_flag(self):
12531253
def test_get_servers_detail_filters(self):
12541254
# We get the results only from the up cells, this ignoring the down
12551255
# cells if list_records_by_skipping_down_cells config option is True.
1256-
api_fixture = self.useFixture(nova_fixtures.OSAPIFixture(
1257-
api_version='v2.1'))
1258-
self.admin_api = api_fixture.admin_api
1256+
self.admin_api = self.api_fixture.admin_api
12591257
self.admin_api.microversion = '2.69'
12601258
servers = self.admin_api.get_servers(
12611259
search_opts={'hostname': "cell3-inst0"})
12621260
self.assertEqual(1, len(servers))
12631261
self.assertEqual(self.up_cell_insts[2], servers[0]['id'])
12641262

12651263
def test_get_servers_detail_all_tenants_with_down_cells(self):
1266-
api_fixture = self.useFixture(nova_fixtures.OSAPIFixture(
1267-
api_version='v2.1'))
1268-
self.admin_api = api_fixture.admin_api
1264+
self.admin_api = self.api_fixture.admin_api
12691265
self.admin_api.microversion = '2.69'
12701266
servers = self.admin_api.get_servers(search_opts={'all_tenants': True})
12711267
# 4 servers from the up cells and 4 servers from the down cells
@@ -1523,10 +1519,8 @@ class ServersTestV280(integrated_helpers._IntegratedTestBase):
15231519

15241520
def setUp(self):
15251521
super(ServersTestV280, self).setUp()
1526-
api_fixture = self.useFixture(nova_fixtures.OSAPIFixture(
1527-
api_version='v2.1'))
1528-
self.api = api_fixture.api
1529-
self.admin_api = api_fixture.admin_api
1522+
self.api = self.api_fixture.api
1523+
self.admin_api = self.api_fixture.admin_api
15301524

15311525
self.api.microversion = '2.80'
15321526
self.admin_api.microversion = '2.80'
@@ -1585,9 +1579,8 @@ def test_get_migrations_after_live_migrate_server_in_different_project(
15851579

15861580
project_id_1 = '4906260553374bf0a5d566543b320516'
15871581
project_id_2 = 'c850298c1b6b4796a8f197ac310b2469'
1588-
new_api_fixture = self.useFixture(nova_fixtures.OSAPIFixture(
1589-
api_version=self.api_major_version, project_id=project_id_1))
1590-
new_admin_api = new_api_fixture.admin_api
1582+
new_admin_api = self.api_fixture.alternative_admin_api
1583+
new_admin_api.project_id = project_id_1
15911584
new_admin_api.microversion = '2.80'
15921585

15931586
post = {

0 commit comments

Comments
 (0)