Skip to content

Commit ba87ba1

Browse files
Manciukicbchalios
authored andcommitted
test(vhost): run tests also with PCI enabled
Refactor the code to use common fixtures and run all the tests with PCI enabled as well. Signed-off-by: Riccardo Mancini <[email protected]> Signed-off-by: Babis Chalios <[email protected]>
1 parent c1ec7bc commit ba87ba1

File tree

1 file changed

+65
-53
lines changed

1 file changed

+65
-53
lines changed

tests/integration_tests/functional/test_drive_vhost_user.py

Lines changed: 65 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,62 @@
66
import shutil
77
from pathlib import Path
88

9+
import pytest
10+
911
import host_tools.drive as drive_tools
1012
from framework.utils_drive import partuuid_and_disk_path
1113
from host_tools.fcmetrics import FcDeviceMetrics
1214

1315

16+
@pytest.fixture
17+
def uvm_vhost_user_plain_any(microvm_factory, guest_kernel, pci_enabled):
18+
"""Builds a plain VM with no root volume"""
19+
return microvm_factory.build(
20+
guest_kernel, None, pci=pci_enabled, monitor_memory=False
21+
)
22+
23+
24+
@pytest.fixture
25+
def uvm_vhost_user_booted_ro(uvm_vhost_user_plain_any, rootfs):
26+
"""Returns a VM with a vhost-user rootfs"""
27+
vm = uvm_vhost_user_plain_any
28+
29+
# We need to setup ssh keys manually because we did not specify rootfs
30+
# in microvm_factory.build method
31+
ssh_key = rootfs.with_suffix(".id_rsa")
32+
vm.ssh_key = ssh_key
33+
vm.spawn()
34+
vm.basic_config(add_root_device=False)
35+
vm.add_vhost_user_drive("rootfs", rootfs, is_root_device=True, is_read_only=True)
36+
vm.add_net_iface()
37+
vm.start()
38+
39+
return vm
40+
41+
42+
@pytest.fixture
43+
def uvm_vhost_user_booted_rw(uvm_vhost_user_plain_any, rootfs):
44+
"""Returns a VM with a vhost-user rootfs"""
45+
vm = uvm_vhost_user_plain_any
46+
47+
# We need to setup ssh keys manually because we did not specify rootfs
48+
# in microvm_factory.build method
49+
ssh_key = rootfs.with_suffix(".id_rsa")
50+
vm.ssh_key = ssh_key
51+
vm.spawn()
52+
vm.basic_config(add_root_device=False)
53+
# Create a rw rootfs file that is unique to the microVM
54+
rootfs_rw = Path(vm.chroot()) / "rootfs"
55+
shutil.copy(rootfs, rootfs_rw)
56+
vm.add_vhost_user_drive(
57+
"rootfs", rootfs_rw, is_root_device=True, is_read_only=False
58+
)
59+
vm.add_net_iface()
60+
vm.start()
61+
62+
return vm
63+
64+
1465
def _check_block_size(ssh_connection, dev_path, size):
1566
"""
1667
Checks the size of the block device.
@@ -34,26 +85,16 @@ def _check_drives(test_microvm, assert_dict, keys_array):
3485
assert blockdev_out_line_cols[col] == assert_dict[key]
3586

3687

37-
def test_vhost_user_block(microvm_factory, guest_kernel, rootfs):
88+
def test_vhost_user_block(uvm_vhost_user_booted_ro):
3889
"""
3990
This test simply tries to boot a VM with
4091
vhost-user-block as a root device.
4192
"""
4293

43-
vm = microvm_factory.build(guest_kernel, None, monitor_memory=False)
44-
45-
# We need to setup ssh keys manually because we did not specify rootfs
46-
# in microvm_factory.build method
47-
ssh_key = rootfs.with_suffix(".id_rsa")
48-
vm.ssh_key = ssh_key
49-
vm.spawn()
50-
vm.basic_config(add_root_device=False)
51-
vm.add_vhost_user_drive("rootfs", rootfs, is_root_device=True, is_read_only=True)
52-
vm.add_net_iface()
94+
vm = uvm_vhost_user_booted_ro
5395
vhost_user_block_metrics = FcDeviceMetrics(
5496
"vhost_user_block", 1, aggr_supported=False
5597
)
56-
vm.start()
5798

5899
# Now check that vhost-user-block with rw is last.
59100
# 1-0 means line 1, column 0.
@@ -65,29 +106,14 @@ def test_vhost_user_block(microvm_factory, guest_kernel, rootfs):
65106
vhost_user_block_metrics.validate(vm)
66107

67108

68-
def test_vhost_user_block_read_write(microvm_factory, guest_kernel, rootfs):
109+
def test_vhost_user_block_read_write(uvm_vhost_user_booted_rw):
69110
"""
70111
This test simply tries to boot a VM with
71112
vhost-user-block as a root device.
72113
This test configures vhost-user-block to be read write.
73114
"""
74115

75-
vm = microvm_factory.build(guest_kernel, None, monitor_memory=False)
76-
77-
# We need to setup ssh keys manually because we did not specify rootfs
78-
# in microvm_factory.build method
79-
ssh_key = rootfs.with_suffix(".id_rsa")
80-
vm.ssh_key = ssh_key
81-
vm.spawn()
82-
vm.basic_config(add_root_device=False)
83-
84-
# Create a rw rootfs file that is unique to the microVM
85-
rootfs_rw = Path(vm.chroot()) / "rootfs"
86-
shutil.copy(rootfs, rootfs_rw)
87-
88-
vm.add_vhost_user_drive("rootfs", rootfs_rw, is_root_device=True)
89-
vm.add_net_iface()
90-
vm.start()
116+
vm = uvm_vhost_user_booted_rw
91117

92118
# Now check that vhost-user-block with rw is last.
93119
# 1-0 means line 1, column 0.
@@ -98,22 +124,12 @@ def test_vhost_user_block_read_write(microvm_factory, guest_kernel, rootfs):
98124
_check_drives(vm, assert_dict, assert_dict.keys())
99125

100126

101-
def test_vhost_user_block_disconnect(microvm_factory, guest_kernel, rootfs):
127+
def test_vhost_user_block_disconnect(uvm_vhost_user_booted_ro):
102128
"""
103129
Test that even if backend is killed, Firecracker is still responsive.
104130
"""
105131

106-
vm = microvm_factory.build(guest_kernel, None, monitor_memory=False)
107-
108-
# We need to set up ssh keys manually because we did not specify rootfs
109-
# in microvm_factory.build method
110-
ssh_key = rootfs.with_suffix(".id_rsa")
111-
vm.ssh_key = ssh_key
112-
vm.spawn()
113-
vm.basic_config(add_root_device=False)
114-
vm.add_vhost_user_drive("rootfs", rootfs, is_root_device=True, is_read_only=True)
115-
vm.add_net_iface()
116-
vm.start()
132+
vm = uvm_vhost_user_booted_ro
117133

118134
# Killing the backend
119135
vm.disks_vhost_user["rootfs"].kill()
@@ -123,15 +139,15 @@ def test_vhost_user_block_disconnect(microvm_factory, guest_kernel, rootfs):
123139
_config = vm.api.vm_config.get().json()
124140

125141

126-
def test_device_ordering(microvm_factory, guest_kernel, rootfs):
142+
def test_device_ordering(uvm_vhost_user_plain_any, rootfs):
127143
"""
128144
Verify device ordering.
129145
130146
The root device should correspond to /dev/vda in the guest and
131147
the order of the other devices should match their configuration order.
132148
"""
133149

134-
vm = microvm_factory.build(guest_kernel, None, monitor_memory=False)
150+
vm = uvm_vhost_user_plain_any
135151

136152
# We need to setup ssh keys manually because we did not specify rootfs
137153
# in microvm_factory.build method
@@ -194,16 +210,12 @@ def test_device_ordering(microvm_factory, guest_kernel, rootfs):
194210
vhost_user_block_metrics.validate(vm)
195211

196212

197-
def test_partuuid_boot(
198-
microvm_factory,
199-
guest_kernel,
200-
rootfs,
201-
):
213+
def test_partuuid_boot(uvm_vhost_user_plain_any, rootfs):
202214
"""
203215
Test the output reported by blockdev when booting with PARTUUID.
204216
"""
205217

206-
vm = microvm_factory.build(guest_kernel, None, monitor_memory=False)
218+
vm = uvm_vhost_user_plain_any
207219

208220
# We need to setup ssh keys manually because we did not specify rootfs
209221
# in microvm_factory.build method
@@ -230,12 +242,12 @@ def test_partuuid_boot(
230242
_check_drives(vm, assert_dict, assert_dict.keys())
231243

232244

233-
def test_partuuid_update(microvm_factory, guest_kernel, rootfs):
245+
def test_partuuid_update(uvm_vhost_user_plain_any, rootfs):
234246
"""
235247
Test successful switching from PARTUUID boot to /dev/vda boot.
236248
"""
237249

238-
vm = microvm_factory.build(guest_kernel, None, monitor_memory=False)
250+
vm = uvm_vhost_user_plain_any
239251

240252
# We need to setup ssh keys manually because we did not specify rootfs
241253
# in microvm_factory.build method
@@ -272,7 +284,7 @@ def test_partuuid_update(microvm_factory, guest_kernel, rootfs):
272284
vhost_user_block_metrics.validate(vm)
273285

274286

275-
def test_config_change(microvm_factory, guest_kernel, rootfs):
287+
def test_config_change(uvm_plain_any):
276288
"""
277289
Verify handling of block device resize.
278290
We expect that the guest will start reporting the updated size
@@ -283,7 +295,7 @@ def test_config_change(microvm_factory, guest_kernel, rootfs):
283295
new_sizes = [20, 10, 30] # MB
284296
mkfs_mount_cmd = "mkfs.ext4 /dev/vdb && mkdir -p /tmp/tmp && mount /dev/vdb /tmp/tmp && umount /tmp/tmp"
285297

286-
vm = microvm_factory.build(guest_kernel, rootfs, monitor_memory=False)
298+
vm = uvm_plain_any
287299
vm.spawn(log_level="Info")
288300
vm.basic_config()
289301
vm.add_net_iface()

0 commit comments

Comments
 (0)