On 9/12/18 2:53 AM, Xiong, Huan wrote:
> 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
> 
> 

Hi Ray,

I think you shouldn't underestimate bugs resilience - they can indeed
live in some code bases for decades :).

I believe that the best approach is to put together a PR with this
explanation, and the proposed changes, of course.  Then people can check
the before/after by running the test you describe.

Let me know if you need help reviewing it.

Regards,

-- 
Cleber Rosa
[ Sr Software Engineer - Virtualization Team - Red Hat ]
[ Avocado Test Framework - avocado-framework.github.io ]
[  7ABB 96EB 8B46 B94D 5E0F  E9BB 657E 8D33 A5F2 09F3  ]

Reply via email to