Message ID | 1490092792-30957-2-git-send-email-thuth@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Mar 21, 2017 at 11:39:50AM +0100, Thomas Huth wrote: > When running certain HMP commands (like "device_del") via QMP, we > can sometimes get a QMP event in the response first, so that the > "g_assert(ret)" statement in qtest_hmp() triggers and the test > fails. So ignore such QMP events when looking for the real > return value from QMP. > > Signed-off-by: Thomas Huth <thuth@redhat.com> > --- > tests/libqtest.c | 6 ++++++ > 1 file changed, 6 insertions(+) qmp.py keeps a queue of events so they can be processed later. I guess an event queue will be needed eventually because discarding events makes it hard to write reliable test cases that check for events. But as long as current qtests work correctly: Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
On 23.03.2017 09:52, Stefan Hajnoczi wrote: > On Tue, Mar 21, 2017 at 11:39:50AM +0100, Thomas Huth wrote: >> When running certain HMP commands (like "device_del") via QMP, we >> can sometimes get a QMP event in the response first, so that the >> "g_assert(ret)" statement in qtest_hmp() triggers and the test >> fails. So ignore such QMP events when looking for the real >> return value from QMP. >> >> Signed-off-by: Thomas Huth <thuth@redhat.com> >> --- >> tests/libqtest.c | 6 ++++++ >> 1 file changed, 6 insertions(+) > > qmp.py keeps a queue of events so they can be processed later. I guess > an event queue will be needed eventually because discarding events makes > it hard to write reliable test cases that check for events. Yes, but in that case the test likely should not use the hmp() functions at all and use qmp directly. > But as long as current qtests work correctly: > > Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Thanks! Thomas
diff --git a/tests/libqtest.c b/tests/libqtest.c index a5c3d2b..c9b2d76 100644 --- a/tests/libqtest.c +++ b/tests/libqtest.c @@ -580,6 +580,12 @@ char *qtest_hmpv(QTestState *s, const char *fmt, va_list ap) " 'arguments': {'command-line': %s}}", cmd); ret = g_strdup(qdict_get_try_str(resp, "return")); + while (ret == NULL && qdict_get_try_str(resp, "event")) { + /* Ignore asynchronous QMP events */ + QDECREF(resp); + resp = qtest_qmp_receive(s); + ret = g_strdup(qdict_get_try_str(resp, "return")); + } g_assert(ret); QDECREF(resp); g_free(cmd);
When running certain HMP commands (like "device_del") via QMP, we can sometimes get a QMP event in the response first, so that the "g_assert(ret)" statement in qtest_hmp() triggers and the test fails. So ignore such QMP events when looking for the real return value from QMP. Signed-off-by: Thomas Huth <thuth@redhat.com> --- tests/libqtest.c | 6 ++++++ 1 file changed, 6 insertions(+)