Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

qemu: Add more test cases for usb devices #646

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
18 changes: 18 additions & 0 deletions qemu/tests/cfg/usb.cfg
Expand Up @@ -203,6 +203,24 @@
# must configure which device should be used
#usb_host_device = "<vendorid>:<productid>"
type = usb_host
#XXX: Now usb_host doesn't support QMP monitor.
# Limit it to human monitor only.
monitor_type = human
monitors = hmp1
main_monitor = hmp1
variants:
- usb_normal_test:
- usb_negative_test:
usb_negative_test = "yes"
usb_reply_msg = "Property 'usb-host.productid' doesn't take value"
usb_host_device_list = "aaa:aaa,aaa:111,21231:11231333,21231:1123132233,2123133:1123132233111"
- usb_check_isobufs:
usb_check_isobufs = "yes"
variants:
- usb_one_time:
usb_repeat_times = 1
- usb_multi_times:
usb_repeat_times = 5000
- usb_multi_disk:
only ehci
type = multi_disk
Expand Down
92 changes: 68 additions & 24 deletions qemu/tests/usb_host.py
@@ -1,4 +1,4 @@
import logging, re, uuid
import logging
from autotest.client.shared import error
from autotest.client import utils

Expand All @@ -11,6 +11,56 @@ def run_usb_host(test, params, env):
@param params: Dictionary with the test parameters
@param env: Dictionary with test environment.
"""
@error.context_aware
def usb_dev_hotplug():
error.context("Plugin usb device", logging.info)
session.cmd_status("dmesg -c")
vm.monitor.cmd(monitor_add)
session.cmd_status("sleep 1")
session.cmd_status("udevadm settle")
messages_add = session.cmd("dmesg -c")
for line in messages_add.splitlines():
logging.debug("[dmesg add] %s" % line)
if messages_add.find(match_add) == -1:
raise error.TestFail("kernel didn't detect plugin")


@error.context_aware
def usb_dev_verify():
error.context("Check usb device %s in guest" % device, logging.info)
session.cmd(lsusb_cmd)


@error.context_aware
def usb_dev_unplug():
error.context("Unplug usb device", logging.info)
vm.monitor.cmd(monitor_del)
session.cmd_status("sleep 1")
messages_del = session.cmd("dmesg -c")
for line in messages_del.splitlines():
logging.debug("[dmesg del] %s" % line)
if messages_del.find(match_del) == -1:
raise error.TestFail("kernel didn't detect unplug")


if params.get("usb_negative_test", "no") != "no":
# Negative test.
vm = env.get_vm(params["main_vm"])
vm.verify_alive()
session = vm.wait_for_login()
usb_host_device_list = params["usb_host_device_list"].split(",")
for dev in usb_host_device_list:
vid, pid = dev.split(":")
monitor_add = "device_add usb-host,bus=usbtest.0,id=usbhostdev"
monitor_add += ",vendorid=%s" % vid
monitor_add += ",productid=%s" % pid
reply = vm.monitor.cmd(monitor_add)
if params["usb_reply_msg"] not in reply:
raise error.TestFail("Could not get expected warning"
" msg in negative test, monitor"
" returns: '%s'" % reply)
vm.reboot()
return

device = params["usb_host_device"]
(vendorid,productid) = device.split(":")
Expand All @@ -35,28 +85,22 @@ def run_usb_host(test, params, env):
vm = env.get_vm(params["main_vm"])
vm.verify_alive()
session = vm.wait_for_login()
session.cmd_status("dmesg -c")

error.context("Plugin usb device", logging.info)
vm.monitor.cmd(monitor_add)
session.cmd_status("sleep 1")
session.cmd_status("udevadm settle")
messages_add = session.cmd("dmesg -c")
for line in messages_add.splitlines():
logging.debug("[dmesg add] %s" % line)
if messages_add.find(match_add) == -1:
raise error.TestFail("kernel didn't detect plugin")

error.context("Check usb device %s in guest" % device, logging.info)
session.cmd(lsusb_cmd)

error.context("Unplug usb device", logging.info)
vm.monitor.cmd(monitor_del)
session.cmd_status("sleep 1")
messages_del = session.cmd("dmesg -c")
for line in messages_del.splitlines():
logging.debug("[dmesg del] %s" % line)
if messages_del.find(match_del) == -1:
raise error.TestFail("kernel didn't detect unplug")

repeat_times = int(params.get("usb_repeat_times", "1"))
for i in range(repeat_times):
if params.get("usb_check_isobufs", "no") == "no":
error.context("Hotplug (iteration %i)" % (i + 1), logging.info)
else:
# The value of isobufs could only be in '4, 8, 16'
isobufs = (2 << (i % 3 + 1))
monitor_add = "device_add usb-host,bus=usbtest.0,id=usbhostdev"
monitor_add += ",vendorid=%s" % vendorid
monitor_add += ",productid=%s" % productid
monitor_add += ",isobufs=%d" % isobufs
error.context("Hotplug (iteration %i), with 'isobufs' option"
" set to %d" % ((i + 1), isobufs), logging.info)
usb_dev_hotplug()
usb_dev_verify()
usb_dev_unplug()

session.close()