[libvirt] [PATCH 0/4] libxl: override HAVE_PVUSB in test suite

There's two different domain capabilities test cases for libxl, depending on whether host libxl supports PVUSB or not. This causes pain when extending domain capabilities XML, because at least one file always needs to be updated by hand. This series adds a wrapper function for checking PVUSB, and adjusts the libxl driver to use it when building domaincapabilities output. We then mock the new function in the test suite to always return true, and ditch the !PVUSB test cases Cole Robinson (4): tests: Rename virmocklibxl.c -> libxlmock.c tests: Create a shared library with libxl driver libxl: Break out libxlCapsHasPVUSB tests: domcaps: Remove dependency on libxl PVUSB support src/libxl/libxl_capabilities.c | 16 +++- src/libxl/libxl_capabilities.h | 1 + tests/Makefile.am | 22 +++--- tests/domaincapsmock.c | 11 +++ .../domaincapsschemadata/libxl-xenfv-usb.xml | 78 ------------------- tests/domaincapsschemadata/libxl-xenfv.xml | 1 + .../domaincapsschemadata/libxl-xenpv-usb.xml | 68 ---------------- tests/domaincapsschemadata/libxl-xenpv.xml | 1 + tests/domaincapstest.c | 12 +-- tests/{virmocklibxl.c => libxlmock.c} | 2 +- tests/libxlxml2domconfigtest.c | 2 +- 11 files changed, 43 insertions(+), 171 deletions(-) delete mode 100644 tests/domaincapsschemadata/libxl-xenfv-usb.xml delete mode 100644 tests/domaincapsschemadata/libxl-xenpv-usb.xml rename tests/{virmocklibxl.c => libxlmock.c} (98%) -- 2.20.1

