Hi,
While running avocado-vt qemu virtio_console test, I observe this test failure:
type_specific.io-github-autotest-qemu.virtio_console.spread_linear.specifiable.virtserialport.with_vm.interrupted_transfer.replug_recv.short:
FAIL
It failed because it passed device name, instead of device id, to device_del
command:
2018-09-12 01:26:51,201 qemu_monitor L0334 DEBUG| (monitor
avocado-vt-vm1.qmpmonitor1) Sending command 'device_del vs2'
2018-09-12 01:26:51,209 qemu_monitor L1690 DEBUG| Send command: {'execute':
'device_del vs2', 'id': 'qd1yhYb2'}
2018-09-12 01:26:51,215 virtio_console L0889 ERROR| interrupted_loopback
failed with exception: QMP command 'device_del vs2' failed (arguments: None,
error message: {u'class': u'CommandNotFound', u'desc': u'The command
device_del vs2 has not been found'})
Note "vs2" in above log is virtio serial port name defined in
virtio_console.cfg. The device's id is a random string generated in
VM.create(). See log below:
MALLOC_PERTURB_=1 /usr/bin/qemu-system-aarch64 \
...
-chardev
socket,path=/var/tmp/avocado_Qppix1/virtio_port-vs2-20180911-221535-jIZMYhJ2,nowait,id=idZPwyah,server
\
-device virtserialport,id=idRvU3kn,name=vs2,chardev=idZPwyah \
...
It seems to me the root cause of the issue is with the code in VM.create() in
avocado-vt/virttest/qemu_vm.py. VM.create() first calls make_create_command()
to create device information, which are later saved in self.devices, and
generate QEMU command line and start QEMU process. Then when it continues to
create VirtioConsole and VirtioSerial instances and add them to
self.virtio_ports, it doesn't uses the device information saved in
self.devices, but uses port id as port name instead. The above test retrieves
port information from vm.virtio_ports and gets wrong id and hence QMP command
failed (BTW, the 'CommandNotFound' error returned by QMP seems odd to me. I'd
expect it be something like "Device not found". But I think that is a separate
issue, which I'll look into).
So, from my understanding, line 2915-2938 (the code that creates VirtioConsole
and VirtioSerial instances and add them to self.virtio_ports) is the culprit.
However, that part of the code has existed since 2012. So...am I missing
something? I really can't see how it could work with the tp-qemu's
virio-console test's default cfg file.
Also note that I run the test on an aarch64 server running centos 7.4. But I
don't think the test code in question is architecture specific.
Thanks,
Ray