Skip to content

Commit bf654e3

Browse files
committed
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. Also this patch makes the py310 and functional-py310 jobs voting at least in the check queue to prevent future changes adding double mocks. Change-Id: Ic1352ec31996577a5d0ad18a057339df3e49de25
1 parent adeea3d commit bf654e3

24 files changed

+163
-203
lines changed

.zuul.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -665,7 +665,9 @@
665665
- nova-tox-functional-py38
666666
- nova-tox-functional-py39
667667
- nova-tox-functional-py310:
668-
voting: false
668+
voting: true
669+
- openstack-tox-py310:
670+
voting: true
669671
- tempest-integrated-compute:
670672
# NOTE(gmann): Policies changes do not need to run all the
671673
# integration test jobs. Running only tempest and grenade

nova/tests/fixtures/libvirt.py

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

22212221
self.useFixture(
22222222
fixtures.MockPatch('nova.virt.libvirt.utils.get_fs_info'))
2223-
self.useFixture(
2224-
fixtures.MockPatch('nova.compute.utils.get_machine_ips'))
2223+
self.mock_get_machine_ips = self.useFixture(
2224+
fixtures.MockPatch('nova.compute.utils.get_machine_ips')).mock
22252225

22262226
# libvirt driver needs to call out to the filesystem to get the
22272227
# parent_ifname for the SRIOV VFs.
@@ -2231,20 +2231,25 @@ def setUp(self):
22312231

22322232
self.useFixture(fixtures.MockPatch(
22332233
'nova.pci.utils.get_mac_by_pci_address',
2234-
new=self.fake_get_mac_by_pci_address))
2234+
side_effect=self.fake_get_mac_by_pci_address))
22352235

22362236
# libvirt calls out to sysfs to get the vfs ID during macvtap plug
2237-
self.useFixture(fixtures.MockPatch(
2238-
'nova.pci.utils.get_vf_num_by_pci_address', return_value=1))
2237+
self.mock_get_vf_num_by_pci_address = self.useFixture(
2238+
fixtures.MockPatch(
2239+
'nova.pci.utils.get_vf_num_by_pci_address', return_value=1
2240+
)
2241+
).mock
22392242

22402243
# libvirt calls out to privsep to set the mac and vlan of a macvtap
2241-
self.useFixture(fixtures.MockPatch(
2242-
'nova.privsep.linux_net.set_device_macaddr_and_vlan'))
2244+
self.mock_set_device_macaddr_and_vlan = self.useFixture(
2245+
fixtures.MockPatch(
2246+
'nova.privsep.linux_net.set_device_macaddr_and_vlan')).mock
22432247

22442248
# libvirt calls out to privsep to set the port state during macvtap
22452249
# plug
2246-
self.useFixture(fixtures.MockPatch(
2247-
'nova.privsep.linux_net.set_device_macaddr'))
2250+
self.mock_set_device_macaddr = self.useFixture(
2251+
fixtures.MockPatch(
2252+
'nova.privsep.linux_net.set_device_macaddr')).mock
22482253

