On Tue, Aug 01, 2017 at 03:17:51PM +0200, Marek Marczykowski-Górecki wrote: > From: Jim Fehlig <jfehlig@xxxxxxxx> > > The libxl library allows a libxl_domain_config object to be serialized > from/to a JSON string. Use this to allow testing of the XML to > libxl_domain_config conversion process. Test XML is converted to > libxl_domain_config, which is then serialized to json. A json template > corresponding to the test XML is converted to a libxl_domain_config > object using libxl_domain_config_from_json(), and then serialized > back to json using libxl_domain_config_to_json(). The two json > docs are then compared. > > Using libxl to convert the json template to a libxl_domain_config > object and then back to json provides a simple way to account for > any changes or additions to the json representation across Xen > releases. > > Signed-off-by: Jim Fehlig <jfehlig@xxxxxxxx> > [update to v3.5.0-rc1, improve error reporting, use /bin/true emulator] > Signed-off-by: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx> I've been looking at this series for the past days, and taking into account the comments that Jim mentioned yesterday are ammended, and this looks good to me: Reviewed-by: Joao Martins <joao.m.martins@xxxxxxxxxx> It adds a really nice piece of testing infra for libxl_domain_configs. Maybe in the future more tests could be added in (in addition to the CPUID one that Marek has planned). Joao > --- > m4/virt-driver-libxl.m4 | 6 +- > tests/Makefile.am | 18 +- > tests/libxlxml2domconfigdata/basic-hvm.json | 89 ++++++++- > tests/libxlxml2domconfigdata/basic-hvm.xml | 36 +++- > tests/libxlxml2domconfigdata/basic-pv.json | 65 ++++++- > tests/libxlxml2domconfigdata/basic-pv.xml | 28 ++- > tests/libxlxml2domconfigdata/moredevs-hvm.json | 111 ++++++++++- > tests/libxlxml2domconfigdata/moredevs-hvm.xml | 63 ++++++- > tests/libxlxml2domconfigtest.c | 205 ++++++++++++++++++- > tests/virmocklibxl.c | 87 ++++++++- > 10 files changed, 705 insertions(+), 3 deletions(-) > create mode 100644 tests/libxlxml2domconfigdata/basic-hvm.json > create mode 100644 tests/libxlxml2domconfigdata/basic-hvm.xml > create mode 100644 tests/libxlxml2domconfigdata/basic-pv.json > create mode 100644 tests/libxlxml2domconfigdata/basic-pv.xml > create mode 100644 tests/libxlxml2domconfigdata/moredevs-hvm.json > create mode 100644 tests/libxlxml2domconfigdata/moredevs-hvm.xml > create mode 100644 tests/libxlxml2domconfigtest.c > create mode 100644 tests/virmocklibxl.c > > diff --git a/m4/virt-driver-libxl.m4 b/m4/virt-driver-libxl.m4 > index 96a9d47..3d635f0 100644 > --- a/m4/virt-driver-libxl.m4 > +++ b/m4/virt-driver-libxl.m4 > @@ -35,7 +35,7 @@ AC_DEFUN([LIBVIRT_DRIVER_CHECK_LIBXL], [ > if test "x$with_libxl" = "xyes" ; then > LIBXL_FIRMWARE_DIR=$($PKG_CONFIG --variable xenfirmwaredir xenlight) > LIBXL_EXECBIN_DIR=$($PKG_CONFIG --variable libexec_bin xenlight) > - fi > + fi > > dnl pkgconfig file not found, fallback to lib probe > if test "x$with_libxl" = "xno" ; then > @@ -80,6 +80,10 @@ AC_DEFUN([LIBVIRT_DRIVER_CHECK_LIBXL], [ > LIBXL_LIBS="$LIBXL_LIBS -lxenctrl" > ]) > > + dnl Check if libxl_domain_config_from_json is available for domXML to > + dnl libxl_domain_config tests > + LIBS="$LIBS -lxenlight -lxenctrl" > + AC_CHECK_FUNCS([libxl_domain_config_from_json]) > CFLAGS="$old_CFLAGS" > LIBS="$old_LIBS" > fi > diff --git a/tests/Makefile.am b/tests/Makefile.am > index 3e3d580..49b9d40 100644 > --- a/tests/Makefile.am > +++ b/tests/Makefile.am > @@ -99,6 +99,7 @@ EXTRA_DIST = \ > genericxml2xmlindata \ > genericxml2xmloutdata \ > interfaceschemadata \ > + libxlxml2domconfigdata \ > lxcconf2xmldata \ > lxcxml2xmldata \ > lxcxml2xmloutdata \ > @@ -271,7 +272,8 @@ test_programs += xml2sexprtest sexpr2xmltest \ > endif WITH_XEN > > if WITH_LIBXL > -test_programs += xlconfigtest > +test_programs += xlconfigtest libxlxml2domconfigtest > +test_libraries += virmocklibxl.la > endif WITH_LIBXL > > if WITH_QEMU > @@ -528,8 +530,20 @@ xlconfigtest_SOURCES = \ > xlconfigtest.c testutilsxen.c testutilsxen.h \ > testutils.c testutils.h > xlconfigtest_LDADD =$(libxl_LDADDS) > + > +libxlxml2domconfigtest_SOURCES = \ > + libxlxml2domconfigtest.c testutilsxen.c testutilsxen.h \ > + testutils.c testutils.h > +libxlxml2domconfigtest_LDADD = $(libxl_LDADDS) $(LIBXML_LIBS) > + > +virmocklibxl_la_SOURCES = \ > + virmocklibxl.c > +virmocklibxl_la_CFLAGS = $(AM_CFLAGS) > +virmocklibxl_la_LDFLAGS = -module -avoid-version \ > + -rpath /evil/libtool/hack/to/force/shared/lib/creation > + > else ! WITH_LIBXL > -EXTRA_DIST += xlconfigtest.c > +EXTRA_DIST += xlconfigtest.c libxlxml2domconfigtest.c > endif ! WITH_LIBXL > > QEMUMONITORTESTUTILS_SOURCES = \ > diff --git a/tests/libxlxml2domconfigdata/basic-hvm.json b/tests/libxlxml2domconfigdata/basic-hvm.json > new file mode 100644 > index 0000000..6fa41f3 > --- /dev/null > +++ b/tests/libxlxml2domconfigdata/basic-hvm.json > @@ -0,0 +1,89 @@ > +{ > + "c_info": { > + "type": "hvm", > + "name": "test-hvm", > + "uuid": "2147d599-9cc6-c0dc-92ab-4064b5446e9b" > + }, > + "b_info": { > + "max_vcpus": 4, > + "avail_vcpus": [ > + 0, > + 1, > + 2, > + 3 > + ], > + "max_memkb": 1048576, > + "target_memkb": 1048576, > + "video_memkb": 8192, > + "shadow_memkb": 12288, > + "device_model_version": "qemu_xen", > + "device_model": "/bin/true", > + "sched_params": { > + "weight": 1000 > + }, > + "type.hvm": { > + "pae": "True", > + "apic": "True", > + "acpi": "True", > + "vga": { > + "kind": "cirrus" > + }, > + "vnc": { > + "enable": "True", > + "listen": "0.0.0.0", > + "findunused": "False" > + }, > + "sdl": { > + "enable": "False" > + }, > + "spice": { > + > + }, > + "boot": "c", > + "rdm": { > + > + } > + }, > + "arch_arm": { > + > + } > + }, > + "disks": [ > + { > + "pdev_path": "/var/lib/xen/images/test-hvm.img", > + "vdev": "hda", > + "backend": "qdisk", > + "format": "raw", > + "removable": 1, > + "readwrite": 1 > + } > + ], > + "nics": [ > + { > + "devid": 0, > + "mac": "00:16:3e:66:12:b4", > + "bridge": "br0", > + "script": "/etc/xen/scripts/vif-bridge", > + "nictype": "vif_ioemu" > + } > + ], > + "vfbs": [ > + { > + "devid": -1, > + "vnc": { > + "enable": "True", > + "listen": "0.0.0.0", > + "findunused": "False" > + }, > + "sdl": { > + "enable": "False" > + } > + } > + ], > + "vkbs": [ > + { > + "devid": -1 > + } > + ], > + "on_reboot": "restart" > +} > diff --git a/tests/libxlxml2domconfigdata/basic-hvm.xml b/tests/libxlxml2domconfigdata/basic-hvm.xml > new file mode 100644 > index 0000000..d8cd2a2 > --- /dev/null > +++ b/tests/libxlxml2domconfigdata/basic-hvm.xml > @@ -0,0 +1,36 @@ > +<domain type='xen'> > + <name>test-hvm</name> > + <description>None</description> > + <uuid>2147d599-9cc6-c0dc-92ab-4064b5446e9b</uuid> > + <memory>1048576</memory> > + <currentMemory>1048576</currentMemory> > + <vcpu>4</vcpu> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>destroy</on_crash> > + <clock sync='utc'/> > + <os> > + <type>hvm</type> > + <loader>/usr/lib/xen/boot/hvmloader</loader> > + <boot dev='hd'/> > + </os> > + <features> > + <apic/> > + <acpi/> > + <pae/> > + </features> > + <devices> > + <emulator>/bin/true</emulator> > + <disk type='file' device='disk'> > + <driver name='qemu'/> > + <source file='/var/lib/xen/images/test-hvm.img'/> > + <target dev='hda'/> > + </disk> > + <interface type='bridge'> > + <source bridge='br0'/> > + <mac address='00:16:3e:66:12:b4'/> > + <script path='/etc/xen/scripts/vif-bridge'/> > + </interface> > + <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'/> > + </devices> > +</domain> > diff --git a/tests/libxlxml2domconfigdata/basic-pv.json b/tests/libxlxml2domconfigdata/basic-pv.json > new file mode 100644 > index 0000000..7e1abd3 > --- /dev/null > +++ b/tests/libxlxml2domconfigdata/basic-pv.json > @@ -0,0 +1,65 @@ > +{ > + "c_info": { > + "type": "pv", > + "name": "test-pv", > + "uuid": "039e9ee6-4a84-3055-4c81-8ba426ae2656" > + }, > + "b_info": { > + "max_vcpus": 4, > + "avail_vcpus": [ > + 0, > + 1, > + 2, > + 3 > + ], > + "max_memkb": 524288, > + "target_memkb": 524288, > + "sched_params": { > + "weight": 1000 > + }, > + "type.pv": { > + "bootloader": "pygrub" > + }, > + "arch_arm": { > + > + } > + }, > + "disks": [ > + { > + "pdev_path": "/var/lib/xen/images/test-pv.img", > + "vdev": "xvda", > + "backend": "qdisk", > + "format": "raw", > + "removable": 1, > + "readwrite": 1 > + } > + ], > + "nics": [ > + { > + "devid": 0, > + "mac": "00:16:3e:3e:86:60", > + "bridge": "br0", > + "script": "/etc/xen/scripts/vif-bridge", > + "nictype": "vif" > + } > + ], > + "vfbs": [ > + { > + "devid": -1, > + "vnc": { > + "enable": "True", > + "listen": "0.0.0.0", > + "findunused": "False" > + }, > + "sdl": { > + "enable": "False" > + } > + } > + ], > + "vkbs": [ > + { > + "devid": -1 > + } > + ], > + "on_reboot": "restart" > +} > diff --git a/tests/libxlxml2domconfigdata/basic-pv.xml b/tests/libxlxml2domconfigdata/basic-pv.xml > new file mode 100644 > index 0000000..b3bc601 > --- /dev/null > +++ b/tests/libxlxml2domconfigdata/basic-pv.xml > @@ -0,0 +1,28 @@ > +<domain type='xen'> > + <name>test-pv</name> > + <uuid>039e9ee6-4a84-3055-4c81-8ba426ae2656</uuid> > + <memory>524288</memory> > + <currentMemory>524288</currentMemory> > + <vcpu>4</vcpu> > + <bootloader>pygrub</bootloader> > + <os> > + <type arch='i686' machine='xenpv'>linux</type> > + </os> > + <clock offset='utc'/> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>destroy</on_crash> > + <devices> > + <disk type='file' device='disk'> > + <driver name='qemu'/> > + <source file='/var/lib/xen/images/test-pv.img'/> > + <target dev='xvda'/> > + </disk> > + <interface type='bridge'> > + <source bridge='br0'/> > + <mac address='00:16:3e:3e:86:60'/> > + <script path='/etc/xen/scripts/vif-bridge'/> > + </interface> > + <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'/> > + </devices> > +</domain> > diff --git a/tests/libxlxml2domconfigdata/moredevs-hvm.json b/tests/libxlxml2domconfigdata/moredevs-hvm.json > new file mode 100644 > index 0000000..8f861f3 > --- /dev/null > +++ b/tests/libxlxml2domconfigdata/moredevs-hvm.json > @@ -0,0 +1,111 @@ > +{ > + "c_info": { > + "type": "hvm", > + "hap": "True", > + "name": "test-hvm", > + "uuid": "2147d599-9cc6-c0dc-92ab-4064b5446e9b" > + }, > + "b_info": { > + "max_vcpus": 4, > + "avail_vcpus": [ > + 0, > + 1, > + 2, > + 3 > + ], > + "tsc_mode": "native", > + "max_memkb": 1048576, > + "target_memkb": 1048576, > + "video_memkb": 8192, > + "shadow_memkb": 12288, > + "device_model_version": "qemu_xen", > + "device_model": "/bin/true", > + "sched_params": { > + "weight": 1000 > + }, > + "type.hvm": { > + "pae": "True", > + "apic": "True", > + "acpi": "True", > + "hpet": "True", > + "vga": { > + "kind": "cirrus" > + }, > + "vnc": { > + "enable": "True", > + "findunused": "False" > + }, > + "sdl": { > + "enable": "False" > + }, > + "spice": { > + > + }, > + "serial": "pty", > + "boot": "c", > + "usbdevice_list": [ > + "mouse", > + "tablet" > + ], > + "rdm": { > + > + } > + }, > + "arch_arm": { > + > + } > + }, > + "disks": [ > + { > + "pdev_path": "/var/lib/xen/images/test-hvm.img", > + "vdev": "hda", > + "backend": "qdisk", > + "format": "raw", > + "removable": 1, > + "readwrite": 1 > + }, > + { > + "pdev_path": "/root/boot.iso", > + "vdev": "hdb", > + "backend": "qdisk", > + "format": "raw", > + "removable": 1, > + "is_cdrom": 1 > + } > + ], > + "nics": [ > + { > + "devid": 0, > + "model": "netfront", > + "mac": "00:16:3e:7a:35:ce", > + "bridge": "br0", > + "script": "/etc/xen/scripts/vif-bridge", > + "nictype": "vif" > + } > + ], > + "pcidevs": [ > + { > + "dev": 16, > + "bus": 10, > + "rdm_policy": "invalid" > + } > + ], > + "vfbs": [ > + { > + "devid": -1, > + "vnc": { > + "enable": "True", > + "findunused": "False" > + }, > + "sdl": { > + "enable": "False" > + } > + } > + ], > + "vkbs": [ > + { > + "devid": -1 > + } > + ], > + "on_reboot": "restart" > +} > diff --git a/tests/libxlxml2domconfigdata/moredevs-hvm.xml b/tests/libxlxml2domconfigdata/moredevs-hvm.xml > new file mode 100644 > index 0000000..f7eb09f > --- /dev/null > +++ b/tests/libxlxml2domconfigdata/moredevs-hvm.xml > @@ -0,0 +1,63 @@ > +<domain type='xen'> > + <name>test-hvm</name> > + <description>None</description> > + <uuid>2147d599-9cc6-c0dc-92ab-4064b5446e9b</uuid> > + <memory>1048576</memory> > + <currentMemory>1048576</currentMemory> > + <vcpu>4</vcpu> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>destroy</on_crash> > + <clock offset='variable' adjustment='0' basis='utc'> > + <timer name='tsc' present='yes' mode='native'/> > + <timer name='hpet' present='yes'/> > + </clock> > + <os> > + <type>hvm</type> > + <loader>/usr/lib/xen/boot/hvmloader</loader> > + <boot dev='hd'/> > + </os> > + <features> > + <apic/> > + <acpi/> > + <pae/> > + <hap/> > + </features> > + <devices> > + <emulator>/bin/true</emulator> > + <disk type='file' device='disk'> > + <driver name='qemu' type='raw' cache='default'/> > + <source file='/var/lib/xen/images/test-hvm.img'/> > + <target dev='hda'/> > + </disk> > + <disk type='file' device='cdrom'> > + <driver name='qemu' type='raw' cache='default'/> > + <source file='/root/boot.iso'/> > + <target dev='hdb'/> > + </disk> > + <interface type='bridge'> > + <source bridge='br0'/> > + <mac address='00:16:3e:7a:35:ce'/> > + <script path='/etc/xen/scripts/vif-bridge'/> > + <model type='netfront'/> > + </interface> > + <interface type='hostdev' managed='yes'> > + <mac address='00:16:3e:2e:e7:fc'/> > + <driver name='xen'/> > + <source> > + <address type='pci' domain='0x0000' bus='0x0a' slot='0x10' function='0x0'/> > + </source> > + </interface> > + <graphics type='vnc'/> > + <video> > + <model type='cirrus' vram='8192' heads='1' primary='yes'/> > + </video> > + <console type='pty'> > + <target port='0'/> > + </console> > + <input type='mouse' bus='usb'/> > + <input type='tablet' bus='usb'/> > + <input type='mouse' bus='ps2'/> > + <input type='keyboard' bus='ps2'/> > + </devices> > +</domain> > diff --git a/tests/libxlxml2domconfigtest.c b/tests/libxlxml2domconfigtest.c > new file mode 100644 > index 0000000..d943cf2 > --- /dev/null > +++ b/tests/libxlxml2domconfigtest.c > @@ -0,0 +1,205 @@ > +/* > + * libxlxml2domconfigtest.c: test conversion of domXML to > + * libxl_domain_config structure. > + * > + * Copyright (C) 2017 SUSE LINUX Products GmbH, Nuernberg, Germany. > + * > + * This library is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2.1 of the License, or (at your option) any later version. > + * > + * This library is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this library. If not, see > + * <http://www.gnu.org/licenses/>. > + * > + * Author: Jim Fehlig <jfehlig@xxxxxxxx> > + */ > + > +#include <config.h> > + > +#include <stdio.h> > +#include <stdlib.h> > +#include <unistd.h> > +#include <string.h> > + > +#include <sys/types.h> > +#include <fcntl.h> > + > +#include "testutils.h" > + > +#if defined(WITH_LIBXL) && defined(WITH_YAJL) && defined(HAVE_LIBXL_DOMAIN_CONFIG_FROM_JSON) > + > +# include "internal.h" > +# include "viralloc.h" > +# include "libxl/libxl_conf.h" > +# include "datatypes.h" > +# include "virstring.h" > +# include "virmock.h" > +# include "virjson.h" > +# include "testutilsxen.h" > + > +# define VIR_FROM_THIS VIR_FROM_LIBXL > + > +static const char *abs_top_srcdir; > +static virCapsPtr xencaps; > + > +static int > +testCompareXMLToDomConfig(const char *xmlfile, > + const char *jsonfile) > +{ > + int ret = -1; > + libxl_domain_config actualconfig; > + libxl_domain_config expectconfig; > + xentoollog_logger *log = NULL; > + libxl_ctx *ctx = NULL; > + virPortAllocatorPtr gports = NULL; > + virDomainXMLOptionPtr xmlopt = NULL; > + virDomainDefPtr vmdef = NULL; > + char *actualjson = NULL; > + char *tempjson = NULL; > + char *expectjson = NULL; > + > + libxl_domain_config_init(&actualconfig); > + libxl_domain_config_init(&expectconfig); > + > + if (!(log = (xentoollog_logger *)xtl_createlogger_stdiostream(stderr, XTL_DEBUG, 0))) > + goto cleanup; > + > + if (libxl_ctx_alloc(&ctx, LIBXL_VERSION, 0, log) < 0) > + goto cleanup; > + > + if (!(gports = virPortAllocatorNew("vnc", 5900, 6000, > + VIR_PORT_ALLOCATOR_SKIP_BIND_CHECK))) > + goto cleanup; > + > + if (!(xmlopt = libxlCreateXMLConf())) > + goto cleanup; > + > + if (!(vmdef = virDomainDefParseFile(xmlfile, xencaps, xmlopt, > + NULL, VIR_DOMAIN_XML_INACTIVE))) > + goto cleanup; > + > + if (libxlBuildDomainConfig(gports, vmdef, NULL, ctx, xencaps, &actualconfig) < 0) > + goto cleanup; > + > + if (!(actualjson = libxl_domain_config_to_json(ctx, &actualconfig))) { > + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > + "Failed to retrieve JSON doc for libxl_domain_config"); > + goto cleanup; > + } > + > + virTestLoadFile(jsonfile, &tempjson); > + if (libxl_domain_config_from_json(ctx, &expectconfig, tempjson) != 0) { > + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > + "Failed to create libxl_domain_config from JSON doc"); > + goto cleanup; > + } > + if (!(expectjson = libxl_domain_config_to_json(ctx, &expectconfig))) { > + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > + "Failed to retrieve JSON doc for libxl_domain_config"); > + goto cleanup; > + } > + > + if (virTestCompareToString(expectjson, actualjson) < 0) > + goto cleanup; > + > + ret = 0; > + > + cleanup: > + VIR_FREE(expectjson); > + VIR_FREE(actualjson); > + VIR_FREE(tempjson); > + virDomainDefFree(vmdef); > + virObjectUnref(gports); > + virObjectUnref(xmlopt); > + libxl_ctx_free(ctx); > + libxl_domain_config_dispose(&actualconfig); > + libxl_domain_config_dispose(&expectconfig); > + xtl_logger_destroy(log); > + return ret; > +} > + > + > +struct testInfo { > + const char *name; > +}; > + > + > +static int > +testCompareXMLToDomConfigHelper(const void *data) > +{ > + int ret = -1; > + const struct testInfo *info = data; > + char *xmlfile = NULL; > + char *jsonfile = NULL; > + > + if (virAsprintf(&xmlfile, "%s/libxlxml2domconfigdata/%s.xml", > + abs_srcdir, info->name) < 0 || > + virAsprintf(&jsonfile, "%s/libxlxml2domconfigdata/%s.json", > + abs_srcdir, info->name) < 0) > + goto cleanup; > + > + ret = testCompareXMLToDomConfig(xmlfile, jsonfile); > + > + cleanup: > + VIR_FREE(xmlfile); > + VIR_FREE(jsonfile); > + return ret; > +} > + > + > +static int > +mymain(void) > +{ > + int ret = 0; > + > + abs_top_srcdir = getenv("abs_top_srcdir"); > + if (!abs_top_srcdir) > + abs_top_srcdir = abs_srcdir "/.."; > + > + /* Set the timezone because we are mocking the time() function. > + * If we don't do that, then localtime() may return unpredictable > + * results. In order to detect things that just work by a blind > + * chance, we need to set an virtual timezone that no libvirt > + * developer resides in. */ > + if (setenv("TZ", "VIR00:30", 1) < 0) { > + perror("setenv"); > + return EXIT_FAILURE; > + } > + > + if ((xencaps = testXenCapsInit()) == NULL) > + return EXIT_FAILURE; > + > +# define DO_TEST(name) \ > + do { \ > + static struct testInfo info = { \ > + name, \ > + }; \ > + if (virTestRun("LibXL XML-2-JSON " name, \ > + testCompareXMLToDomConfigHelper, &info) < 0) \ > + ret = -1; \ > + } while (0) > + > + DO_TEST("basic-pv"); > + DO_TEST("basic-hvm"); > + DO_TEST("moredevs-hvm"); > + > + return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; > +} > + > +VIR_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/virmocklibxl.so") > + > +#else > + > +int main(void) > +{ > + return EXIT_AM_SKIP; > +} > + > +#endif /* WITH_LIBXL && WITH_YAJL && HAVE_LIBXL_DOMAIN_CONFIG_FROM_JSON */ > diff --git a/tests/virmocklibxl.c b/tests/virmocklibxl.c > new file mode 100644 > index 0000000..bc4b53d > --- /dev/null > +++ b/tests/virmocklibxl.c > @@ -0,0 +1,87 @@ > +/* > + * virmocklibxl.c: mocking of xenstore/libxs for libxl > + * > + * Copyright (C) 2014 Red Hat, Inc. > + * > + * This library is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2.1 of the License, or (at your option) any later version. > + * > + * This library is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this library. If not, see > + * <http://www.gnu.org/licenses/>. > + * > + * Author: Daniel P. Berrange <berrange@xxxxxxxxxx> > + */ > + > +#include <config.h> > + > +#if defined(WITH_LIBXL) && defined(WITH_YAJL) > +# include "virmock.h" > +# include <sys/stat.h> > +# include <unistd.h> > +# include <libxl.h> > +# include <xenstore.h> > +# include <xenctrl.h> > + > +VIR_MOCK_IMPL_RET_VOID(xs_daemon_open, > + struct xs_handle *) > +{ > + VIR_MOCK_REAL_INIT(xs_daemon_open); > + return (void*)0x1; > +} > + > +VIR_MOCK_IMPL_RET_ARGS(xc_interface_open, > + xc_interface *, > + xentoollog_logger *, logger, > + xentoollog_logger *, dombuild_logger, > + unsigned, open_flags) > +{ > + VIR_MOCK_REAL_INIT(xc_interface_open); > + return (void*)0x1; > +} > + > + > +VIR_MOCK_STUB_RET_ARGS(xc_interface_close, > + int, 0, > + xc_interface *, handle) > + > +VIR_MOCK_STUB_VOID_ARGS(xs_daemon_close, > + struct xs_handle *, handle) > + > +VIR_MOCK_IMPL_RET_ARGS(__xstat, int, > + int, ver, > + const char *, path, > + struct stat *, sb) > +{ > + VIR_MOCK_REAL_INIT(__xstat); > + > + if (strstr(path, "xenstored.pid")) { > + memset(sb, 0, sizeof(*sb)); > + return 0; > + } > + > + return real___xstat(ver, path, sb); > +} > + > +VIR_MOCK_IMPL_RET_ARGS(stat, int, > + const char *, path, > + struct stat *, sb) > +{ > + VIR_MOCK_REAL_INIT(stat); > + > + if (strstr(path, "xenstored.pid")) { > + memset(sb, 0, sizeof(*sb)); > + return 0; > + } > + > + return real_stat(path, sb); > +} > + > +#endif /* WITH_LIBXL && WITH_YAJL */ > > base-commit: ace45e67abbd9a033be54602db71a9dbc71408d7 > -- > git-series 0.9.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list