[libvirt] [PATCH v2 6/7] tests: qemu: Add test case for pci-hostdev hotplug
Michal Privoznik
mprivozn at redhat.com
Fri Aug 16 12:43:54 UTC 2019
On 7/25/19 8:09 PM, Daniel Henrique Barboza wrote:
> From: Shivaprasad G Bhat <sbhat at linux.vnet.ibm.com>
>
> Signed-off-by: Shivaprasad G Bhat <sbhat at linux.vnet.ibm.com>
> Signed-off-by: Daniel Henrique Barboza <danielhb413 at gmail.com>
> ---
> src/util/virprocess.h | 2 +-
> tests/Makefile.am | 7 +++
> tests/qemuhotplugtest.c | 42 +++++++++++++-
> .../qemuhotplug-hostdev-pci.xml | 6 ++
> .../qemuhotplug-base-live+hostdev-pci.xml | 58 +++++++++++++++++++
> ...uhotplug-pseries-base-live+hostdev-pci.xml | 51 ++++++++++++++++
> .../qemuhotplug-pseries-base-live.xml | 43 ++++++++++++++
> tests/virprocessmock.c | 28 +++++++++
> 8 files changed, 235 insertions(+), 2 deletions(-)
> create mode 100644 tests/qemuhotplugtestdevices/qemuhotplug-hostdev-pci.xml
> create mode 100644 tests/qemuhotplugtestdomains/qemuhotplug-base-live+hostdev-pci.xml
> create mode 100644 tests/qemuhotplugtestdomains/qemuhotplug-pseries-base-live+hostdev-pci.xml
> create mode 100644 tests/qemuhotplugtestdomains/qemuhotplug-pseries-base-live.xml
> create mode 100644 tests/virprocessmock.c
>
> diff --git a/src/util/virprocess.h b/src/util/virprocess.h
> index 003ba1edf4..4806c592da 100644
> --- a/src/util/virprocess.h
> +++ b/src/util/virprocess.h
> @@ -75,7 +75,7 @@ int virProcessGetNamespaces(pid_t pid,
> int virProcessSetNamespaces(size_t nfdlist,
> int *fdlist);
>
> -int virProcessSetMaxMemLock(pid_t pid, unsigned long long bytes);
> +int virProcessSetMaxMemLock(pid_t pid, unsigned long long bytes) ATTRIBUTE_NOINLINE;
> int virProcessSetMaxProcesses(pid_t pid, unsigned int procs);
> int virProcessSetMaxFiles(pid_t pid, unsigned int files);
> int virProcessSetMaxCoreSize(pid_t pid, unsigned long long bytes);
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index f480e68e7d..66d249a0cc 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -210,6 +210,7 @@ test_libraries = libshunload.la \
> virpcimock.la \
> virnetdevmock.la \
> virrandommock.la \
> + virprocessmock.la \
> virhostcpumock.la \
> domaincapsmock.la \
> virfilecachemock.la \
> @@ -1182,6 +1183,12 @@ virrandommock_la_SOURCES = \
> virrandommock_la_LDFLAGS = $(MOCKLIBS_LDFLAGS)
> virrandommock_la_LIBADD = $(MOCKLIBS_LIBS)
>
> +virprocessmock_la_SOURCES = \
> + virprocessmock.c
> +virprocessmock_la_CFLAGS = $(AM_CFLAGS)
> +virprocessmock_la_LDFLAGS = $(MOCKLIBS_LDFLAGS)
> +virprocessmock_la_LIBADD = $(MOCKLIBS_LIBS)
> +
> virhostcpumock_la_SOURCES = \
> virhostcpumock.c
> virhostcpumock_la_LDFLAGS = $(MOCKLIBS_LDFLAGS)
> diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c
> index 354068d748..bf95bfb4a7 100644
> --- a/tests/qemuhotplugtest.c
> +++ b/tests/qemuhotplugtest.c
> @@ -28,6 +28,7 @@
> #include "testutils.h"
> #include "testutilsqemu.h"
> #include "testutilsqemuschema.h"
> +#include "virhostdev.h"
> #include "virerror.h"
> #include "virstring.h"
> #include "virthread.h"
> @@ -79,6 +80,8 @@ qemuHotplugCreateObjects(virDomainXMLOptionPtr xmlopt,
> virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_DEVICE_IVSHMEM_PLAIN);
> virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
> virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_SCSI_DISK_WWN);
> + virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_DEVICE_VFIO_PCI);
> + virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
>
> if (qemuTestCapsCacheInsert(driver.qemuCapsCache, priv->qemuCaps) < 0)
> goto cleanup;
> @@ -130,6 +133,9 @@ testQemuHotplugAttach(virDomainObjPtr vm,
> case VIR_DOMAIN_DEVICE_WATCHDOG:
> ret = qemuDomainAttachWatchdog(&driver, vm, dev->data.watchdog);
> break;
> + case VIR_DOMAIN_DEVICE_HOSTDEV:
> + ret = qemuDomainAttachHostDevice(&driver, vm, dev->data.hostdev);
> + break;
> default:
> VIR_TEST_VERBOSE("device type '%s' cannot be attached\n",
> virDomainDeviceTypeToString(dev->type));
> @@ -151,6 +157,7 @@ testQemuHotplugDetach(virDomainObjPtr vm,
> case VIR_DOMAIN_DEVICE_CHR:
> case VIR_DOMAIN_DEVICE_SHMEM:
> case VIR_DOMAIN_DEVICE_WATCHDOG:
> + case VIR_DOMAIN_DEVICE_HOSTDEV:
> ret = qemuDomainDetachDeviceLive(vm, dev, &driver, async);
> break;
> default:
> @@ -578,6 +585,7 @@ testQemuHotplugCpuIndividual(const void *opaque)
> return ret;
> }
>
> +#define FAKEROOTDIRTEMPLATE abs_builddir "/fakerootdir-XXXXXX"
>
>
> static int
> @@ -587,6 +595,21 @@ mymain(void)
> int ret = 0;
> struct qemuHotplugTestData data = {0};
> struct testQemuHotplugCpuParams cpudata;
> + char *fakerootdir;
> +
> + if (VIR_STRDUP_QUIET(fakerootdir, FAKEROOTDIRTEMPLATE) < 0) {
> + fprintf(stderr, "Out of memory\n");
> + abort();
> + }
> +
> + if (!mkdtemp(fakerootdir)) {
> + fprintf(stderr, "Cannot create fakerootdir");
> + abort();
> + }
> +
> + setenv("LIBVIRT_FAKE_ROOT_DIR", fakerootdir, 1);
> + unsetenv("LD_PRELOAD");
This unsetenv is not necessary, isn't it?
Reviewed-by: Michal Privoznik <mprivozn at redhat.com>
Michal
More information about the libvir-list
mailing list