Every other mock library is named ending in mock.c, move virmocklibxl.c to follow that pattern Signed-off-by: Cole Robinson <crobinso@redhat.com> --- tests/Makefile.am | 12 ++++++------ tests/{virmocklibxl.c => libxlmock.c} | 2 +- tests/libxlxml2domconfigtest.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) rename tests/{virmocklibxl.c => libxlmock.c} (98%) diff --git a/tests/Makefile.am b/tests/Makefile.am index ceb15d9218..c9f79a4e7d 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -278,7 +278,7 @@ ssh_LDADD = $(COVERAGE_LDFLAGS) if WITH_LIBXL test_programs += xlconfigtest xml2sexprtest sexpr2xmltest \ xmconfigtest libxlxml2domconfigtest -test_libraries += virmocklibxl.la +test_libraries += libxlmock.la endif WITH_LIBXL if WITH_QEMU @@ -534,11 +534,11 @@ libxlxml2domconfigtest_SOURCES = \ testutils.c testutils.h libxlxml2domconfigtest_LDADD = $(libxl_LDADDS) $(LIBXML_LIBS) -virmocklibxl_la_SOURCES = \ - virmocklibxl.c -virmocklibxl_la_CFLAGS = $(LIBXL_CFLAGS) $(LIBXML_CFLAGS) -virmocklibxl_la_LDFLAGS = $(MOCKLIBS_LDFLAGS) -virmocklibxl_la_LIBADD = $(MOCKLIBS_LIBS) +libxlmock_la_SOURCES = \ + libxlmock.c +libxlmock_la_CFLAGS = $(LIBXL_CFLAGS) $(LIBXML_CFLAGS) +libxlmock_la_LDFLAGS = $(MOCKLIBS_LDFLAGS) +libxlmock_la_LIBADD = $(MOCKLIBS_LIBS) else ! WITH_LIBXL EXTRA_DIST += xlconfigtest.c xml2sexprtest.c sexpr2xmltest.c \ diff --git a/tests/virmocklibxl.c b/tests/libxlmock.c similarity index 98% rename from tests/virmocklibxl.c rename to tests/libxlmock.c index 7664f007ac..4476cf728f 100644 --- a/tests/virmocklibxl.c +++ b/tests/libxlmock.c @@ -1,5 +1,5 @@ /* - * virmocklibxl.c: mocking of xenstore/libxs for libxl + * libxlmock.c: mocking of xenstore/libxs for libxl * * Copyright (C) 2014 Red Hat, Inc. * diff --git a/tests/libxlxml2domconfigtest.c b/tests/libxlxml2domconfigtest.c index de6e86ec66..863d8cded5 100644 --- a/tests/libxlxml2domconfigtest.c +++ b/tests/libxlxml2domconfigtest.c @@ -223,7 +223,7 @@ mymain(void) return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; } -VIR_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/virmocklibxl.so") +VIR_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/libxlmock.so") #else -- 2.20.1

This allows us to mock functions in the libxl driver, like is already possible for the qemu driver Signed-off-by: Cole Robinson <crobinso@redhat.com> --- tests/Makefile.am | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tests/Makefile.am b/tests/Makefile.am index c9f79a4e7d..c3f633cee0 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -58,7 +58,7 @@ MOCKLIBS_LDFLAGS = -module -avoid-version \ -rpath /evil/libtool/hack/to/force/shared/lib/creation \ $(MINGW_EXTRA_LDFLAGS) -QEMULIB_LDFLAGS = \ +DRIVERLIB_LDFLAGS = \ -avoid-version \ -rpath /evil/libtool/hack/to/force/shared/lib/creation \ $(MINGW_EXTRA_LDFLAGS) @@ -278,7 +278,7 @@ ssh_LDADD = $(COVERAGE_LDFLAGS) if WITH_LIBXL test_programs += xlconfigtest xml2sexprtest sexpr2xmltest \ xmconfigtest libxlxml2domconfigtest -test_libraries += libxlmock.la +test_libraries += libxltestdriver.la libxlmock.la endif WITH_LIBXL if WITH_QEMU @@ -509,6 +509,10 @@ libxl_LDADDS += ../src/libvirt_driver_network_impl.la endif WITH_NETWORK libxl_LDADDS += $(LDADDS) +libxltestdriver_la_SOURCES = +libxltestdriver_la_LDFLAGS = $(DRIVERLIB_LDFLAGS) +libxltestdriver_la_LIBADD = $(libxl_LDADDS) + xlconfigtest_SOURCES = \ xlconfigtest.c testutilsxen.c testutilsxen.h \ testutils.c testutils.h @@ -567,7 +571,7 @@ qemu_LDADDS += ../src/libvirt_qemu_probes.lo endif WITH_DTRACE_PROBES libqemutestdriver_la_SOURCES = -libqemutestdriver_la_LDFLAGS = $(QEMULIB_LDFLAGS) +libqemutestdriver_la_LDFLAGS = $(DRIVERLIB_LDFLAGS) libqemutestdriver_la_LIBADD = $(qemu_LDADDS) qemucpumock_la_SOURCES = \ @@ -1038,7 +1042,7 @@ endif WITH_QEMU if WITH_LIBXL domaincapstest_SOURCES += testutilsxen.c testutilsxen.h -domaincapstest_LDADD += ../src/libvirt_driver_libxl_impl.la $(GNULIB_LIBS) +domaincapstest_LDADD += libxltestdriver.la $(GNULIB_LIBS) endif WITH_LIBXL if WITH_BHYVE -- 2.20.1

No functional change, but this will allow us to mock out the function in the test suite Signed-off-by: Cole Robinson <crobinso@redhat.com> --- src/libxl/libxl_capabilities.c | 16 ++++++++++++---- src/libxl/libxl_capabilities.h | 1 + 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/libxl/libxl_capabilities.c b/src/libxl/libxl_capabilities.c index 111fb462e4..cc42dc6987 100644 --- a/src/libxl/libxl_capabilities.c +++ b/src/libxl/libxl_capabilities.c @@ -671,6 +671,15 @@ libxlMakeDomainDeviceVideoCaps(virDomainCapsDeviceVideoPtr dev) return 0; } +bool libxlCapsHasPVUSB(void) +{ +#ifdef LIBXL_HAVE_PVUSB + return true; +#else + return false; +#endif +} + static int libxlMakeDomainDeviceHostdevCaps(virDomainCapsDeviceHostdevPtr dev) { @@ -688,10 +697,9 @@ libxlMakeDomainDeviceHostdevCaps(virDomainCapsDeviceHostdevPtr dev) VIR_DOMAIN_CAPS_ENUM_SET(dev->subsysType, VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI); -#ifdef LIBXL_HAVE_PVUSB - VIR_DOMAIN_CAPS_ENUM_SET(dev->subsysType, - VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB); -#endif + if (libxlCapsHasPVUSB()) + VIR_DOMAIN_CAPS_ENUM_SET(dev->subsysType, + VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB); /* No virDomainHostdevCapsType for libxl */ virDomainCapsEnumClear(&dev->capsType); diff --git a/src/libxl/libxl_capabilities.h b/src/libxl/libxl_capabilities.h index be41682206..a0b9c10653 100644 --- a/src/libxl/libxl_capabilities.h +++ b/src/libxl/libxl_capabilities.h @@ -40,6 +40,7 @@ * by libvirt for Xen, and cannot be used for a persistent network name. */ # define LIBXL_GENERATED_PREFIX_XEN "vif" +bool libxlCapsHasPVUSB(void); virCapsPtr libxlMakeCapabilities(libxl_ctx *ctx); -- 2.20.1