22492254
# Don't assume that the system running tests has a valid machine-id
22502255
self.useFixture(fixtures.MockPatch(
@@ -2259,8 +2264,8 @@ def setUp(self):
22592264
# Ensure tests perform the same on all host architectures
22602265
fake_uname = os_uname(
22612266
'Linux', '', '5.4.0-0-generic', '', obj_fields.Architecture.X86_64)
2262-
self.useFixture(
2263-
fixtures.MockPatch('os.uname', return_value=fake_uname))
2267+
self.mock_uname = self.useFixture(
2268+
fixtures.MockPatch('os.uname', return_value=fake_uname)).mock
22642269

22652270
# ...and on all machine types
22662271
fake_loaders = [

nova/tests/fixtures/nova.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1002,9 +1002,15 @@ def setUp(self):
10021002
self.api = client.TestOpenStackClient(
10031003
'fake', base_url, project_id=self.project_id,
10041004
roles=['reader', 'member'])
1005+
self.alternative_api = client.TestOpenStackClient(
1006+
'fake', base_url, project_id=self.project_id,
1007+
roles=['reader', 'member'])
10051008
self.admin_api = client.TestOpenStackClient(
10061009
'admin', base_url, project_id=self.project_id,
10071010
roles=['reader', 'member', 'admin'])
1011+
self.alternative_admin_api = client.TestOpenStackClient(
1012+
'admin', base_url, project_id=self.project_id,
1013+
roles=['reader', 'member', 'admin'])
10081014
self.reader_api = client.TestOpenStackClient(
10091015
'reader', base_url, project_id=self.project_id,
10101016
roles=['reader'])
@@ -1100,9 +1106,9 @@ def evloop(*args, **kwargs):
11001106
# Don't poison the function if it's already mocked
11011107
import nova.virt.libvirt.host
11021108
if not isinstance(nova.virt.libvirt.host.Host._init_events, mock.Mock):
1103-
self.useFixture(fixtures.MockPatch(
1109+
self.useFixture(fixtures.MonkeyPatch(
11041110
'nova.virt.libvirt.host.Host._init_events',
1105-
side_effect=evloop))
1111+
evloop))
11061112

11071113

11081114
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/regressions/test_bug_1896463.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,6 @@ def setUp(self):
5151
self.api_fixture = self.useFixture(nova_fixtures.OSAPIFixture(
5252
api_version='v2.1'))
5353

54-
self.useFixture(fixtures.MockPatch(
55-
'nova.pci.utils.get_mac_by_pci_address',
56-
return_value='52:54:00:1e:59:c6'))
57-
58-
self.useFixture(fixtures.MockPatch(
59-
'nova.pci.utils.get_vf_num_by_pci_address',
60-
return_value=1))
61-
6254
self.admin_api = self.api_fixture.admin_api
6355
self.admin_api.microversion = 'latest'
6456
self.api = self.admin_api

nova/tests/functional/test_aggregates.py

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

936936
# Start nova services.
937937
self.start_service('conductor')
938-
self.admin_api = self.useFixture(
939-
nova_fixtures.OSAPIFixture(api_version='v2.1')).admin_api
940-
self.api = self.useFixture(
941-
nova_fixtures.OSAPIFixture(api_version='v2.1',
942-
project_id=uuids.non_admin)).api
938+
api_fixture = self.useFixture(
939+
nova_fixtures.OSAPIFixture(api_version='v2.1'))
940+
self.admin_api = api_fixture.admin_api
941+
self.api = api_fixture.api
942+
self.api.project_id = uuids.non_admin
943943
# Add the AggregateMultiTenancyIsolation to the list of enabled
944944
# filters since it is not enabled by default.
945945
enabled_filters = CONF.filter_scheduler.enabled_filters
@@ -1037,15 +1037,15 @@ def setUp(self):
10371037
self.glance = self.useFixture(nova_fixtures.GlanceFixture(self))
10381038
self.useFixture(nova_fixtures.NeutronFixture(self))
10391039
self.useFixture(func_fixtures.PlacementFixture())
1040-
# Intentionally keep these separate since we want to create the
1041-
# server with the non-admin user in a different project.
1042-
admin_api_fixture = self.useFixture(nova_fixtures.OSAPIFixture(
1040+
# Intentionally define different project id for the two client since
1041+
# we want to create the server with the non-admin user in a different
1042+
# project.
1043+
api_fixture = self.useFixture(nova_fixtures.OSAPIFixture(
10431044
api_version='v2.1', project_id=uuids.admin_project))
1044-
self.admin_api = admin_api_fixture.admin_api
1045+
self.admin_api = api_fixture.admin_api
10451046
self.admin_api.microversion = 'latest'
1046-
user_api_fixture = self.useFixture(nova_fixtures.OSAPIFixture(
1047-
api_version='v2.1', project_id=uuids.user_project))
1048-
self.api = user_api_fixture.api
1047+
self.api = api_fixture.api
1048+
self.api.project_id = uuids.user_project
10491049
self.api.microversion = 'latest'
10501050

10511051
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'

0 commit comments

Comments
 (0)