[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[libvirt] [PATCH 09/17] qemuhotplugtest: Add tests for virtio disk hotplug



---
 tests/qemuhotplugtest.c                            | 44 ++++++++++++++++++---
 .../qemuhotplug-disk-virtio.xml                    |  7 ++++
 .../qemuhotplug-hotplug-base+disk-virtio.xml       | 46 ++++++++++++++++++++++
 3 files changed, 91 insertions(+), 6 deletions(-)
 create mode 100644 tests/qemuhotplugtestdata/qemuhotplug-disk-virtio.xml
 create mode 100644 tests/qemuhotplugtestdata/qemuhotplug-hotplug-base+disk-virtio.xml

diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c
index 4712334..bb047fe 100644
--- a/tests/qemuhotplugtest.c
+++ b/tests/qemuhotplugtest.c
@@ -75,6 +75,9 @@ qemuHotplugCreateObjects(virDomainXMLOptionPtr xmlopt,
     /* for attach & detach qemu must support -device */
     virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_DEVICE);
 
+    if (qemuDomainAssignPCIAddresses((*vm)->def, priv->qemuCaps, *vm) < 0)
+        goto cleanup;
+
     ret = 0;
 cleanup:
     return ret;
@@ -87,12 +90,14 @@ testQemuHotplugAttach(virDomainObjPtr vm,
     int ret = -1;
 
     switch (dev->type) {
+    case VIR_DOMAIN_DEVICE_DISK:
+        /* conn in only used for storage pool and secrets lookup so as long
+         * as we don't use any of them, passing NULL should be safe
+         */
+        ret = qemuDomainAttachDeviceDiskLive(NULL, &driver, vm, dev);
+        break;
     case VIR_DOMAIN_DEVICE_CHR:
         ret = qemuDomainAttachChrDevice(&driver, vm, dev->data.chr);
-        if (!ret) {
-            /* vm->def stolen dev->data.chr so we ought to avoid freeing it */
-            dev->data.chr = NULL;
-        }
         break;
     default:
         if (virTestGetVerbose())
@@ -111,6 +116,9 @@ testQemuHotplugDetach(virDomainObjPtr vm,
     int ret = -1;
 
     switch (dev->type) {
+    case VIR_DOMAIN_DEVICE_DISK:
+        ret = qemuDomainDetachDeviceDiskLive(&driver, vm, dev);
+        break;
     case VIR_DOMAIN_DEVICE_CHR:
         ret = qemuDomainDetachChrDevice(&driver, vm, dev->data.chr);
         break;
@@ -256,6 +264,11 @@ testQemuHotplug(const void *data)
     switch (test->action) {
     case ATTACH:
         ret = testQemuHotplugAttach(vm, dev);
+        if (ret == 0) {
+            /* vm->def stolen dev->data.* so we just need to free the dev
+             * envelope */
+            VIR_FREE(dev);
+        }
         if (ret == 0 || fail)
             ret = testQemuHotplugCheckResult(vm, result_xml, fail);
         break;
@@ -297,6 +310,7 @@ mymain(void)
 {
     int ret = 0;
     struct qemuHotplugTestData data = {0};
+    virSecurityManagerPtr mgr;
 
 #if !WITH_YAJL
     fputs("libvirt not compiled with yajl, skipping this test\n", stderr);
@@ -313,12 +327,22 @@ mymain(void)
     driver.config = virQEMUDriverConfigNew(false);
     VIR_FREE(driver.config->spiceListen);
     VIR_FREE(driver.config->vncListen);
+    /* some dummy values from 'config file' */
+    if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0)
+        return EXIT_FAILURE;
 
     if (!(driver.domainEventState = virDomainEventStateNew()))
         return EXIT_FAILURE;
 
-    /* some dummy values from 'config file' */
-    if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0)
+    driver.lockManager = virLockManagerPluginNew("nop", "qemu",
+                                                 driver.config->configBaseDir,
+                                                 0);
+    if (!driver.lockManager)
+        return EXIT_FAILURE;
+
+    if (!(mgr = virSecurityManagerNew(NULL, "qemu", false, false, false)))
+        return EXIT_FAILURE;
+    if (!(driver.securityManager = virSecurityManagerNewStack(mgr)))
         return EXIT_FAILURE;
 
 #define DO_TEST(file, ACTION, dev, fial, kep, ...)                          \
@@ -346,6 +370,7 @@ mymain(void)
 
 
 #define QMP_OK      "{\"return\": {}}"
+#define HMP(msg)    "{\"return\": \"" msg "\"}"
 
     DO_TEST_UPDATE("graphics-spice", "graphics-spice-nochange", false, false, NULL);
     DO_TEST_UPDATE("graphics-spice-timeout", "graphics-spice-timeout-nochange", false, false,
@@ -366,6 +391,13 @@ mymain(void)
                    "device_del", QMP_OK,
                    "chardev-remove", QMP_OK);
 
+    DO_TEST_ATTACH("hotplug-base", "disk-virtio", false, true,
+                   "human-monitor-command", HMP("OK\\r\\n"),
+                   "device_add", QMP_OK);
+    DO_TEST_DETACH("hotplug-base", "disk-virtio", false, false,
+                   "device_del", QMP_OK,
+                   "human-monitor-command", HMP(""));
+
     virObjectUnref(driver.caps);
     virObjectUnref(driver.xmlopt);
     virObjectUnref(driver.config);
diff --git a/tests/qemuhotplugtestdata/qemuhotplug-disk-virtio.xml b/tests/qemuhotplugtestdata/qemuhotplug-disk-virtio.xml
new file mode 100644
index 0000000..844dc79
--- /dev/null
+++ b/tests/qemuhotplugtestdata/qemuhotplug-disk-virtio.xml
@@ -0,0 +1,7 @@
+<disk type='file' device='disk'>
+  <driver name='qemu' type='raw' cache='none'/>
+  <source file='/dev/null'/>
+  <target dev='vde' bus='virtio'/>
+  <readonly/>
+  <shareable/>
+</disk>
diff --git a/tests/qemuhotplugtestdata/qemuhotplug-hotplug-base+disk-virtio.xml b/tests/qemuhotplugtestdata/qemuhotplug-hotplug-base+disk-virtio.xml
new file mode 100644
index 0000000..e96055c
--- /dev/null
+++ b/tests/qemuhotplugtestdata/qemuhotplug-hotplug-base+disk-virtio.xml
@@ -0,0 +1,46 @@
+<domain type='kvm'>
+  <name>hotplug</name>
+  <uuid>d091ea82-29e6-2e34-3005-f02617b36e87</uuid>
+  <memory unit='KiB'>4194304</memory>
+  <currentMemory unit='KiB'>4194304</currentMemory>
+  <vcpu placement='static'>4</vcpu>
+  <os>
+    <type arch='x86_64' machine='pc'>hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <features>
+    <acpi/>
+    <apic/>
+    <pae/>
+  </features>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>restart</on_crash>
+  <devices>
+    <emulator>/usr/libexec/qemu-kvm</emulator>
+    <disk type='file' device='disk'>
+      <driver name='qemu' type='raw' cache='none'/>
+      <source file='/dev/null'/>
+      <target dev='vde' bus='virtio'/>
+      <readonly/>
+      <shareable/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
+    </disk>
+    <controller type='usb' index='0'>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
+    </controller>
+    <controller type='ide' index='0'>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
+    </controller>
+    <controller type='scsi' index='0' model='virtio-scsi'>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+    </controller>
+    <controller type='pci' index='0' model='pci-root'/>
+    <controller type='virtio-serial' index='0'>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
+    </controller>
+    <memballoon model='none'/>
+  </devices>
+  <seclabel type='none'/>
+</domain>
-- 
1.8.3.2


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]