Skip to content

Commit

Permalink
qemu.tests: Add new cases for check device option
Browse files Browse the repository at this point in the history
Boot up guest with specific option and check the value of option
inside guest. This pullreqs include three subtest for option check.

Signed-off-by: Yiqiao Pu <[email protected]>
  • Loading branch information
ypu committed Aug 15, 2014
1 parent 003d7c9 commit b51f79c
Show file tree
Hide file tree
Showing 2 changed files with 170 additions and 0 deletions.
70 changes: 70 additions & 0 deletions qemu/tests/cfg/device_option_check.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
- device_option_check: install setup image_copy unattended_install
type = device_option_check
variants:
- ide_ver_check:
only ide ahci
parameter_value = random
params_name = blk_extra_params
parameter_prefix = ver=
parameter_len = 4
start_vm = no
check_cmds = hdparm
cmd = hdparm -i `ls /dev/[svh]da`
pattern = FwRev=%s
Windows:
cmd = wmic diskdrive get firmwarerevision
pattern = %s
check_in_qtree = yes
qtree_check_keyword = id
qtree_check_value = image1
qtree_check_option = ver
force_drive_format = ide-drive
- blk_wwn_check:
only ide virtio_scsi ahci
only RHEL
parameter_value = 0x5000c50015ea71ad
check_in_qtree = yes
qtree_check_keyword = id
qtree_check_option = wwn
start_vm = yes
check_cmds = ls sg
cmd_ls = ls -l /dev/disk/by-id/wwn*
pattern_ls = wwn-%s
cmd_sg = sg_inq -p 0x83 `ls /dev/[svh]da`
pattern_sg = \[%s\]
variants:
- default_drive_format:
- special_drive_format:
ide, ahci:
force_drive_format = ide-drive
virtio_scsi:
force_drive_format = scsi-disk
variants:
- wwn_disk:
params_name = blk_extra_params_image1
blk_extra_params_image1 = wwn=0x5000c50015ea71ad
qtree_check_value = image1
- wwn_cdrom:
params_name = blk_extra_params_cd1
blk_extra_params_cd1 = wwn=0x5000c50015ea71ad
qtree_check_value = cd1
cmd_sg = sg_inq -p 0x83 `ls /dev/sr*`
cdrom_cd1 = isos/windows/winutils.iso
- blk_serail_check:
parameter_value = random
params_name = drive_serial_image1
ignore_str= !"#$%&'()*+./;<=>?@[\]^`{|}~,
convert_str =
parameter_len = 20
start_vm = no
check_in_qtree = yes
check_cmds = ls
cmd = ls /dev/disk/by-id
pattern = %s
Windows:
cmd = D:\hddsn.exe C:
pattern = %s
check_in_qtree = yes
qtree_check_keyword = id
qtree_check_value = image1
qtree_check_option = serial
100 changes: 100 additions & 0 deletions qemu/tests/device_option_check.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import logging
import re
from autotest.client.shared import error
from virttest import utils_misc
from virttest import env_process
from virttest import qemu_qtree


@error.context_aware
def run(test, params, env):
"""
Qemu device options value check test:
1) Boot up guest with setted option value
2) Check the value is correct inside guest
:param test: QEMU test object
:param params: Dictionary with the test parameters
:param env: Dictionary with test environment.
"""
error.context("Boot up guest.", logging.info)
timeout = float(params.get("login_timeout", 240))
vm = env.get_vm(params["main_vm"])
parameter_value = params.get("parameter_value", "random")
params_name = params["params_name"]
parameter_prefix = params.get("parameter_prefix", "")
check_cmds = params["check_cmds"]
convert_str = params.get("convert_str")

if params.get("start_vm") == "no":
if parameter_value == "random":
parameter_len = int(params.get("parameter_len", 4))
random_ignore_str = params.get("ignore_str")
func_generate_random_string = utils_misc.generate_random_string
args = (parameter_len, )
if random_ignore_str:
args += ("ignore_str=%s" % random_ignore_str, )
if convert_str:
args += ("convert_str=%s" % convert_str, )
parameter_value = func_generate_random_string(*args)

params[params_name] = parameter_prefix + parameter_value
logging.debug("Setup '%s' to '%s'" % (params_name,
params[params_name]))

params["start_vm"] = "yes"
env_process.preprocess_vm(test, params, env, vm.name)

if convert_str:
tmp_str = re.sub(r'\\\\', 'Abackslash', parameter_value)
tmp_str = re.sub(r'\\', '', tmp_str)
tmp_str = re.sub('Abackslash', r"\\", tmp_str)
parameter_value_raw = tmp_str
else:
parameter_value_raw = parameter_value

if params.get("check_in_qtree") == "yes":
error.context("Check option in qtree", logging.info)
qtree = qemu_qtree.QtreeContainer()
try:
qtree.parse_info_qtree(vm.monitor.info('qtree'))
except AttributeError:
logging.debug("Monitor deson't support info qtree skip this test")
qtree = None
if qtree:
keyword = params['qtree_check_keyword']
qtree_check_value = params['qtree_check_value']
qtree_check_option = params['qtree_check_option']
for qdev in qtree.get_nodes():
if (keyword in qdev.qtree
and qdev.qtree[keyword] == qtree_check_value):
qtree_value = qdev.qtree.get(qtree_check_option)
if re.match('".*"$', qtree_value):
qtree_value = re.findall('"(.*)"$', qtree_value)[0]
if qtree_value != parameter_value_raw:
raise error.TestFail("Value from info qtree is not "
"match with the value from "
"command line: %s vs "
"%s" % (qtree_value,
parameter_value_raw))

session = vm.wait_for_login(timeout=timeout)

failed_log = ""
for check_cmd in check_cmds.split():
check_cmd_params = params.object_params(check_cmd)
cmd = check_cmd_params['cmd']
pattern = check_cmd_params['pattern'] % parameter_value_raw

error.context("Check option with command %s" % cmd, logging.info)
_, output = session.cmd_status_output(cmd)
if not re.findall(r'%s' % pattern, output):
failed_log += ("Can not find option %s from guest."
" Guest output is '%s'" % (params_name,
output))

session.close()

if failed_log:
raise error.TestFail(failed_log)

0 comments on commit b51f79c

Please sign in to comment.