Roman Bogorodskiy wrote:
Jim Fehlig wrote:
> Add domain capabilities for PV and HVM domains.
>
> Signed-off-by: Jim Fehlig <jfehlig(a)suse.com>
> ---
>
> V3:
> - Change introduction of connectGetDomainCapabilities to 1.3.6
>
> src/libxl/libxl_capabilities.c | 140 +++++++++++++++++++++++++++++
> src/libxl/libxl_capabilities.h | 7 ++
> src/libxl/libxl_driver.c | 74 +++++++++++++++
> tests/Makefile.am | 5 ++
> tests/domaincapsschemadata/libxl-xenfv.xml | 68 ++++++++++++++
> tests/domaincapsschemadata/libxl-xenpv.xml | 58 ++++++++++++
> tests/domaincapstest.c | 61 +++++++++++++
> tests/testutilsxen.h | 1 +
> 8 files changed, 414 insertions(+)
...
> --- a/tests/domaincapstest.c
> +++ b/tests/domaincapstest.c
> @@ -162,10 +162,41 @@ fillQemuCaps(virDomainCapsPtr domCaps,
> #endif /* WITH_QEMU */
>
>
> +#ifdef WITH_LIBXL
> +# include "testutilsxen.h"
> +
> +static int
> +fillXenCaps(virDomainCapsPtr domCaps)
> +{
> + virFirmwarePtr *firmwares;
> + int ret = -1;
> +
> + if (VIR_ALLOC_N(firmwares, 2) < 0)
> + return ret;
> +
> + if (VIR_ALLOC(firmwares[0]) < 0 || VIR_ALLOC(firmwares[1]) < 0)
> + goto cleanup;
> + if (VIR_STRDUP(firmwares[0]->name, "/usr/lib/xen/boot/hvmloader")
< 0 ||
> + VIR_STRDUP(firmwares[1]->name, "/usr/lib/xen/boot/ovmf.bin")
< 0)
> + goto cleanup;
> +
> + if (libxlMakeDomainCapabilities(domCaps, firmwares, 2) < 0)
> + goto cleanup;
> +
> + ret = 0;
> +
> + cleanup:
> + virFirmwareFreeList(firmwares, 2);
> + return ret;
> +}
> +#endif /* WITH_LIBXL */
> +
> +
> enum testCapsType {
> CAPS_NONE,
> CAPS_ALL,
> CAPS_QEMU,
> + CAPS_LIBXL,
> };
>
> struct testData {
> @@ -213,6 +244,13 @@ test_virDomainCapsFormat(const void *opaque)
> goto cleanup;
> #endif
> break;
> +
> + case CAPS_LIBXL:
> +#if WITH_LIBXL
> + if (fillXenCaps(domCaps) < 0)
> + goto cleanup;
> +#endif
> + break;
> }
>
> if (!(domCapsXML = virDomainCapsFormat(domCaps)))
> @@ -280,6 +318,20 @@ mymain(void)
> VIR_FREE(name); \
> } while (0)
>
> +#define DO_TEST_LIBXL(Name, Emulator, Machine, Arch, Type) \
> + do { \
> + struct testData data = { \
> + .name = Name, \
> + .emulator = Emulator, \
> + .machine = Machine, \
> + .arch = Arch, \
> + .type = Type, \
> + .capsType = CAPS_LIBXL, \
> + }; \
> + if (virTestRun(Name, test_virDomainCapsFormat, &data) < 0) \
> + ret = -1; \
> + } while (0)
> +
> DO_TEST("basic", "/bin/emulatorbin",
"my-machine-type",
> "x86_64", VIR_DOMAIN_VIRT_UML, CAPS_NONE);
> DO_TEST("full", "/bin/emulatorbin",
"my-machine-type",
> @@ -313,6 +365,15 @@ mymain(void)
>
> #endif /* WITH_QEMU */
>
> +#if WITH_LIBXL
> +
> + DO_TEST_LIBXL("libxl-xenpv", "/usr/bin/qemu-system-x86_64",
> + "xenpv", "x86_64", VIR_DOMAIN_VIRT_XEN);
> + DO_TEST_LIBXL("libxl-xenfv", "/usr/bin/qemu-system-x86_64",
> + "xenfv", "x86_64", VIR_DOMAIN_VIRT_XEN);
> +
> +#endif /* WITH_LIBXL */
> +
> return ret;
> }
>
> diff --git a/tests/testutilsxen.h b/tests/testutilsxen.h
> index c78350d..8b997c3 100644
> --- a/tests/testutilsxen.h
> +++ b/tests/testutilsxen.h
> @@ -2,6 +2,7 @@
> # define _TESTUTILSXEN_H_
>
> # include "capabilities.h"
> +# include "libxl/libxl_capabilities.h"
>
> virCapsPtr testXenCapsInit(void);
This breaks build without xl:
gmake[2]: Entering directory '/usr/home/novel/code/libvirt/tests'
CC vircapstest.o
In file included from vircapstest.c:25:
In file included from ./testutilsxen.h:5:
../src/libxl/libxl_capabilities.h:26:11: fatal error: 'libxl.h' file not found
# include <libxl.h>
^
1 error generated.
Makefile:4935: recipe for target 'vircapstest.o' failed
Sorry. My pre-commit checklist needs to grow to include testing broader changes
like this using '--without-xen --without-libxl'. Anyhow, it looks like Martin
already pushed a fix for this (thanks Martin!).
Regards,
Jim