Skip to content

Commit 69667a8

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: .zuul.yaml nova/tests/unit/virt/libvirt/test_host.py Change-Id: Ic1352ec31996577a5d0ad18a057339df3e49de25 (cherry picked from commit bf654e3)
1 parent b40bd1b commit 69667a8

23 files changed

+160
-198
lines changed

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
@@ -1032,9 +1032,15 @@ def setUp(self):
10321032
self.api = client.TestOpenStackClient(
10331033
'fake', base_url, project_id=self.project_id,
10341034
roles=['reader', 'member'])
1035+
self.alternative_api = client.TestOpenStackClient(
1036+
'fake', base_url, project_id=self.project_id,
1037+
roles=['reader', 'member'])
10351038
self.admin_api = client.TestOpenStackClient(
10361039
'admin', base_url, project_id=self.project_id,
10371040
roles=['reader', 'member', 'admin'])
1041+
self.alternative_admin_api = client.TestOpenStackClient(
1042+
'admin', base_url, project_id=self.project_id,
1043+
roles=['reader', 'member', 'admin'])
10381044
self.reader_api = client.TestOpenStackClient(
10391045
'reader', base_url, project_id=self.project_id,
10401046
roles=['reader'])
@@ -1130,9 +1136,9 @@ def evloop(*args, **kwargs):
11301136
# Don't poison the function if it's already mocked
11311137
import nova.virt.libvirt.host
11321138
if not isinstance(nova.virt.libvirt.host.Host._init_events, mock.Mock):
1133-
self.useFixture(fixtures.MockPatch(
1139+
self.useFixture(fixtures.MonkeyPatch(
11341140
'nova.virt.libvirt.host.Host._init_events',
1135-
side_effect=evloop))
1141+
evloop))
11361142

11371143

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

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'

0 commit comments

Comments
 (0)