Skip to content

Commit 846f2e1

Browse files
committed
fixup: run more tests on PCI enabled
This commit allows more test to run with PCI enabled, just in case we missed something else. Signed-off-by: Riccardo Mancini <[email protected]>
1 parent 05bd288 commit 846f2e1

12 files changed

+130
-113
lines changed

tests/integration_tests/functional/test_balloon.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -449,11 +449,11 @@ def test_stats_update(uvm_plain_any):
449449
assert next_stats["available_memory"] != final_stats["available_memory"]
450450

451451

452-
def test_balloon_snapshot(microvm_factory, guest_kernel, rootfs):
452+
def test_balloon_snapshot(uvm_plain_any, microvm_factory):
453453
"""
454454
Test that the balloon works after pause/resume.
455455
"""
456-
vm = microvm_factory.build(guest_kernel, rootfs)
456+
vm = uvm_plain_any
457457
vm.spawn()
458458
vm.basic_config(
459459
vcpu_count=2,
@@ -531,11 +531,11 @@ def test_balloon_snapshot(microvm_factory, guest_kernel, rootfs):
531531
assert stats_after_snap["available_memory"] > latest_stats["available_memory"]
532532

533533

534-
def test_memory_scrub(microvm_factory, guest_kernel, rootfs):
534+
def test_memory_scrub(uvm_plain_any):
535535
"""
536536
Test that the memory is zeroed after deflate.
537537
"""
538-
microvm = microvm_factory.build(guest_kernel, rootfs)
538+
microvm = uvm_plain_any
539539
microvm.spawn()
540540
microvm.basic_config(vcpu_count=2, mem_size_mib=256)
541541
microvm.add_net_iface()

tests/integration_tests/functional/test_concurrency.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@
77
NO_OF_MICROVMS = 20
88

99

10-
def test_run_concurrency(microvm_factory, guest_kernel, rootfs):
10+
def test_run_concurrency(microvm_factory, guest_kernel, rootfs, pci_enabled):
1111
"""
1212
Check we can spawn multiple microvms.
1313
"""
1414

1515
def launch1():
16-
microvm = microvm_factory.build(guest_kernel, rootfs)
16+
microvm = microvm_factory.build(guest_kernel, rootfs, pci=pci_enabled)
1717
microvm.time_api_requests = False # is flaky because of parallelism
1818
microvm.spawn()
1919
microvm.basic_config(vcpu_count=1, mem_size_mib=128)

tests/integration_tests/functional/test_cpu_template_helper.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -261,9 +261,7 @@ def get_guest_msrs(microvm, msr_index_list):
261261
),
262262
)
263263
def test_cpu_config_dump_vs_actual(
264-
microvm_factory,
265-
guest_kernel,
266-
rootfs,
264+
uvm_plain_any,
267265
cpu_template_helper,
268266
tmp_path,
269267
):
@@ -277,7 +275,7 @@ def test_cpu_config_dump_vs_actual(
277275
dump_cpu_config = build_cpu_config_dict(cpu_config_path)
278276

279277
# Retrieve actual CPU config from guest
280-
microvm = microvm_factory.build(guest_kernel, rootfs)
278+
microvm = uvm_plain_any
281279
microvm.spawn()
282280
microvm.basic_config(vcpu_count=1)
283281
microvm.add_net_iface()

tests/integration_tests/functional/test_drive_vhost_user.py

Lines changed: 64 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,61 @@
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+
return microvm_factory.build(
19+
guest_kernel, None, pci=pci_enabled, monitor_memory=False
20+
)
21+
22+
23+
@pytest.fixture
24+
def uvm_vhost_user_booted_ro(uvm_vhost_user_plain_any, rootfs):
25+
"""Returns a VM with a vhost-user rootfs"""
26+
vm = uvm_vhost_user_plain_any
27+
28+
# We need to setup ssh keys manually because we did not specify rootfs
29+
# in microvm_factory.build method
30+
ssh_key = rootfs.with_suffix(".id_rsa")
31+
vm.ssh_key = ssh_key
32+
vm.spawn()
33+
vm.basic_config(add_root_device=False)
34+
vm.add_vhost_user_drive("rootfs", rootfs, is_root_device=True, is_read_only=True)
35+
vm.add_net_iface()
36+
vm.start()
37+
38+
return vm
39+
40+
41+
@pytest.fixture
42+
def uvm_vhost_user_booted_rw(uvm_vhost_user_plain_any, rootfs):
43+
"""Returns a VM with a vhost-user rootfs"""
44+
vm = uvm_vhost_user_plain_any
45+
46+
# We need to setup ssh keys manually because we did not specify rootfs
47+
# in microvm_factory.build method
48+
ssh_key = rootfs.with_suffix(".id_rsa")
49+
vm.ssh_key = ssh_key
50+
vm.spawn()
51+
vm.basic_config(add_root_device=False)
52+
# Create a rw rootfs file that is unique to the microVM
53+
rootfs_rw = Path(vm.chroot()) / "rootfs"
54+
shutil.copy(rootfs, rootfs_rw)
55+
vm.add_vhost_user_drive(
56+
"rootfs", rootfs_rw, is_root_device=True, is_read_only=False
57+
)
58+
vm.add_net_iface()
59+
vm.start()
60+
61+
return vm
62+
63+
1464
def _check_block_size(ssh_connection, dev_path, size):
1565
"""
1666
Checks the size of the block device.
@@ -34,26 +84,16 @@ def _check_drives(test_microvm, assert_dict, keys_array):
3484
assert blockdev_out_line_cols[col] == assert_dict[key]
3585

3686

37-
def test_vhost_user_block(microvm_factory, guest_kernel, rootfs):
87+
def test_vhost_user_block(uvm_vhost_user_booted_ro):
3888
"""
3989
This test simply tries to boot a VM with
4090
vhost-user-block as a root device.
4191
"""
4292

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()
93+
vm = uvm_vhost_user_booted_ro
5394
vhost_user_block_metrics = FcDeviceMetrics(
5495
"vhost_user_block", 1, aggr_supported=False
5596
)
56-
vm.start()
5797

5898
# Now check that vhost-user-block with rw is last.
5999
# 1-0 means line 1, column 0.
@@ -65,29 +105,14 @@ def test_vhost_user_block(microvm_factory, guest_kernel, rootfs):
65105
vhost_user_block_metrics.validate(vm)
66106

67107

68-
def test_vhost_user_block_read_write(microvm_factory, guest_kernel, rootfs):
108+
def test_vhost_user_block_read_write(uvm_vhost_user_booted_rw):
69109
"""
70110
This test simply tries to boot a VM with
71111
vhost-user-block as a root device.
72112
This test configures vhost-user-block to be read write.
73113
"""
74114

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()
115+
vm = uvm_vhost_user_booted_rw
91116

92117
# Now check that vhost-user-block with rw is last.
93118
# 1-0 means line 1, column 0.
@@ -98,22 +123,12 @@ def test_vhost_user_block_read_write(microvm_factory, guest_kernel, rootfs):
98123
_check_drives(vm, assert_dict, assert_dict.keys())
99124

100125

101-
def test_vhost_user_block_disconnect(microvm_factory, guest_kernel, rootfs):
126+
def test_vhost_user_block_disconnect(uvm_vhost_user_booted_ro):
102127
"""
103128
Test that even if backend is killed, Firecracker is still responsive.
104129
"""
105130

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()
131+
vm = uvm_vhost_user_booted_ro
117132

118133
# Killing the backend
119134
vm.disks_vhost_user["rootfs"].kill()
@@ -123,15 +138,15 @@ def test_vhost_user_block_disconnect(microvm_factory, guest_kernel, rootfs):
123138
_config = vm.api.vm_config.get().json()
124139

125140

126-
def test_device_ordering(microvm_factory, guest_kernel, rootfs):
141+
def test_device_ordering(uvm_vhost_user_plain_any, rootfs):
127142
"""
128143
Verify device ordering.
129144
130145
The root device should correspond to /dev/vda in the guest and
131146
the order of the other devices should match their configuration order.
132147
"""
133148

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

136151
# We need to setup ssh keys manually because we did not specify rootfs
137152
# in microvm_factory.build method
@@ -194,16 +209,12 @@ def test_device_ordering(microvm_factory, guest_kernel, rootfs):
194209
vhost_user_block_metrics.validate(vm)
195210

196211

197-
def test_partuuid_boot(
198-
microvm_factory,
199-
guest_kernel,
200-
rootfs,
201-
):
212+
def test_partuuid_boot(uvm_vhost_user_plain_any, rootfs):
202213
"""
203214
Test the output reported by blockdev when booting with PARTUUID.
204215
"""
205216

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

208219
# We need to setup ssh keys manually because we did not specify rootfs
209220
# in microvm_factory.build method
@@ -230,12 +241,12 @@ def test_partuuid_boot(
230241
_check_drives(vm, assert_dict, assert_dict.keys())
231242

232243

233-
def test_partuuid_update(microvm_factory, guest_kernel, rootfs):
244+
def test_partuuid_update(uvm_vhost_user_plain_any, rootfs):
234245
"""
235246
Test successful switching from PARTUUID boot to /dev/vda boot.
236247
"""
237248

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

240251
# We need to setup ssh keys manually because we did not specify rootfs
241252
# in microvm_factory.build method
@@ -272,7 +283,7 @@ def test_partuuid_update(microvm_factory, guest_kernel, rootfs):
272283
vhost_user_block_metrics.validate(vm)
273284

274285

275-
def test_config_change(microvm_factory, guest_kernel, rootfs):
286+
def test_config_change(uvm_plain_any):
276287
"""
277288
Verify handling of block device resize.
278289
We expect that the guest will start reporting the updated size
@@ -283,7 +294,7 @@ def test_config_change(microvm_factory, guest_kernel, rootfs):
283294
new_sizes = [20, 10, 30] # MB
284295
mkfs_mount_cmd = "mkfs.ext4 /dev/vdb && mkdir -p /tmp/tmp && mount /dev/vdb /tmp/tmp && umount /tmp/tmp"
285296

286-
vm = microvm_factory.build(guest_kernel, rootfs, monitor_memory=False)
297+
vm = uvm_plain_any
287298
vm.spawn(log_level="Info")
288299
vm.basic_config()
289300
vm.add_net_iface()

tests/integration_tests/functional/test_feat_parity.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,11 @@ def inst_set_cpu_template_fxt(request):
2828

2929

3030
@pytest.fixture(name="vm")
31-
def vm_fxt(
32-
microvm_factory,
33-
inst_set_cpu_template,
34-
guest_kernel,
35-
rootfs,
36-
):
31+
def vm_fxt(uvm_plain_any, inst_set_cpu_template):
3732
"""
3833
Create a VM, using the normal CPU templates
3934
"""
40-
vm = microvm_factory.build(guest_kernel, rootfs)
35+
vm = uvm_plain_any
4136
vm.spawn()
4237
vm.basic_config(vcpu_count=1, mem_size_mib=1024, cpu_template=inst_set_cpu_template)
4338
vm.add_net_iface()

tests/integration_tests/functional/test_snapshot_basic.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -115,9 +115,8 @@ def test_snapshot_current_version(uvm_nano):
115115
def test_cycled_snapshot_restore(
116116
bin_vsock_path,
117117
tmp_path,
118+
uvm_plain_any,
118119
microvm_factory,
119-
guest_kernel,
120-
rootfs,
121120
snapshot_type,
122121
use_snapshot_editor,
123122
cpu_template_any,
@@ -133,7 +132,7 @@ def test_cycled_snapshot_restore(
133132
logger = logging.getLogger("snapshot_sequence")
134133
diff_snapshots = snapshot_type == SnapshotType.DIFF
135134

136-
vm = microvm_factory.build(guest_kernel, rootfs)
135+
vm = uvm_plain_any
137136
vm.spawn()
138137
vm.basic_config(
139138
vcpu_count=2,
@@ -249,7 +248,7 @@ def test_load_snapshot_failure_handling(uvm_plain):
249248
vm.mark_killed()
250249

251250

252-
def test_cmp_full_and_first_diff_mem(microvm_factory, guest_kernel, rootfs):
251+
def test_cmp_full_and_first_diff_mem(uvm_plain_any):
253252
"""
254253
Compare memory of 2 consecutive full and diff snapshots.
255254
@@ -260,7 +259,7 @@ def test_cmp_full_and_first_diff_mem(microvm_factory, guest_kernel, rootfs):
260259
"""
261260
logger = logging.getLogger("snapshot_sequence")
262261

263-
vm = microvm_factory.build(guest_kernel, rootfs)
262+
vm = uvm_plain_any
264263
vm.spawn()
265264
vm.basic_config(
266265
vcpu_count=2,
@@ -430,12 +429,12 @@ def test_create_large_diff_snapshot(uvm_plain):
430429
# process would have been taken down.
431430

432431

433-
def test_diff_snapshot_overlay(guest_kernel, rootfs, microvm_factory):
432+
def test_diff_snapshot_overlay(uvm_plain_any, microvm_factory):
434433
"""
435434
Tests that if we take a diff snapshot and direct firecracker to write it on
436435
top of an existing snapshot file, it will successfully merge them.
437436
"""
438-
basevm = microvm_factory.build(guest_kernel, rootfs)
437+
basevm = uvm_plain_any
439438
basevm.spawn()
440439
basevm.basic_config(track_dirty_pages=True)
441440
basevm.add_net_iface()
@@ -467,15 +466,15 @@ def test_diff_snapshot_overlay(guest_kernel, rootfs, microvm_factory):
467466
# Check that the restored VM works
468467

469468

470-
def test_snapshot_overwrite_self(guest_kernel, rootfs, microvm_factory):
469+
def test_snapshot_overwrite_self(uvm_plain_any, microvm_factory):
471470
"""Tests that if we try to take a snapshot that would overwrite the
472471
very file from which the current VM is stored, nothing happens.
473472
474473
Note that even though we map the file as MAP_PRIVATE, the documentation
475474
of mmap does not specify what should happen if the file is changed after being
476475
mmap'd (https://man7.org/linux/man-pages/man2/mmap.2.html). It seems that
477476
these changes can propagate to the mmap'd memory region."""
478-
base_vm = microvm_factory.build(guest_kernel, rootfs)
477+
base_vm = uvm_plain_any
479478
base_vm.spawn()
480479
base_vm.basic_config()
481480
base_vm.add_net_iface()
@@ -499,11 +498,13 @@ def test_snapshot_overwrite_self(guest_kernel, rootfs, microvm_factory):
499498
# restored, with a new snapshot of this vm, does not break the VM
500499

501500

502-
def test_vmgenid(guest_kernel_linux_6_1, rootfs, microvm_factory, snapshot_type):
501+
def test_vmgenid(
502+
guest_kernel_linux_6_1, rootfs, microvm_factory, pci_enabled, snapshot_type
503+
):
503504
"""
504505
Test VMGenID device upon snapshot resume
505506
"""
506-
base_vm = microvm_factory.build(guest_kernel_linux_6_1, rootfs)
507+
base_vm = microvm_factory.build(guest_kernel_linux_6_1, rootfs, pci=pci_enabled)
507508
base_vm.spawn()
508509
base_vm.basic_config(track_dirty_pages=True)
509510
base_vm.add_net_iface()

0 commit comments

Comments
 (0)