This provides coverage for the scenario in which an attempt is
made to use a USB device together with the legacy USB controller.
Note that, while the test case passes, the configuration it
produces doesn't actually work:
$ qemu-system-x86_64 -M pc -usb -device usb-tablet,bus=usb.0
Bus 'usb.0' not found
This is because the bus created by the legacy USB controller is
automatically assigned ID "usb-bus.0", but libvirt doesn't take
this into consideration when assigning addresses to USB devices.
In other words, the legacy USB controller will only work as long
as no attempt is made to attach devices to it, which arguably
doesn't make for a very useful controller.
Signed-off-by: Andrea Bolognani <abologna(a)redhat.com>
---
.../usb-legacy-device.x86_64-latest.args | 33 +++++++++++++++++++
.../usb-legacy-device.x86_64-latest.xml | 30 +++++++++++++++++
tests/qemuxmlconfdata/usb-legacy-device.xml | 15 +++++++++
tests/qemuxmlconftest.c | 5 +++
4 files changed, 83 insertions(+)
create mode 100644 tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.args
create mode 100644 tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.xml
create mode 100644 tests/qemuxmlconfdata/usb-legacy-device.xml
diff --git a/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.args
b/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.args
new file mode 100644
index 0000000000..1ef9965cbd
--- /dev/null
+++ b/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.args
@@ -0,0 +1,33 @@
+LC_ALL=C \
+PATH=/bin \
+HOME=/var/lib/libvirt/qemu/domain--1-guest \
+USER=test \
+LOGNAME=test \
+XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \
+XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \
+XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \
+/usr/bin/qemu-system-x86_64 \
+-name guest=guest,debug-threads=on \
+-S \
+-object
'{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}'
\
+-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \
+-accel tcg \
+-cpu qemu64 \
+-m size=4194304k \
+-object
'{"qom-type":"memory-backend-ram","id":"pc.ram","size":4294967296}'
\
+-overcommit mem-lock=off \
+-smp 4,sockets=4,cores=1,threads=1 \
+-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \
+-display none \
+-no-user-config \
+-nodefaults \
+-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \
+-mon chardev=charmonitor,id=monitor,mode=control \
+-rtc base=utc \
+-no-shutdown \
+-boot strict=on \
+-usb \
+-device
'{"driver":"usb-tablet","id":"input0","bus":"usb.0","port":"1"}'
\
+-audiodev
'{"id":"audio1","driver":"none"}' \
+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
+-msg timestamp=on
diff --git a/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.xml
b/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.xml
new file mode 100644
index 0000000000..2204c03380
--- /dev/null
+++ b/tests/qemuxmlconfdata/usb-legacy-device.x86_64-latest.xml
@@ -0,0 +1,30 @@
+<domain type='qemu'>
+ <name>guest</name>
+ <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
+ <memory unit='KiB'>4194304</memory>
+ <currentMemory unit='KiB'>4194304</currentMemory>
+ <vcpu placement='static'>4</vcpu>
+ <os>
+ <type arch='x86_64' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <cpu mode='custom' match='exact' check='none'>
+ <model fallback='forbid'>qemu64</model>
+ </cpu>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
+ <controller type='usb' index='0'>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x01' function='0x2'/>
+ </controller>
+ <controller type='pci' index='0' model='pci-root'/>
+ <input type='tablet' bus='usb'/>
+ <input type='mouse' bus='ps2'/>
+ <input type='keyboard' bus='ps2'/>
+ <audio id='1' type='none'/>
+ <memballoon model='none'/>
+ </devices>
+</domain>
diff --git a/tests/qemuxmlconfdata/usb-legacy-device.xml
b/tests/qemuxmlconfdata/usb-legacy-device.xml
new file mode 100644
index 0000000000..f85b293022
--- /dev/null
+++ b/tests/qemuxmlconfdata/usb-legacy-device.xml
@@ -0,0 +1,15 @@
+<domain type='qemu'>
+ <name>guest</name>
+ <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
+ <memory>4194304</memory>
+ <vcpu>4</vcpu>
+ <os>
+ <type arch='x86_64' machine='pc'>hvm</type>
+ </os>
+ <devices>
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
+ <controller type='usb'/>
+ <input type='tablet' bus='usb'/>
+ <memballoon model='none'/>
+ </devices>
+</domain>
diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c
index b9dcdb81b9..b7778975c3 100644
--- a/tests/qemuxmlconftest.c
+++ b/tests/qemuxmlconftest.c
@@ -1876,6 +1876,11 @@ mymain(void)
ARG_FLAGS, FLAG_EXPECT_FAILURE,
ARG_QEMU_CAPS_DEL, QEMU_CAPS_PIIX3_USB_UHCI, QEMU_CAPS_LAST,
ARG_END);
+ DO_TEST_FULL("usb-legacy-device", ".x86_64-latest",
+ ARG_CAPS_ARCH, "x86_64",
+ ARG_CAPS_VER, "latest",
+ ARG_QEMU_CAPS_DEL, QEMU_CAPS_PIIX3_USB_UHCI, QEMU_CAPS_LAST,
+ ARG_END);
DO_TEST_CAPS_LATEST("usb-none");
--
2.43.0