提交 196e5b78 编写于 作者: Y Yiqiao Pu

Merge pull request #93 from ypu/device_option_check

qemu.tests: Add a new case for check device option
- 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
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)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册