Skip to content

Commit

Permalink
block_disk_not_default_options: creates new test case
Browse files Browse the repository at this point in the history
Creates a new test case that boots up a VM with a disk
configured with non-common options such as packed or
page-per-vq. Unplug the disk and hotplugs it again.

Signed-off-by: Mario Casquero <[email protected]>
  • Loading branch information
mcasquer committed Nov 19, 2024
1 parent 2d0ef5e commit c955535
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 0 deletions.
58 changes: 58 additions & 0 deletions qemu/tests/block_disk_not_default_options.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
from virttest import error_context, qemu_qtree

from provider.block_devices_plug import BlockDevicesPlug


@error_context.context_aware
def run(test, params, env):
"""
Test the disk non-default options.
Steps:
1. Boot a VM with packed=true and page-per-vq=true
2. Verify the packed and page-per-vq values
3. Do some basic I/O operation in the VM
4. Unplug and hotplug the disk
5. Do again a basic I/O operation
:param test: QEMU test object.
:param params: Dictionary with the test parameters.
:param env: Dictionary with test environment.
"""

def verify_non_default_options(option, possible_types):
"""Verify the non-default values."""
error_context.context(f"Verify {option} from monitor.", test.log.info)
qtree = qemu_qtree.QtreeContainer()
qtree_option_value = False
try:
qtree.parse_info_qtree(vm.monitor.info("qtree"))
except AttributeError:
test.cancel("Monitor doesn't support qtree skip this test")
error_msg = (
f"'{option}' value mismatch: expected 'true' but report from monitor is: %s"
)

for node in qtree.get_nodes():
node_type = node.qtree["type"]
if isinstance(node, qemu_qtree.QtreeDev) and node_type in possible_types:
qtree_option_value = node.qtree[option]

if not qtree_option_value:
error_msg = error_msg % qtree_option_value
test.fail(error_msg)

vm = env.get_vm(params["main_vm"])
vm.verify_alive()
session = vm.wait_for_login(timeout=360)
session.cmd(params.get("dd_cmd"))

possible_types = {"virtio-blk-device", "virtio-scsi-device"}
verify_non_default_options("packed", possible_types)
possible_types = {"virtio-blk-pci", "virtio-scsi-pci"}
verify_non_default_options("page-per-vq", possible_types)

plug = BlockDevicesPlug(vm)
plug.unplug_devs_serial()
plug.hotplug_devs_serial()
session.cmd(params.get("dd_cmd"))
19 changes: 19 additions & 0 deletions qemu/tests/cfg/block_disk_not_default_options.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
- block_disk_not_default_options:
only virtio_blk, virtio_scsi
type = block_disk_not_default_options
only x86_64
start_vm = yes
images += " stg0"
boot_drive_stg0 = yes
image_name_stg0 = images/storage0
image_size_stg0 = 40G
remove_image_stg0 = yes
force_create_image_stg0 = yes
dd_cmd = "dd if=/dev/urandom of=test.txt bs=1M count=10"
variants:
- with_packed_and_ppv:
virtio_blk:
blk_extra_params_stg0 = "packed=true,page-per-vq=true"
virtio_scsi:
bus_extra_params_stg0 = "packed=true,page-per-vq=true"
drive_bus_stg0 = 1

0 comments on commit c955535

Please sign in to comment.