[libvirt] [PATCH] tests: Disable some tests on 32 bit systems
Daniel P. Berrangé
berrange at redhat.com
Thu Mar 28 11:53:49 UTC 2019
On Thu, Mar 28, 2019 at 12:30:30PM +0100, Michal Privoznik wrote:
> On 32 bit systems there are two tests failing currently:
> qemufirmwaretest and qemuxml2argvtest (not every test case in
> them is failing, only some of them). There are several problems:
>
> 1) in qemufirmwaretest it's 'QEMU FW precedence test' which is
> failing. This is because the code tests
> qemuFirmwareFetchConfigs() which tries to compile a list of some
> paths from the system and if one of the paths is an empty file it
> should not appear on the returned list. The code uses
> virFileLength() to query the file size which uses stat() under
> the hood. The test uses virfilewrapper to redirect stat() into
> qemufirmwaredata/ but for reasons beyond me real_stat() returns
> mangled buffer making the code see a file with a real size even
> for empty files. I've track this one to a problem in
> virfilewrapper.c which will call real___xstat() which points to a
> function in libvirt.so (!) which returns stat with 32bit members
> even though we're compiling with LARGE_FILE and therefore expect
> 64bit members in the stat struct.
>
> 2) qemuxml2argvtest has two tests failing:
> 2a) [aarch64-]os-firmware-* - These fail because of the same
> reason as described in 1)
>
> 2b) pseries-hostdevs-* - These fail because they again rely on
> some stat (lstat to be precise). When building the cmd line for
> these test cases the code does some search in /sys/bus/pci/...
> and since we have virpcimock everything works just fine. Except
> when virfilewrapper.c is linked in because then lstat() is taken
> from there and when it initializes itself it will lookup
> real_lstat() which will now point not to virpcimock but to glibc.
> Again, reasons beyond me.
>
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>
> Quite frankly, I hate this patch. But the problem is in our mocking, not
> in the actual code its testing. And I've tried everything I was able to
> come up with on how to fix this. So if you have any idea, I'm all ears.
I'm happy to take a look at this. I wouldn't be surprised if there is
an entirely different syscall API that needs mocking on 32bit to deal
with the largefile stuff.
> tests/qemufirmwaretest.c | 7 +++++++
> tests/qemuxml2argvtest.c | 6 ++++++
> 2 files changed, 13 insertions(+)
>
> diff --git a/tests/qemufirmwaretest.c b/tests/qemufirmwaretest.c
> index 2b5cbf649b..3332bf0a34 100644
> --- a/tests/qemufirmwaretest.c
> +++ b/tests/qemufirmwaretest.c
> @@ -52,6 +52,8 @@ testParseFormatFW(const void *opaque)
> }
>
>
> +#if defined(__x86_64__) || defined(__amd64__) || defined(__aarch64__)
> +/* XXX Dirty hack, but mocking stat on 32bits is above my skills */
> static int
> testFWPrecedence(const void *opaque ATTRIBUTE_UNUSED)
> {
> @@ -97,6 +99,7 @@ testFWPrecedence(const void *opaque ATTRIBUTE_UNUSED)
>
> return 0;
> }
> +#endif
>
>
> static int
> @@ -124,8 +127,12 @@ mymain(void)
> DO_PARSE_TEST("usr/share/qemu/firmware/61-ovmf.json");
> DO_PARSE_TEST("usr/share/qemu/firmware/70-aavmf.json");
>
> +
> +#if defined(__x86_64__) || defined(__amd64__) || defined(__aarch64__)
> + /* XXX Dirty hack, but mocking stat on 32bits is above my skills */
> if (virTestRun("QEMU FW precedence test", testFWPrecedence, NULL) < 0)
> ret = -1;
> +#endif
>
> virFileWrapperClearPrefixes();
>
> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
> index 0c0dcae197..364792d24d 100644
> --- a/tests/qemuxml2argvtest.c
> +++ b/tests/qemuxml2argvtest.c
> @@ -2038,6 +2038,8 @@ mymain(void)
> DO_TEST("pseries-many-buses-2",
> QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
> QEMU_CAPS_VIRTIO_SCSI);
> +# if defined(__x86_64__) || defined(__amd64__) || defined(__aarch64__)
> + /* XXX Dirty hack, but mocking stat on 32bits is above my skills */
> DO_TEST("pseries-hostdevs-1",
> QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
> QEMU_CAPS_VIRTIO_SCSI,
> @@ -2050,6 +2052,7 @@ mymain(void)
> QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
> QEMU_CAPS_VIRTIO_SCSI,
> QEMU_CAPS_DEVICE_VFIO_PCI);
> +# endif
>
> DO_TEST("pseries-features",
> QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
> @@ -3157,10 +3160,13 @@ mymain(void)
> DO_TEST_CAPS_ARCH_LATEST("x86_64-pc-graphics", "x86_64");
> DO_TEST_CAPS_ARCH_LATEST("x86_64-q35-graphics", "x86_64");
>
> +# if defined(__x86_64__) || defined(__amd64__) || defined(__aarch64__)
> + /* XXX Dirty hack, but mocking stat on 32bits is above my skills */
> DO_TEST_CAPS_LATEST("os-firmware-bios");
> DO_TEST_CAPS_LATEST("os-firmware-efi");
> DO_TEST_CAPS_LATEST("os-firmware-efi-secboot");
> DO_TEST_CAPS_ARCH_LATEST("aarch64-os-firmware-efi", "aarch64");
> +# endif
>
> if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
> virFileDeleteTree(fakerootdir);
> --
> 2.19.2
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
More information about the libvir-list
mailing list