本文整理汇总了Python中virttest.virsh.has_command_help_match函数的典型用法代码示例。如果您正苦于以下问题:Python has_command_help_match函数的具体用法?Python has_command_help_match怎么用?Python has_command_help_match使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了has_command_help_match函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: remote_test
def remote_test(remote_ip, local_ip, remote_pwd, remote_prompt,
vm_name, status_error_test):
"""
Test remote case
"""
err = ""
status = 1
status_error = status_error_test
try:
remote_uri = libvirt_vm.complete_uri(local_ip)
session = remote.remote_login("ssh", remote_ip, "22",
"root", remote_pwd, remote_prompt)
session.cmd_output('LANG=C')
command = "virsh -c %s setvcpus %s 1 --live" % (remote_uri, vm_name)
if virsh.has_command_help_match("setvcpus", "--live") is None:
raise error.TestNAError("The current libvirt doesn't support"
" '--live' option for setvcpus")
status, output = session.cmd_status_output(command, internal_timeout=5)
session.close()
if status != 0:
err = output
except error.CmdError:
status = 1
err = "remote test failed"
return status, status_error, err
示例2: run
def run(test, params, env):
"""
Test command: virsh qemu-agent-command.
"""
vm_name = params.get("main_vm")
vm = env.get_vm(vm_name)
vm_ref = params.get("vm_ref", "domname")
vm_state = params.get("vm_state", "running")
cmd = params.get("agent_cmd", "")
options = params.get("options", "")
needs_agent = "yes" == params.get("needs_agent", "yes")
status_error = "yes" == params.get("status_error", "no")
if not status_error and options:
option = options.split()[0]
test_cmd = "qemu-agent-command"
if virsh.has_command_help_match(test_cmd, option) is None:
raise error.TestNAError("The current libvirt doesn't support"
" %s option for %s" % (option, test_cmd))
guest_cpu_busy = "yes" == params.get("guest_cpu_busy", "no")
password = params.get("password", None)
domuuid = vm.get_uuid()
domid = ""
xml_file = os.path.join(test.tmpdir, "vm.xml")
virsh.dumpxml(vm_name, extra="--inactive", to_file=xml_file)
libvirtd_inst = utils_libvirtd.Libvirtd()
# Prepare domain
try:
reset_domain(vm, vm_state, needs_agent, guest_cpu_busy, password)
except error.TestNAError, details:
reset_env(vm_name, xml_file)
raise error.TestNAError(details)
示例3: check_virsh_command_and_option
def check_virsh_command_and_option(command, option=None):
"""
Check if virsh command exists
:param command: the command to be checked
:param option: the command option to be checked
"""
msg = "This version of libvirt does not support "
if not virsh.has_help_command(command):
test.cancel(msg + "virsh command '%s'" % command)
if option and not virsh.has_command_help_match(command, option):
test.cancel(msg + "virsh command '%s' with option '%s'" % (command,
option))
示例4: remote_test
def remote_test(remote_ip, local_ip, remote_pwd, remote_prompt, vm_name):
"""
Test remote case
"""
err = ""
try:
remote_uri = libvirt_vm.complete_uri(local_ip)
session = remote.remote_login("ssh", remote_ip, "22",
"root", remote_pwd, remote_prompt)
session.cmd_output('LANG=C')
command = "virsh -c %s setvcpus %s 1 --live" % (remote_uri, vm_name)
if virsh.has_command_help_match(command, "--live") is None:
status_error = "yes"
status, output = session.cmd_status_output(command, internal_timeout=5)
session.close()
if status != 0:
err = output
except error.CmdError:
status = 1
status_error = "yes"
err = "remote test failed"
return status, status_error, err
示例5: operate
def operate(self, index):
"""
Return True/False (good/bad) result of operating on a device
"""
vadu_dargs = make_vadu_dargs(self.test_params,
self.device_xmls[index].xml)
# Acts as a dict for it's own API params
self.test_params.virsh['debug'] = True
vadu_dargs.update(self.test_params.virsh)
options = vadu_dargs.get('flagstr')
if options:
opt_list = options.split()
for opt in opt_list:
if not virsh.has_command_help_match("attach-device", opt) and\
not self.test_params.status_error:
raise error.TestNAError("Current libvirt version doesn't "
"support '%s' for attach-device"
" command" % opt)
cmdresult = self.test_params.virsh.attach_device(**vadu_dargs)
self.test_params.virsh['debug'] = False
# Command success is not enough, must also confirm activity worked
if (cmdresult.exit_status == 0):
if (cmdresult.stdout.count('attached successfully') or
cmdresult.stderr.count('attached successfully')):
return True
else:
if (cmdresult.stderr.count("XML error") or
cmdresult.stdout.count("XML error")):
logging.error("Errant XML:")
xmldevice = self.device_xmls[index]
# All LibvirtXMLBase subclasses string-convert into raw XML
for line in str(xmldevice).splitlines():
logging.error(" %s", line)
# See analyze_negative_results - expects return of true
if self.test_params.status_error:
return True
else:
return False
示例6: operate
def operate(self, index):
"""
Return True/False (good/bad) result of operating on a device
"""
vadu_dargs = make_vadu_dargs(self.test_params,
self.device_xmls[index].xml,
self.test)
# Acts as a dict for it's own API params
self.test_params.virsh['debug'] = True
vadu_dargs.update(self.test_params.virsh)
options = vadu_dargs.get('flagstr')
if options:
opt_list = options.split()
for opt in opt_list:
if not virsh.has_command_help_match("attach-device", opt) and\
not self.test_params.status_error:
self.test.cancel("Current libvirt version doesn't "
"support '%s' for attach-device"
" command" % opt)
cmdresult = self.test_params.virsh.attach_device(**vadu_dargs)
self.test_params.virsh['debug'] = False
# Command success is not enough, must also confirm activity worked
# output XML no matter attach pass or not
logging.debug("Attached XML:")
for line in str(self.device_xmls[index]).splitlines():
logging.debug("%s", line)
if (cmdresult.exit_status == 0):
if (cmdresult.stdout.strip().count('attached successfully') or
cmdresult.stderr.strip().count('attached successfully')):
return True
else:
# See analyze_negative_results - expects return of true
if self.test_params.status_error:
return True
else:
return False
示例7: run
def run(test, params, env):
"""
Test the command virsh memtune
(1) To get the current memtune parameters
(2) Change the parameter values
(3) Check the memtune query updated with the values
(4) Check whether the mounted cgroup path gets the updated value
(5) Login to guest and use the memory greater that the assigned value
and check whether it kills the vm.
(6) TODO:Check more values and robust scenarios.
"""
def check_limit(path, expected_value, limit_name):
"""
Matches the expected and actual output
(1) Match the output of the virsh memtune
(2) Match the output of the respective cgroup fs value
:params: path: memory controller path for a domain
:params: expected_value: the expected limit value
:params: limit_name: the limit to be checked
hard_limit/soft_limit/swap_hard_limit
:return: True or False based on the checks
"""
status_value = True
# Check 1
actual_value = virsh.memtune_get(domname, limit_name)
if actual_value == -1:
raise error.TestFail("the key %s not found in the "
"virsh memtune output" % limit_name)
if actual_value != int(expected_value):
status_value = False
logging.error("%s virsh output:\n\tExpected value:%d"
"\n\tActual value: "
"%d", limit_name,
int(expected_value), int(actual_value))
# Check 2
if limit_name == 'hard_limit':
cg_file_name = '%s/memory.limit_in_bytes' % path
elif limit_name == 'soft_limit':
cg_file_name = '%s/memory.soft_limit_in_bytes' % path
elif limit_name == 'swap_hard_limit':
cg_file_name = '%s/memory.memsw.limit_in_bytes' % path
cg_file = None
try:
try:
cg_file = open(cg_file_name)
output = cg_file.read()
value = int(output) / 1024
if int(expected_value) != int(value):
status_value = False
logging.error("%s cgroup fs:\n\tExpected Value: %d"
"\n\tActual Value: "
"%d", limit_name,
int(expected_value), int(value))
except IOError:
status_value = False
logging.error("Error while reading:\n%s", cg_file_name)
finally:
if cg_file is not None:
cg_file.close()
return status_value
# Get the vm name, pid of vm and check for alive
domname = params.get("main_vm")
vm = env.get_vm(params["main_vm"])
vm.verify_alive()
pid = vm.get_pid()
logging.info("Verify valid cgroup path for VM pid: %s", pid)
# Resolve the memory cgroup path for a domain
path = utils_cgroup.resolve_task_cgroup_path(int(pid), "memory")
# Set the initial memory starting value for test case
# By default set 1GB less than the total memory
# In case of total memory is less than 1GB set to 256MB
# visit subtests.cfg to change these default values
Memtotal = utils_memory.read_from_meminfo('MemTotal')
base_mem = params.get("memtune_base_mem")
if int(Memtotal) < int(base_mem):
Mem = int(params.get("memtune_min_mem"))
else:
Mem = int(Memtotal) - int(base_mem)
# Initialize error counter
error_counter = 0
# Check for memtune command is available in the libvirt version under test
if not virsh.has_help_command("memtune"):
raise error.TestNAError(
"Memtune not available in this libvirt version")
# Run test case with 100kB increase in memory value for each iteration
while (Mem < Memtotal):
if virsh.has_command_help_match("memtune", "hard-limit"):
#.........这里部分代码省略.........
示例8: run
#.........这里部分代码省略.........
logging.error("Compress dumped file to %s fail: %s" %
(dump_image_format, actual_format))
return False
else:
return True
# Configure dump_image_format in /etc/libvirt/qemu.conf.
qemu_config = utils_config.LibvirtQemuConfig()
libvirtd = utils_libvirtd.Libvirtd()
if len(dump_image_format):
qemu_config.dump_image_format = dump_image_format
libvirtd.restart()
# Deal with bypass-cache option
child_pid = 0
if options.find('bypass-cache') >= 0:
pid = os.fork()
if pid:
# Guarantee check_bypass function has run before dump
child_pid = pid
try:
wait_pid_active(pid, timeout)
finally:
os.kill(child_pid, signal.SIGUSR1)
else:
check_bypass(dump_file)
# Wait for parent process over
while True:
time.sleep(1)
# Deal with memory-only dump format
if len(memory_dump_format):
# Make sure libvirt support this option
if virsh.has_command_help_match("dump", "--format") is None:
raise error.TestNAError("Current libvirt version doesn't support"
" --format option for dump command")
# Make sure QEMU support this format
query_cmd = '{"execute":"query-dump-guest-memory-capability"}'
qemu_capa = virsh.qemu_monitor_command(vm_name, query_cmd).stdout
if (memory_dump_format not in qemu_capa) and not status_error:
raise error.TestNAError("Unsupported dump format '%s' for"
" this QEMU binary" % memory_dump_format)
options += " --format %s" % memory_dump_format
if memory_dump_format == 'elf':
dump_image_format = 'elf'
if memory_dump_format in ['kdump-zlib', 'kdump-lzo', 'kdump-snappy']:
dump_image_format = 'data'
# Back up xml file
vmxml = vm_xml.VMXML.new_from_inactive_dumpxml(vm_name)
backup_xml = vmxml.copy()
dump_guest_core = params.get("dump_guest_core", "")
if dump_guest_core not in ["", "on", "off"]:
raise error.TestError("invalid dumpCore value: %s" % dump_guest_core)
try:
# Set dumpCore in guest xml
if dump_guest_core:
if vm.is_alive():
vm.destroy(gracefully=False)
vmxml.dumpcore = dump_guest_core
vmxml.sync()
vm.start()
# check qemu-kvm cmdline
vm_pid = vm.get_pid()
cmd = "cat /proc/%d/cmdline|xargs -0 echo" % vm_pid
示例9: run_virsh_update_device
#.........这里部分代码省略.........
if not re.search(source_iso, output2):
raise error.TestFail("didn't see 'attached disk")
if not re.search('hdc', output3):
raise error.TestFail("didn't see 'attached device")
domid = vm.get_id()
domuuid = vm.get_uuid()
# Prepare tmp directory and files.
tmp_iso = os.path.join(test.virtdir, "tmp.iso")
tmp2_iso = os.path.join(test.virtdir, "tmp2.iso")
update_xmlfile = os.path.join(test.tmpdir, "xml_file")
# Get all parameters for configuration.
flag = params.get("updatedevice_flag", "")
twice = "yes" == params.get("updatedevice_twice", "no")
diff_iso = params.get("updatedevice_diff_iso", "no")
vm_ref = params.get("updatedevice_vm_ref", "")
status_error = params.get("status_error", "no")
extra = params.get("updatedevice_extra", "")
create_attach_xml(update_xmlfile, tmp_iso)
vm_xml = os.path.join(test.tmpdir, "vm_xml")
virsh.dumpxml(vm_name, extra="", to_file=vm_xml)
vmxml_before = libvirt_xml.VMXML.new_from_dumpxml(vm_name)
if vm_ref == "id":
vm_ref = domid
if twice:
virsh.update_device(domainarg=domid, filearg=update_xmlfile,
ignore_status=True)
if diff_iso == "yes":
os.remove(update_xmlfile)
create_attach_xml(update_xmlfile, tmp2_iso)
elif vm_ref == "uuid":
vm_ref = domuuid
elif vm_ref == "hex_id":
vm_ref = hex(int(domid))
elif vm_ref.find("updatedevice_invalid") != -1:
vm_ref = params.get(vm_ref)
elif vm_ref == "name":
vm_ref = "%s %s" % (vm_name, extra)
status = virsh.update_device(domainarg=vm_ref, filearg=update_xmlfile,
flagstr=flag, ignore_status=True, debug=True).exit_status
output = "%s" % libvirt_xml.VMXML.new_from_dumpxml(vm_name)
if params.has_key("updatedevice_diff_file"):
vm_xml_after = os.path.join(test.tmpdir, "vm_xml_after")
virsh.dumpxml(vm_name, extra="", to_file=vm_xml_after)
vm.destroy()
output_shut = "%s" % libvirt_xml.VMXML.new_from_dumpxml(vm_name)
# Recover environment
vm.undefine()
vmxml_before.define()
if os.path.exists(tmp_iso):
os.remove(tmp_iso)
if os.path.exists(tmp2_iso):
os.remove(tmp2_iso)
# Check status_error
flag_list = flag.split("--")
for item in flag_list:
option = item.strip()
if option == "":
continue
if virsh.has_command_help_match("update-device", option) == None:
status_error = "yes"
break
if status_error == "yes":
if status == 0:
raise error.TestFail("Run successfully with wrong command!")
elif status_error == "no":
if status != 0:
raise error.TestFail("Run failed with right command")
else:
if flag == "--persistent" or flag == "--config":
if not re.search(tmp_iso, output_shut):
raise error.TestFail("virsh update-device function invalid"
"didn't see 'attached device' in XML")
else:
if params.has_key("updatedevice_diff_file"):
context_before = file(vm_xml, 'r').read().splitlines()
context_after = file(vm_xml_after, 'r').read().splitlines()
output_diff = difflib.Differ().compare(context_before,
context_after)
if not re.search(tmp_iso, "\n".join(list(output_diff))):
raise error.TestFail("virsh update-device function "
"invalid; can't see 'attached device'in before/after")
else:
if re.search(tmp_iso, output_shut):
raise error.TestFail("virsh attach-device without "
"--persistent/--config function invalid;can see "
"'attached device'in XML")
if diff_iso == "yes":
check_attach(tmp2_iso, output)
if vm_ref == "name":
check_attach(tmp_iso, output)
示例10: is_old_libvirt
def is_old_libvirt():
regex = r"\s+\[--size\]\s+"
return bool(not virsh.has_command_help_match("setmem", regex))
示例11: run_virsh_setvcpus
def run_virsh_setvcpus(test, params, env):
"""
Test command: virsh setvcpus.
The conmand can change the number of virtual CPUs in the guest domain.
1.Prepare test environment,destroy or suspend a VM.
2.Perform virsh setvcpus operation.
3.Recover test environment.
4.Confirm the test result.
"""
vm_name = params.get("main_vm")
vm = env.get_vm(vm_name)
xml_file = params.get("setvcpus_xml_file", "vm.xml")
virsh.dumpxml(vm_name, extra="--inactive", to_file=xml_file)
tmp_file = params.get("setvcpus_tmp_file", "tmp.xml")
pre_vm_state = params.get("setvcpus_pre_vm_state")
command = params.get("setvcpus_command", "setvcpus")
options = params.get("setvcpus_options")
domain = params.get("setvcpus_domain")
count = params.get("setvcpus_count")
extra_param = params.get("setvcpus_extra_param")
count_option = "%s %s" % (count, extra_param)
status_error = params.get("status_error")
def get_current_vcpus():
"""
Get current vcpu number.
"""
vcpus_set = ""
virsh.dumpxml(vm_name, extra="", to_file=tmp_file)
dom = parse(tmp_file)
root = dom.documentElement
vcpus_2 = root.getElementsByTagName("vcpu")
for n in vcpus_2:
vcpus_set += n.getAttribute("current")
vcpus_set = int(vcpus_set)
dom.unlink()
return vcpus_set
if vm.is_alive():
vm.destroy()
vm_xml = libvirt_xml.VMXML()
vm_xml.set_vm_vcpus(vm_name, 2)
vm.start()
vm.wait_for_login()
if status_error == "no":
vcpus_new = len(vm.vcpuinfo())
domid = vm.get_id()
domuuid = vm.get_uuid()
if pre_vm_state == "paused":
vm.pause()
elif pre_vm_state == "shut off":
vm.destroy()
if domain == "remote_name":
remote_ssh_addr = params.get("remote_ip", None)
remote_addr = params.get("local_ip", None)
remote_password = params.get("remote_password", None)
host_type = virsh.driver()
if host_type == "qemu":
remote_string = "qemu+ssh://%s/system" % remote_addr
elif host_type == "xen":
remote_string = "xen+ssh://%s" % remote_addr
command = "virsh -c %s setvcpus %s 1 --live" % (remote_string, vm_name)
if virsh.has_command_help_match(command, "--live") is None:
status_error = "yes"
session = remote.remote_login(
"ssh", remote_ssh_addr, "22", "root", remote_password, "#")
session.cmd_output('LANG=C')
status, output = session.cmd_status_output(command, internal_timeout=5)
session.close()
vcpus_current = len(vm.vcpuinfo())
else:
if domain == "name":
dom_option = vm_name
elif domain == "id":
dom_option = domid
if params.get("setvcpus_hex_id") is not None:
dom_option = hex(int(domid))
elif params.get("setvcpus_invalid_id") is not None:
dom_option = params.get("setvcpus_invalid_id")
elif domain == "uuid":
dom_option = domuuid
if params.get("setvcpus_invalid_uuid") is not None:
dom_option = params.get("setvcpus_invalid_uuid")
else:
dom_option = domain
option_list = options.split(" ")
for item in option_list:
if virsh.has_command_help_match(command, item) is None:
status_error = "yes"
break
status = virsh.setvcpus(
dom_option, count_option, options, ignore_status=True).exit_status
if pre_vm_state == "paused":
virsh.resume(vm_name, ignore_status=True)
if status_error == "no":
if status == 0:
#.........这里部分代码省略.........
示例12: dict
iface.mac_address = iface_mac_address
iface.source = dict(network=iface_network)
iface.model = iface_model_type
iface.xmltreefile.write()
shutil.copyfile(iface.xml, device_xml_file)
return device_xml_file
vm_ref = params.get("dt_device_vm_ref", "name")
dt_options = params.get("dt_device_options", "")
pre_vm_state = params.get("dt_device_pre_vm_state", "running")
status_error = "yes" == params.get("status_error", 'no')
no_attach = "yes" == params.get("dt_device_no_attach", 'no')
os_type = params.get("os_type", "linux")
device = params.get("dt_device_device", "disk")
test_cmd = "detach-device"
if not virsh.has_command_help_match(test_cmd, dt_options) and\
not status_error:
raise error.TestNAError("Current libvirt version doesn't support '%s'"
" for %s" % (dt_options, test_cmd))
# Disk specific attributes.
device_source_name = params.get("dt_device_device_source", "attach.img")
device_target = params.get("dt_device_device_target", "vdd")
device_bus = params.get("dt_device_bus_type")
test_block_dev = "yes" == params.get("dt_device_iscsi_device", "no")
# interface specific attributes.
iface_network = params.get("dt_device_iface_network")
iface_model_type = params.get("dt_device_iface_model_type")
iface_mac_address = params.get("dt_device_iface_mac_address")
示例13: int
delay = int(params.get("virsh_migrate_delay", 10))
status_error = params.get("status_error", 'no')
libvirtd_state = params.get("virsh_migrate_libvirtd_state", 'on')
src_state = params.get("virsh_migrate_src_state", "running")
migrate_uri = params.get("virsh_migrate_migrateuri", None)
shared_storage = params.get("virsh_migrate_shared_storage", None)
dest_xmlfile = ""
# Direct migration is supported only for Xen in libvirt
if options.count("direct") or extra.count("direct"):
if params.get("driver_type") is not "xen":
raise error.TestNAError("Direct migration is supported only for "
"Xen in libvirt.")
if options.count("compressed") and not \
virsh.has_command_help_match("migrate", "--compressed"):
raise error.TestNAError("Do not support compressed option on this version.")
# Add migrateuri if exists and check for default example
if migrate_uri:
if migrate_uri.count("EXAMPLE"):
raise error.TestNAError("Set up the migrate_uri.")
extra = ("%s --migrateuri=%s" % (extra, migrate_uri))
# To migrate you need to have a shared disk between hosts
if shared_storage.count("EXAMPLE"):
raise error.TestError("For migration you need to have a shared "
"storage.")
# Get expected cache state for test
attach_scsi_disk = "yes" == params.get("attach_scsi_disk", "no")
示例14: run
def run(test, params, env):
"""
Test command: virsh net-dumpxml.
This command can output the network information as an XML dump to stdout.
1.Get all parameters from config file.
2.If test case's network status is inactive, destroy it.
3.Perform virsh net-dumpxml operation.
4.Recover test environment(network status).
5.Confirm the test result.
"""
status_error = params.get("status_error", "no")
net_ref = params.get("net_dumpxml_net_ref")
net_name = params.get("net_dumpxml_network", "default")
net_status = params.get("net_dumpxml_network_status", "active")
xml_flie = params.get("net_dumpxml_xml_file", "default.xml")
extra = params.get("net_dumpxml_extra", "")
network_xml = os.path.join(data_dir.get_tmp_dir(), xml_flie)
# acl polkit params
uri = params.get("virsh_uri")
unprivileged_user = params.get('unprivileged_user')
if unprivileged_user:
if unprivileged_user.count('EXAMPLE'):
unprivileged_user = 'testacl'
if not libvirt_version.version_compare(1, 1, 1):
if params.get('setup_libvirt_polkit') == 'yes':
test.cancel("API acl test not supported in current"
" libvirt version.")
# Run test case
if net_ref == "uuid":
net_ref = virsh.net_uuid(net_name).stdout.strip()
elif net_ref == "name":
net_ref = net_name
net_status_current = "active"
if not virsh.net_state_dict()[net_name]['active']:
net_status_current = "inactive"
if not virsh.net_state_dict()[net_name]['persistent']:
test.error("Network is transient!")
try:
if net_status == "inactive" and net_status_current == "active":
status_destroy = virsh.net_destroy(net_name,
ignore_status=True).exit_status
if status_destroy != 0:
test.error("Network destroied failed!")
virsh_dargs = {'ignore_status': True}
if params.get('setup_libvirt_polkit') == 'yes':
virsh_dargs['unprivileged_user'] = unprivileged_user
virsh_dargs['uri'] = uri
result = virsh.net_dumpxml(net_ref, extra, network_xml,
**virsh_dargs)
status = result.exit_status
err = result.stderr.strip()
xml_validate_cmd = "virt-xml-validate %s network" % network_xml
valid_s = process.run(xml_validate_cmd, ignore_status=True, shell=True).exit_status
# Check option valid or not.
if extra.find("--") != -1:
options = extra.split("--")
for option in options:
if option.strip() == "":
continue
if not virsh.has_command_help_match("net-dumpxml",
option.strip()) and\
status_error == "no":
test.cancel("The current libvirt version"
" doesn't support '%s' option"
% option.strip())
finally:
# Recover network
if net_status == "inactive" and net_status_current == "active":
status_start = virsh.net_start(net_name,
ignore_status=True).exit_status
if status_start != 0:
test.error("Network started failed!")
# Check status_error
if status_error == "yes":
if status == 0:
test.fail("Run successfully with wrong command!")
if err == "":
test.fail("The wrong command has no error outputed!")
elif status_error == "no":
if status != 0:
test.fail("Run failed with right command!")
if valid_s != 0:
test.fail("Command output is invalid!")
else:
test.error("The status_error must be 'yes' or 'no'!")
示例15: run_virsh_domblkstat
def run_virsh_domblkstat(test, params, env):
"""
Test command: virsh domblkstat.
The command get device block stats for a running domain.
1.Prepare test environment.
2.When the libvirtd == "off", stop the libvirtd service.
3.Perform virsh domblkstat operation.
4.Recover test environment.
5.Confirm the test result.
"""
vm_name = params.get("main_vm")
vm = env.get_vm(vm_name)
domid = vm.get_id()
domuuid = vm.get_uuid()
blklist = libvirt_xml.VMXML.get_disk_blk(vm_name)
if blklist == None:
raise error.TestFail("Cannot find disk in %s" % vm_name)
#Select a block device from disks
blk = blklist[0]
libvirtd = params.get("libvirtd", "on")
vm_ref = params.get("domblkstat_vm_ref")
options = params.get("domblkstat_option", "")
status_error = params.get("status_error", "no")
if params.get("domblkinfo_dev") == "no":
blk = ""
if vm_ref == "id":
vm_ref = domid
elif vm_ref == "uuid":
vm_ref = domuuid
elif vm_ref == "hex_id":
vm_ref = hex(int(domid))
elif vm_ref.find("invalid") != -1:
vm_ref = params.get(vm_ref)
elif vm_ref == "name":
vm_ref = "%s %s" % (vm_name, params.get("domblkstat_extra"))
option_list = options.split(" ")
for option in option_list:
if virsh.has_command_help_match("domblkstat", option) == None:
status_error = "yes"
break
if libvirtd == "off":
utils_libvirtd.libvirtd_stop()
result = virsh.domblkstat(vm_ref, blk, options, ignore_status=True)
status = result.exit_status
output = result.stdout.strip()
err = result.stderr.strip()
#recover libvirtd service start
if libvirtd == "off":
utils_libvirtd.libvirtd_start()
#check status_error
if status_error == "yes":
if status == 0 or err == "":
raise error.TestFail("Run successfully with wrong command!")
elif status_error == "no":
if status != 0 or output == "":
raise error.TestFail("Run failed with right command")