[PATCH] tests: qemu: Don't crash when capability file can't be parsed
Peter Krempa
pkrempa at redhat.com
Mon Aug 16 08:29:39 UTC 2021
On Mon, Aug 16, 2021 at 10:17:26 +0200, Martin Kletzander wrote:
> On Thu, Aug 12, 2021 at 04:55:04PM +0200, Peter Krempa wrote:
> > In case the test directory contains invalid XML (this doesn't happen
> > upstream, but can when developing, e.g. by forgetting git conflict
> > markers) the tests would crash as in case when 'testQemuInfoSetArgs'
> > fails we'd still invoke the test in qemuxml2argv and qemuxml2xml tests.
> >
> > Add a 'break' statement to avoid invocation of the test and add a debug
> > message.
> >
> > Signed-off-by: Peter Krempa <pkrempa at redhat.com>
> > ---
> > tests/qemuxml2argvtest.c | 4 +++-
> > tests/qemuxml2xmltest.c | 1 +
> > tests/testutilsqemu.c | 4 +++-
> > 3 files changed, 7 insertions(+), 2 deletions(-)
> >
> > diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
> > index b552f5deed..3f43e76842 100644
> > --- a/tests/qemuxml2argvtest.c
> > +++ b/tests/qemuxml2argvtest.c
> > @@ -943,8 +943,10 @@ mymain(void)
> > }; \
> > info.qapiSchemaCache = qapiSchemaCache; \
> > if (testQemuInfoSetArgs(&info, capscache, capslatest, \
> > - __VA_ARGS__, ARG_END) < 0) \
> > + __VA_ARGS__, ARG_END) < 0) { \
> > ret = -1; \
> > + break; \
> > + } \
>
> This makes the test not crash, but it is still not clearly visible in
> the output what happened and with what tests, unless ran with
> VIR_TEST_DEBUG=1. It seems there should be some NULL-pointer check
> somewhere under testCompareXMLToArgv and similar. Unfortuntely making
> testQemuInfoSetArgs part of the callback of virTestRun, in this case
> testCompareXMLToArgv would be very cumbersome, but we should do at least
> a little bit more because this patch itself does not seem to improve the
> situation in my opinion. See below:
>
> Before this patch:
>
> $ VIR_TEST_DEBUG=0 build/tests/qemuxml2argvtest
> TEST: qemuxml2argvtest
> ........................................ 40
> ........................................ 80
> ........................................ 120
> ........................................ 160
> ........................................ 200
> ................................fish: Job 1, 'VIR_TEST_DEBUG=0
> build/tests/qe…' terminated by signal SIGSEGV (Address boundary
> error)
>
> After this patch:
>
> $ VIR_TEST_DEBUG=0 build/tests/qemuxml2argvtest
> TEST: qemuxml2argvtest
> ........................................ 40
> ........................................ 80
> ........................................ 120
> ........................................ 160
> ........................................ 200
> ........................................ 240
> ........................................ 280
> ........................................ 320
> ........................................ 360
> ........................................ 400
> ........................................ 440
> ........................................ 480
> ........................................ 520
> ........................................ 560
> ........................................ 600
> ........................................ 640
> ........................................ 680
> ........................................ 720
> ........................................ 760
> ........................................ 800
> ........................................ 840
> ........................................ 880
> ........................................ 920
> ........................................ 960
> ........................................ 1000
> ........................................ 1040
> ........................................ 1080
> ........................................ 1120
> ................ 1136 FAIL
>
> In the first case I can see more information right away, albeit the test
> suite crashing.
>
> What about a non-NULL check for info->qemuCaps in testUpdateQEMUCaps()
Well, the problem really is that anything besides stuff run via
virTestRun is always in the same scenario. In this case we have a
per-test call of testQemuInfoSetArgs, which is a bit worse than the
usual setup calls before individual tests.
In this specific case I think we rather should split testQemuInfoSetArgs
into two chunks:
1) the setup part which just populates 'info' and can't fail
2) the more complex setup bits which should already be run under
virTestRun
> and/or (even better as that might actually be bug in our code) check in
> virQEMUCapsSetArch() ?
IMO setters don't really need to do NULL-checks if the expectations are
correct.
More information about the libvir-list
mailing list