Mock out libxlCapsHasPVUSB to always return true, so test results aren't dependent on host libxl version Signed-off-by: Cole Robinson <crobinso@redhat.com> --- tests/domaincapsmock.c | 11 +++ .../domaincapsschemadata/libxl-xenfv-usb.xml | 78 ------------------- tests/domaincapsschemadata/libxl-xenfv.xml | 1 + .../domaincapsschemadata/libxl-xenpv-usb.xml | 68 ---------------- tests/domaincapsschemadata/libxl-xenpv.xml | 1 + tests/domaincapstest.c | 12 +-- 6 files changed, 15 insertions(+), 156 deletions(-) delete mode 100644 tests/domaincapsschemadata/libxl-xenfv-usb.xml delete mode 100644 tests/domaincapsschemadata/libxl-xenpv-usb.xml diff --git a/tests/domaincapsmock.c b/tests/domaincapsmock.c index d8cf61685e..90e17c19f0 100644 --- a/tests/domaincapsmock.c +++ b/tests/domaincapsmock.c @@ -17,6 +17,17 @@ #include <config.h> #include "virhostcpu.h" +#ifdef WITH_LIBXL +# include "libxl/libxl_capabilities.h" +#endif + +#ifdef WITH_LIBXL +bool +libxlCapsHasPVUSB(void) +{ + return true; +} +#endif int virHostCPUGetKVMMaxVCPUs(void) diff --git a/tests/domaincapsschemadata/libxl-xenfv-usb.xml b/tests/domaincapsschemadata/libxl-xenfv-usb.xml deleted file mode 100644 index 29fe1f9aa3..0000000000 --- a/tests/domaincapsschemadata/libxl-xenfv-usb.xml +++ /dev/null @@ -1,78 +0,0 @@ -<domainCapabilities> - <path>/usr/bin/qemu-system-x86_64</path> - <domain>xen</domain> - <machine>xenfv</machine> - <arch>x86_64</arch> - <vcpu max='128'/> - <iothreads supported='no'/> - <os supported='yes'> - <loader supported='yes'> - <value>/usr/lib/xen/boot/hvmloader</value> - <value>/usr/lib/xen/boot/ovmf.bin</value> - <enum name='type'> - <value>rom</value> - <value>pflash</value> - </enum> - <enum name='readonly'> - <value>yes</value> - </enum> - </loader> - </os> - <cpu> - <mode name='host-passthrough' supported='no'/> - <mode name='host-model' supported='no'/> - <mode name='custom' supported='no'/> - </cpu> - <devices> - <disk supported='yes'> - <enum name='diskDevice'> - <value>disk</value> - <value>cdrom</value> - </enum> - <enum name='bus'> - <value>ide</value> - <value>scsi</value> - <value>xen</value> - </enum> - </disk> - <graphics supported='yes'> - <enum name='type'> - <value>sdl</value> - <value>vnc</value> - <value>spice</value> - </enum> - </graphics> - <video supported='yes'> - <enum name='modelType'> - <value>vga</value> - <value>cirrus</value> - <value>xen</value> - </enum> - </video> - <hostdev supported='yes'> - <enum name='mode'> - <value>subsystem</value> - </enum> - <enum name='startupPolicy'> - <value>default</value> - <value>mandatory</value> - <value>requisite</value> - <value>optional</value> - </enum> - <enum name='subsysType'> - <value>usb</value> - <value>pci</value> - </enum> - <enum name='capsType'/> - <enum name='pciBackend'> - <value>xen</value> - </enum> - </hostdev> - </devices> - <features> - <gic supported='no'/> - <vmcoreinfo supported='no'/> - <genid supported='no'/> - <sev supported='no'/> - </features> -</domainCapabilities> diff --git a/tests/domaincapsschemadata/libxl-xenfv.xml b/tests/domaincapsschemadata/libxl-xenfv.xml index 5f318d5c4b..29fe1f9aa3 100644 --- a/tests/domaincapsschemadata/libxl-xenfv.xml +++ b/tests/domaincapsschemadata/libxl-xenfv.xml @@ -60,6 +60,7 @@ <value>optional</value> </enum> <enum name='subsysType'> + <value>usb</value> <value>pci</value> </enum> <enum name='capsType'/> diff --git a/tests/domaincapsschemadata/libxl-xenpv-usb.xml b/tests/domaincapsschemadata/libxl-xenpv-usb.xml deleted file mode 100644 index b9f3ca736b..0000000000 --- a/tests/domaincapsschemadata/libxl-xenpv-usb.xml +++ /dev/null @@ -1,68 +0,0 @@ -<domainCapabilities> - <path>/usr/bin/qemu-system-x86_64</path> - <domain>xen</domain> - <machine>xenpv</machine> - <arch>x86_64</arch> - <vcpu max='512'/> - <iothreads supported='no'/> - <os supported='yes'> - <loader supported='no'/> - </os> - <cpu> - <mode name='host-passthrough' supported='no'/> - <mode name='host-model' supported='no'/> - <mode name='custom' supported='no'/> - </cpu> - <devices> - <disk supported='yes'> - <enum name='diskDevice'> - <value>disk</value> - <value>cdrom</value> - </enum> - <enum name='bus'> - <value>ide</value> - <value>scsi</value> - <value>xen</value> - </enum> - </disk> - <graphics supported='yes'> - <enum name='type'> - <value>sdl</value> - <value>vnc</value> - <value>spice</value> - </enum> - </graphics> - <video supported='yes'> - <enum name='modelType'> - <value>vga</value> - <value>cirrus</value> - <value>xen</value> - </enum> - </video> - <hostdev supported='yes'> - <enum name='mode'> - <value>subsystem</value> - </enum> - <enum name='startupPolicy'> - <value>default</value> - <value>mandatory</value> - <value>requisite</value> - <value>optional</value> - </enum> - <enum name='subsysType'> - <value>usb</value> - <value>pci</value> - </enum> - <enum name='capsType'/> - <enum name='pciBackend'> - <value>xen</value> - </enum> - </hostdev> - </devices> - <features> - <gic supported='no'/> - <vmcoreinfo supported='no'/> - <genid supported='no'/> - <sev supported='no'/> - </features> -</domainCapabilities> diff --git a/tests/domaincapsschemadata/libxl-xenpv.xml b/tests/domaincapsschemadata/libxl-xenpv.xml index 6fc65f67b7..b9f3ca736b 100644 --- a/tests/domaincapsschemadata/libxl-xenpv.xml +++ b/tests/domaincapsschemadata/libxl-xenpv.xml @@ -50,6 +50,7 @@ <value>optional</value> </enum> <enum name='subsysType'> + <value>usb</value> <value>pci</value> </enum> <enum name='capsType'/> diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c index 7f52058bad..b9ab148fab 100644 --- a/tests/domaincapstest.c +++ b/tests/domaincapstest.c @@ -508,17 +508,9 @@ mymain(void) #if WITH_LIBXL -# ifdef LIBXL_HAVE_PVUSB -# define LIBXL_XENPV_CAPS "libxl-xenpv-usb" -# define LIBXL_XENFV_CAPS "libxl-xenfv-usb" -# else -# define LIBXL_XENPV_CAPS "libxl-xenpv" -# define LIBXL_XENFV_CAPS "libxl-xenfv" -# endif - - DO_TEST_LIBXL(LIBXL_XENPV_CAPS, "/usr/bin/qemu-system-x86_64", + DO_TEST_LIBXL("libxl-xenpv", "/usr/bin/qemu-system-x86_64", "xenpv", "x86_64", VIR_DOMAIN_VIRT_XEN); - DO_TEST_LIBXL(LIBXL_XENFV_CAPS, "/usr/bin/qemu-system-x86_64", + DO_TEST_LIBXL("libxl-xenfv", "/usr/bin/qemu-system-x86_64", "xenfv", "x86_64", VIR_DOMAIN_VIRT_XEN); #endif /* WITH_LIBXL */ -- 2.20.1

