[libvirt] [PATCH 12/12] tests: qemuxml2xml: Add DO_TEST_CAPS*
Cole Robinson
crobinso at redhat.com
Mon Apr 15 22:35:40 UTC 2019
On 4/11/19 8:15 AM, Ján Tomko wrote:
> On Thu, Apr 11, 2019 at 12:44:16PM +0200, Andrea Bolognani wrote:
>> On Mon, 2019-04-01 at 12:47 -0400, Cole Robinson wrote:
>>> Add DO_TEST_CAPS* macros, lifted from qemuxml2argvtest. Use it on
>>> a few recently added xml2xml tests that use DO_TEST_CAPS in the argv
>>> test case. The firmware examples require breaking the symlink and
>>> creating our own test file. Also add a test for os-firmware-efi which
>>> seems to have been missed.
>>
>> Please have each of these changes as separate preparatory commits.
>>
>>> One subtle difference compared to qemuxml2argv is output file naming.
>>> qemuxml2xml uses a system where if specially named files
>>> ${basename}-active.xml or ${basename}-inactive.xml exist, those are
>>> used as output, otherwise just ${basename}.xml is used. I'm not quite
>>> sure how to make this fit with the caps suffix naming scheme used
>>> in qemuxml2argv, where for example DO_CAPS_LATEST will always add a
>>> -latest suffix to basename.
>>>
>>> This code by default will store the output in ${basename}.xml with no
>>> -latest suffix. This makes it easier to convert DO_TEST calls to CAPS
>>> variants, because it won't require any test file rename/removal, but if
>>> we ever want to add more than one qemuxml2xml output for a single input,
>>> it will require special file naming to not collide. IMO that's not a
>>> big deal as it follows the existing -active pattern. But it's a
>>> divergence from qemuxml2argv behavior
>>
>> More on this later.
>>
>> [...]
>>> static int
>>> testInfoSetPaths(struct testQemuInfo *info,
>>> const char *name,
>>> - int when)
>>> + int when,
>>> + const char *suffix)
>>
>> 'suffix' should come before 'when', to match the corresponding
>> function in xml2argv.
>>
>> Additionally, we're passing 'name' to the function here but we're
>> storing it inside 'info' in xml2argv - we should be doing the same
>> here. Please make that change as a separate preparatory commit.
>>
>> [...]
>>> if (virAsprintf(&info->outfile,
>>> - "%s/qemuxml2xmloutdata/%s-%s.xml",
>>> + "%s/qemuxml2xmloutdata/%s-%s%s.xml",
>
> I'd definitely put another minus between these suffixes (also, I'd like
> to see them in use).
>
Sure I'll add example usage for this in the next version
>>> abs_srcdir, name,
>>> - when == WHEN_ACTIVE ? "active" : "inactive") < 0)
>>> + when == WHEN_ACTIVE ? "active" : "inactive",
>>> + suffix) < 0)
>>> goto error;
>>>
>>> if (!virFileExists(info->outfile)) {
>
> As for this virFileExists - I really dislike it. It is on my TODO
> list(TM) to change this to either:
> A) specify exactly which output files the test needs by using the
> appropriate DO_TEST macro
> or
> B) add a lot of symlinks for the expected output to the output
> directory.
>
Agreed that this should go away. I think the whole WHEN_X concept should
go away: always test active and inactive paths, but the only DO_TEST
distinction is active vs inactive output is expected to be the same, vs
expected to be different. The latter case should mandate that -active
and -inactive filesnames exist, the former case doesn't look for any
state suffix. I think only the few WEHN_INACTIVE cases will need some
extra output but otherwise it's pretty compatible with the current state
of things.
>>
>> Missing from the context, but immediately after this line we have:
>>
>> if (virAsprintf(&info->outfile,
>> "%s/qemuxml2xmloutdata/%s.xml",
>> abs_srcdir, name) < 0)
>> ...
>>
>> We should format 'suffix' here too.
>>
>> ---
>>
>> Following up from the commit message: I was wondering about the way
>> this test works, and discussing it with Jano (CC'd since he had his
>> own opinion on the matter).
>>
>> There are several situations we can run into with these tests:
>>
>> 1) we test WHEN_BOTH and the output for the WHEN_ACTIVE and
>> WHEN_INACTIVE cases match;
>>
>> 2) same as the above, but the outputs don't match;
>>
>> 3) we test only one of WHEN_ACTIVE and WHEN_INACTIVE.
>>
>> Case 1) covers the vast majority of existing test cases.
>>
>> As for output files, I would expect respectively
>>
>> 1) a single output file, with no suffix;
>>
>> 2) two output files with different suffixes;
>>
>> 3) a single output file with the corresponding -inactive or
>> -active suffix.
>>
>> The problem with the current algorithm is that, when
>> VIR_TEST_REGENERATE_OUTPUT is used, and you're introducing a new
>> test case so no output files exist yet, you'll end up with
>>
>> 1) the expected output, yay!;
>>
>> 2) failure, because both WHEN variants will write the (different)
>> output to the unsuffixed file and step on each other's toes
>> every time. This is annoying but ultimately okay, because the
>> developer can break the loop simply by touching the suffixed
>> files before running the test program;
>>
>> 3) the unsuffixed file being created instead of the suffixed one.
>>
>> The third scenario is suboptimal but not necessarily a very big deal
>> either.
>>
>> One way to get rid of the above would be to pass an extra flags that
>> controls whether falling back to the unsuffixed output files should
>> be considered at all: the default would be to pass it for WHEN_BOTH,
>> so that scenario 1) would be covered, and not to pass it for
>> WHEN_ACTIVE and WHEN_INACTIVE to take care of scenario 3); the few
>> test cases that fall into scenario 2) would have to go for a more
>> verbose macro and *not* pass the flag manually. I feel like that
>> would be acceptable given that most tests cases fall into 1) anyway.
>>
>> ---
>>
>> None of the above is really connected to whether or not we should
>> use 'suffix' as I suggested earlier: we should definitely format it,
>> even if it causes test suite churn. Not only that: you should also
>> make sure...
>>
>
> The reason for the suffix in xml2argv is to allow the CAPS_LATEST tests
> to coexist with the ones with enumerated capabilities.
>
> But it also contains the architecture, so even if -latest would be the
> prevailing case, I'd rather format it anyway.
>
Hopefully one day we get to a point that DO_TEST always uses latest
caps, and we have a DO_TEST_CAPS_LIST for the explicit caps list...
Thanks,
Cole
More information about the libvir-list
mailing list