]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemuhotplugtest: Add support for DEVICE_DELETED event
authorJiri Denemark <jdenemar@redhat.com>
Fri, 26 Jul 2013 12:22:10 +0000 (14:22 +0200)
committerJiri Denemark <jdenemar@redhat.com>
Mon, 26 Aug 2013 14:09:55 +0000 (16:09 +0200)
tests/qemuhotplugtest.c
tests/qemumonitortestutils.c

index 6b71c9f0952edc785e12302f601e77e870ccbc24..7e1aaf48bd428a6d27f4ed885ab7b8dee204bac6 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "qemu/qemu_conf.h"
 #include "qemu/qemu_hotplug.h"
+#include "qemu/qemu_hotplugpriv.h"
 #include "qemumonitortestutils.h"
 #include "testutils.h"
 #include "testutilsqemu.h"
@@ -47,12 +48,14 @@ struct qemuHotplugTestData {
     int action;
     bool keep;
     virDomainObjPtr vm;
+    bool deviceDeletedEvent;
 };
 
 static int
 qemuHotplugCreateObjects(virDomainXMLOptionPtr xmlopt,
                          virDomainObjPtr *vm,
-                         const char *domxml)
+                         const char *domxml,
+                         bool event)
 {
     int ret = -1;
     qemuDomainObjPrivatePtr priv = NULL;
@@ -76,6 +79,8 @@ qemuHotplugCreateObjects(virDomainXMLOptionPtr xmlopt,
     virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_DRIVE);
     virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_DEVICE);
     virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_NET_NAME);
+    if (event)
+        virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_DEVICE_DEL_EVENT);
 
     if (qemuDomainAssignPCIAddresses((*vm)->def, priv->qemuCaps, *vm) < 0)
         goto cleanup;
@@ -232,7 +237,8 @@ testQemuHotplug(const void *data)
     if (test->vm) {
         vm = test->vm;
     } else {
-        if (qemuHotplugCreateObjects(driver.xmlopt, &vm, domain_xml) < 0)
+        if (qemuHotplugCreateObjects(driver.xmlopt, &vm, domain_xml,
+                                     test->deviceDeletedEvent) < 0)
             goto cleanup;
     }
 
@@ -350,7 +356,10 @@ mymain(void)
     if (!(driver.securityManager = virSecurityManagerNewStack(mgr)))
         return EXIT_FAILURE;
 
-#define DO_TEST(file, ACTION, dev, fial, kep, ...)                          \
+    /* wait only 100ms for DEVICE_DELETED event */
+    qemuDomainRemoveDeviceWaitTime = 100;
+
+#define DO_TEST(file, ACTION, dev, event, fial, kep, ...)                   \
     do {                                                                    \
         const char *my_mon[] = { __VA_ARGS__, NULL};                        \
         const char *name = file " " #ACTION " " dev;                        \
@@ -360,18 +369,25 @@ mymain(void)
         data.fail = fial;                                                   \
         data.mon = my_mon;                                                  \
         data.keep = kep;                                                    \
+        data.deviceDeletedEvent = event;                                    \
         if (virtTestRun(name, 1, testQemuHotplug, &data) < 0)               \
             ret = -1;                                                       \
     } while (0)
 
 #define DO_TEST_ATTACH(file, dev, fial, kep, ...)                           \
-    DO_TEST(file, ATTACH, dev, fial, kep, __VA_ARGS__)
+    DO_TEST(file, ATTACH, dev, false, fial, kep, __VA_ARGS__)
 
 #define DO_TEST_DETACH(file, dev, fial, kep, ...)                           \
-    DO_TEST(file, DETACH, dev, fial, kep, __VA_ARGS__)
+    DO_TEST(file, DETACH, dev, false, fial, kep, __VA_ARGS__)
+
+#define DO_TEST_ATTACH_EVENT(file, dev, fial, kep, ...)                     \
+    DO_TEST(file, ATTACH, dev, true, fial, kep, __VA_ARGS__)
+
+#define DO_TEST_DETACH_EVENT(file, dev, fial, kep, ...)                     \
+    DO_TEST(file, DETACH, dev, true, fial, kep, __VA_ARGS__)
 
 #define DO_TEST_UPDATE(file, dev, fial, kep, ...)                           \
-    DO_TEST(file, UPDATE, dev, fial, kep, __VA_ARGS__)
+    DO_TEST(file, UPDATE, dev, false, fial, kep, __VA_ARGS__)
 
 
 #define QMP_OK      "{\"return\": {}}"
index 20ccc106373a0d3ebce63e1581538ebaeda2f2ee..486d72ffb4d0748b46ab905664a5d90c5726b39e 100644 (file)
@@ -27,6 +27,7 @@
 #include "qemumonitortestutils.h"
 
 #include "virthread.h"
+#include "qemu/qemu_processpriv.h"
 #include "qemu/qemu_monitor.h"
 #include "qemu/qemu_agent.h"
 #include "rpc/virnetsocket.h"
@@ -725,6 +726,7 @@ qemuMonitorTestErrorNotify(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
 static qemuMonitorCallbacks qemuMonitorTestCallbacks = {
     .eofNotify = qemuMonitorTestEOFNotify,
     .errorNotify = qemuMonitorTestErrorNotify,
+    .domainDeviceDeleted = qemuProcessHandleDeviceDeleted,
 };