On Fri, Feb 08, 2019 at 05:47:09PM -0500, Cole Robinson wrote:
There's two different domain capabilities test cases for libxl, depending on whether host libxl supports PVUSB or not. This causes pain when extending domain capabilities XML, because at least one file always needs to be updated by hand.
This series adds a wrapper function for checking PVUSB, and adjusts the libxl driver to use it when building domaincapabilities output. We then mock the new function in the test suite to always return true, and ditch the !PVUSB test cases
Cole Robinson (4): tests: Rename virmocklibxl.c -> libxlmock.c tests: Create a shared library with libxl driver libxl: Break out libxlCapsHasPVUSB tests: domcaps: Remove dependency on libxl PVUSB support
src/libxl/libxl_capabilities.c | 16 +++- src/libxl/libxl_capabilities.h | 1 + tests/Makefile.am | 22 +++--- tests/domaincapsmock.c | 11 +++ .../domaincapsschemadata/libxl-xenfv-usb.xml | 78 ------------------- tests/domaincapsschemadata/libxl-xenfv.xml | 1 + .../domaincapsschemadata/libxl-xenpv-usb.xml | 68 ---------------- tests/domaincapsschemadata/libxl-xenpv.xml | 1 + tests/domaincapstest.c | 12 +-- tests/{virmocklibxl.c => libxlmock.c} | 2 +- tests/libxlxml2domconfigtest.c | 2 +- 11 files changed, 43 insertions(+), 171 deletions(-) delete mode 100644 tests/domaincapsschemadata/libxl-xenfv-usb.xml delete mode 100644 tests/domaincapsschemadata/libxl-xenpv-usb.xml rename tests/{virmocklibxl.c => libxlmock.c} (98%)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano
participants (2)
-
Cole Robinson
-
Ján Tomko