More generic functions, qemuDomainAttachDeviceLiveAndConfig
and qemuDomainDetachDeviceLiveAndConfig, are now used instead
of other functions in qemuhotplugtest to attach and detach devices.
This allows us to test attachments/detachments to the persistent
domain too. Previously, qemuhotplugtest worked only with live domains.
---
tests/qemuhotplugtest.c | 417 ++++++++++++++++++++++++++++--------------------
1 file changed, 242 insertions(+), 175 deletions(-)
diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c
index 0a5f068..13d2bdc 100644
--- a/tests/qemuhotplugtest.c
+++ b/tests/qemuhotplugtest.c
@@ -23,6 +23,7 @@
#include "qemu/qemu_conf.h"
#include "qemu/qemu_hotplug.h"
#include "qemu/qemu_hotplugpriv.h"
+#include "qemu/qemu_driverpriv.h"
#include "qemumonitortestutils.h"
#include "testutils.h"
#include "testutilsqemu.h"
@@ -52,13 +53,15 @@ struct qemuHotplugTestData {
bool keep;
virDomainObjPtr vm;
bool deviceDeletedEvent;
+ virDomainModificationImpact impact;
};
static int
qemuHotplugCreateObjects(virDomainXMLOptionPtr xmlopt,
virDomainObjPtr *vm,
const char *domxml,
- bool event, const char *testname)
+ bool event, const char *testname,
+ virDomainModificationImpact impact)
{
int ret = -1;
qemuDomainObjPrivatePtr priv = NULL;
@@ -93,7 +96,8 @@ qemuHotplugCreateObjects(virDomainXMLOptionPtr xmlopt,
if (qemuAssignDeviceAliases((*vm)->def, priv->qemuCaps) < 0)
goto cleanup;
- (*vm)->def->id = QEMU_HOTPLUG_TEST_DOMAIN_ID;
+ if (impact == VIR_DOMAIN_AFFECT_LIVE)
+ (*vm)->def->id = QEMU_HOTPLUG_TEST_DOMAIN_ID;
if (qemuDomainSetPrivatePaths(&driver, *vm) < 0)
goto cleanup;
@@ -105,19 +109,20 @@ qemuHotplugCreateObjects(virDomainXMLOptionPtr xmlopt,
static int
testQemuHotplugAttach(virDomainObjPtr vm,
- virDomainDeviceDefPtr dev)
+ virDomainDeviceDefPtr dev,
+ const char *device_xml,
+ virDomainModificationImpact impact)
{
int ret = -1;
switch (dev->type) {
case VIR_DOMAIN_DEVICE_DISK:
+ case VIR_DOMAIN_DEVICE_CHR:
/* 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);
+ ret = qemuDomainAttachDeviceLiveAndConfig(NULL, vm, &driver,
+ device_xml, impact);
break;
default:
VIR_TEST_VERBOSE("device type '%s' cannot be attached\n",
@@ -130,16 +135,17 @@ testQemuHotplugAttach(virDomainObjPtr vm,
static int
testQemuHotplugDetach(virDomainObjPtr vm,
- virDomainDeviceDefPtr dev)
+ virDomainDeviceDefPtr dev,
+ const char *device_xml,
+ virDomainModificationImpact impact)
{
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);
+ ret = qemuDomainDetachDeviceLiveAndConfig(&driver, vm,
+ device_xml, impact);
break;
default:
VIR_TEST_VERBOSE("device type '%s' cannot be detached\n",
@@ -178,16 +184,30 @@ static int
testQemuHotplugCheckResult(virDomainObjPtr vm,
const char *expected,
const char *expectedFile,
- bool fail)
+ bool fail,
+ virDomainModificationImpact impact)
{
- char *actual;
+ char *actual = NULL;
int ret;
- actual = virDomainDefFormat(vm->def, driver.caps,
- VIR_DOMAIN_DEF_FORMAT_SECURE);
+ switch (impact) {
+ case VIR_DOMAIN_AFFECT_LIVE:
+ actual = virDomainDefFormat(vm->def, driver.caps,
+ VIR_DOMAIN_DEF_FORMAT_SECURE);
+ vm->def->id = QEMU_HOTPLUG_TEST_DOMAIN_ID;
+ break;
+ case VIR_DOMAIN_AFFECT_CONFIG:
+ actual = virDomainDefFormat(vm->def, driver.caps,
+ VIR_DOMAIN_DEF_FORMAT_SECURE);
+ break;
+ case VIR_DOMAIN_AFFECT_CURRENT:
+ VIR_TEST_VERBOSE("Please specify either VIR_DOMAIN_AFFECT_LIVE or"
+ "VIR_DOMAIN_AFFECT_CONFIG");
+ break;
+ }
+
if (!actual)
return -1;
- vm->def->id = QEMU_HOTPLUG_TEST_DOMAIN_ID;
if (STREQ(expected, actual)) {
if (fail)
@@ -225,17 +245,35 @@ testQemuHotplug(const void *data)
virCapsPtr caps = NULL;
qemuMonitorTestPtr test_mon = NULL;
qemuDomainObjPrivatePtr priv = NULL;
+ virDomainModificationImpact impact = test->impact;
if (virAsprintf(&domain_filename,
"%s/qemuhotplugtestdomains/qemuhotplug-%s.xml",
abs_srcdir, test->domain_filename) < 0 ||
virAsprintf(&device_filename,
"%s/qemuhotplugtestdevices/qemuhotplug-%s.xml",
- abs_srcdir, test->device_filename) < 0 ||
- virAsprintf(&result_filename,
- "%s/qemuhotplugtestdomains/qemuhotplug-%s+%s.xml",
- abs_srcdir, test->domain_filename,
- test->device_filename) < 0)
+ abs_srcdir, test->device_filename) < 0)
goto cleanup;
+ switch (impact) {
+ case VIR_DOMAIN_AFFECT_LIVE:
+ if (virAsprintf(&result_filename,
+ "%s/qemuhotplugtestdomains/qemuhotplug-%s+%s.xml",
+ abs_srcdir, test->domain_filename,
+ test->device_filename) < 0)
+ goto cleanup;
+ break;
+ case VIR_DOMAIN_AFFECT_CONFIG:
+ if (virAsprintf(&result_filename,
+
"%s/qemuhotplugtestdomains/qemuhotplug-%s+%s+config.xml",
+ abs_srcdir, test->domain_filename,
+ test->device_filename) < 0)
+ goto cleanup;
+ break;
+ default:
+ VIR_TEST_VERBOSE("Impact can either be VIR_DOMAIN_AFFECT_LIVE"
+ " or VIR_DOMAIN_AFFECT_CONFIG\n");
+ goto cleanup;
+ }
+
if (virTestLoadFile(domain_filename, &domain_xml) < 0 ||
virTestLoadFile(device_filename, &device_xml) < 0)
goto cleanup;
@@ -252,7 +290,8 @@ testQemuHotplug(const void *data)
} else {
if (qemuHotplugCreateObjects(driver.xmlopt, &vm, domain_xml,
test->deviceDeletedEvent,
- test->domain_filename) < 0)
+ test->domain_filename,
+ impact) < 0)
goto cleanup;
}
@@ -292,22 +331,22 @@ testQemuHotplug(const void *data)
switch (test->action) {
case ATTACH:
- ret = testQemuHotplugAttach(vm, dev);
+ ret = testQemuHotplugAttach(vm, dev, device_xml, impact);
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,
- result_filename, fail);
+ ret = testQemuHotplugCheckResult(vm, result_xml, result_filename,
+ fail, impact);
break;
case DETACH:
- ret = testQemuHotplugDetach(vm, dev);
+ ret = testQemuHotplugDetach(vm, dev, device_xml, impact);
if (ret == 0 || fail)
- ret = testQemuHotplugCheckResult(vm, domain_xml,
- domain_filename, fail);
+ ret = testQemuHotplugCheckResult(vm, domain_xml, domain_filename,
+ fail, impact);
break;
case UPDATE:
@@ -371,7 +410,7 @@ mymain(void)
/* wait only 100ms for DEVICE_DELETED event */
qemuDomainRemoveDeviceWaitTime = 100;
-#define DO_TEST(file, ACTION, dev, event, fial, kep, ...) \
+#define DO_TEST(file, ACTION, dev, event, fial, kep, impct, ...) \
do { \
const char *my_mon[] = { __VA_ARGS__, NULL}; \
const char *name = file " " #ACTION " " dev;
\
@@ -382,28 +421,44 @@ mymain(void)
data.mon = my_mon; \
data.keep = kep; \
data.deviceDeletedEvent = event; \
+ data.impact = impct; \
if (virTestRun(name, testQemuHotplug, &data) < 0) \
ret = -1; \
} while (0)
-#define DO_TEST_ATTACH(file, dev, fial, kep, ...) \
- DO_TEST(file, ATTACH, dev, false, fial, kep, __VA_ARGS__)
+#define DO_TEST_ATTACH_LIVE(file, dev, fial, kep, ...) \
+ DO_TEST(file, ATTACH, dev, false, fial, kep, \
+ VIR_DOMAIN_AFFECT_LIVE, __VA_ARGS__)
+
+#define DO_TEST_DETACH_LIVE(file, dev, fial, kep, ...) \
+ DO_TEST(file, DETACH, dev, false, fial, kep, \
+ VIR_DOMAIN_AFFECT_LIVE, __VA_ARGS__)
+
+#define DO_TEST_ATTACH_EVENT_LIVE(file, dev, fial, kep, ...) \
+ DO_TEST(file, ATTACH, dev, true, fial, kep, \
+ VIR_DOMAIN_AFFECT_LIVE, __VA_ARGS__)
+
+#define DO_TEST_DETACH_EVENT_LIVE(file, dev, fial, kep, ...) \
+ DO_TEST(file, DETACH, dev, true, fial, kep, \
+ VIR_DOMAIN_AFFECT_LIVE, __VA_ARGS__)
-#define DO_TEST_DETACH(file, dev, fial, kep, ...) \
- DO_TEST(file, DETACH, dev, false, fial, kep, __VA_ARGS__)
+#define DO_TEST_UPDATE_LIVE(file, dev, fial, kep, ...) \
+ DO_TEST(file, UPDATE, dev, false, fial, kep, \
+ VIR_DOMAIN_AFFECT_LIVE, __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_ATTACH_CONFIG(file, dev, fial, kep, ...) \
+ DO_TEST(file, ATTACH, dev, false, fial, kep, \
+ VIR_DOMAIN_AFFECT_CONFIG, __VA_ARGS__)
-#define DO_TEST_UPDATE(file, dev, fial, kep, ...) \
- DO_TEST(file, UPDATE, dev, false, fial, kep, __VA_ARGS__)
+#define DO_TEST_DETACH_CONFIG(file, dev, fial, kep, ...) \
+ DO_TEST(file, DETACH, dev, false, fial, kep, \
+ VIR_DOMAIN_AFFECT_CONFIG, __VA_ARGS__)
#define QMP_OK "{\"return\": {}}"
#define HMP(msg) "{\"return\": \"" msg "\"}"
+#define QOM_OK "{ \"return\": []}"
#define QMP_DEVICE_DELETED(dev) \
"{" \
@@ -418,147 +473,159 @@ mymain(void)
" }" \
"}\r\n"
- DO_TEST_UPDATE("graphics-spice", "graphics-spice-nochange",
false, false, NULL);
- DO_TEST_UPDATE("graphics-spice-timeout",
"graphics-spice-timeout-nochange", false, false,
- "set_password", QMP_OK, "expire_password",
QMP_OK);
- DO_TEST_UPDATE("graphics-spice-timeout",
"graphics-spice-timeout-password", false, false,
- "set_password", QMP_OK, "expire_password",
QMP_OK);
- DO_TEST_UPDATE("graphics-spice", "graphics-spice-listen", true,
false, NULL);
- DO_TEST_UPDATE("graphics-spice-listen-network",
"graphics-spice-listen-network-password", false, false,
- "set_password", QMP_OK, "expire_password",
QMP_OK);
+ DO_TEST_UPDATE_LIVE("graphics-spice", "graphics-spice-nochange",
false, false, NULL);
+ DO_TEST_UPDATE_LIVE("graphics-spice-timeout",
"graphics-spice-timeout-nochange", false, false,
+ "set_password", QMP_OK, "expire_password",
QMP_OK);
+ DO_TEST_UPDATE_LIVE("graphics-spice-timeout",
"graphics-spice-timeout-password", false, false,
+ "set_password", QMP_OK, "expire_password",
QMP_OK);
+ DO_TEST_UPDATE_LIVE("graphics-spice", "graphics-spice-listen",
true, false, NULL);
+ DO_TEST_UPDATE_LIVE("graphics-spice-listen-network",
"graphics-spice-listen-network-password", false, false,
+ "set_password", QMP_OK, "expire_password",
QMP_OK);
/* Strange huh? Currently, only graphics can be updated :-P */
- DO_TEST_UPDATE("disk-cdrom", "disk-cdrom-nochange", true, false,
NULL);
-
- DO_TEST_ATTACH("console-compat-2-live", "console-virtio", false,
true,
- "chardev-add", "{\"return\":
{\"pty\": \"/dev/pts/26\"}}",
- "device_add", QMP_OK);
-
- DO_TEST_DETACH("console-compat-2-live", "console-virtio", false,
false,
- "device_del", QMP_OK,
- "chardev-remove", QMP_OK);
-
- DO_TEST_ATTACH("base-live", "disk-virtio", false, true,
- "human-monitor-command", HMP("OK\\r\\n"),
- "device_add", QMP_OK);
- DO_TEST_DETACH("base-live", "disk-virtio", false, false,
- "device_del", QMP_OK,
- "human-monitor-command", HMP(""));
-
- DO_TEST_ATTACH_EVENT("base-live", "disk-virtio", false, true,
- "human-monitor-command", HMP("OK\\r\\n"),
- "device_add", QMP_OK);
- DO_TEST_DETACH("base-live", "disk-virtio", true, true,
- "device_del", QMP_OK,
- "human-monitor-command", HMP(""));
- DO_TEST_DETACH("base-live", "disk-virtio", false, false,
- "device_del", QMP_DEVICE_DELETED("virtio-disk4")
QMP_OK,
- "human-monitor-command", HMP(""));
-
- DO_TEST_ATTACH("base-live", "disk-usb", false, true,
- "human-monitor-command", HMP("OK\\r\\n"),
- "device_add", QMP_OK);
- DO_TEST_DETACH("base-live", "disk-usb", false, false,
- "device_del", QMP_OK,
- "human-monitor-command", HMP(""));
-
- DO_TEST_ATTACH_EVENT("base-live", "disk-usb", false, true,
- "human-monitor-command", HMP("OK\\r\\n"),
- "device_add", QMP_OK);
- DO_TEST_DETACH("base-live", "disk-usb", true, true,
- "device_del", QMP_OK,
- "human-monitor-command", HMP(""));
- DO_TEST_DETACH("base-live", "disk-usb", false, false,
- "device_del", QMP_DEVICE_DELETED("usb-disk16")
QMP_OK,
- "human-monitor-command", HMP(""));
-
- DO_TEST_ATTACH("base-live", "disk-scsi", false, true,
- "human-monitor-command", HMP("OK\\r\\n"),
- "device_add", QMP_OK);
- DO_TEST_DETACH("base-live", "disk-scsi", false, false,
- "device_del", QMP_OK,
- "human-monitor-command", HMP(""));
-
- DO_TEST_ATTACH_EVENT("base-live", "disk-scsi", false, true,
- "human-monitor-command", HMP("OK\\r\\n"),
- "device_add", QMP_OK);
- DO_TEST_DETACH("base-live", "disk-scsi", true, true,
- "device_del", QMP_OK,
- "human-monitor-command", HMP(""));
- DO_TEST_DETACH("base-live", "disk-scsi", false, false,
- "device_del", QMP_DEVICE_DELETED("scsi0-0-0-5")
QMP_OK,
- "human-monitor-command", HMP(""));
-
- DO_TEST_ATTACH("base-without-scsi-controller-live",
"disk-scsi-2", false, true,
- /* Four controllers added */
- "device_add", QMP_OK,
- "device_add", QMP_OK,
- "device_add", QMP_OK,
- "device_add", QMP_OK,
- "human-monitor-command", HMP("OK\\r\\n"),
- /* Disk added */
- "device_add", QMP_OK);
- DO_TEST_DETACH("base-with-scsi-controller-live", "disk-scsi-2",
false, false,
- "device_del", QMP_OK,
- "human-monitor-command", HMP(""));
-
- DO_TEST_ATTACH_EVENT("base-without-scsi-controller-live",
"disk-scsi-2", false, true,
- /* Four controllers added */
- "device_add", QMP_OK,
- "device_add", QMP_OK,
- "device_add", QMP_OK,
- "device_add", QMP_OK,
- "human-monitor-command", HMP("OK\\r\\n"),
- /* Disk added */
- "device_add", QMP_OK);
- DO_TEST_DETACH("base-with-scsi-controller-live", "disk-scsi-2",
true, true,
- "device_del", QMP_OK,
- "human-monitor-command", HMP(""));
- DO_TEST_DETACH("base-with-scsi-controller-live", "disk-scsi-2",
false, false,
- "device_del", QMP_DEVICE_DELETED("scsi3-0-5-7")
QMP_OK,
- "human-monitor-command", HMP(""));
-
- DO_TEST_ATTACH("base-live", "qemu-agent", false, true,
- "chardev-add", QMP_OK,
- "device_add", QMP_OK);
- DO_TEST_DETACH("base-live", "qemu-agent-detach", false, false,
- "device_del", QMP_OK,
- "chardev-remove", QMP_OK);
-
- DO_TEST_ATTACH("base-ccw-live", "ccw-virtio", false, true,
- "human-monitor-command", HMP("OK\\r\\n"),
- "device_add", QMP_OK);
- DO_TEST_DETACH("base-ccw-live", "ccw-virtio", false, false,
- "device_del", QMP_OK,
- "human-monitor-command", HMP(""));
-
- DO_TEST_ATTACH("base-ccw-live-with-ccw-virtio", "ccw-virtio-2",
false, true,
- "human-monitor-command", HMP("OK\\r\\n"),
- "device_add", QMP_OK);
-
- DO_TEST_DETACH("base-ccw-live-with-ccw-virtio", "ccw-virtio-2",
false, false,
- "device_del", QMP_OK,
- "human-monitor-command", HMP(""));
-
- DO_TEST_ATTACH("base-ccw-live-with-ccw-virtio",
"ccw-virtio-2-explicit", false, true,
- "human-monitor-command", HMP("OK\\r\\n"),
- "device_add", QMP_OK);
-
- DO_TEST_DETACH("base-ccw-live-with-ccw-virtio",
"ccw-virtio-2-explicit", false, false,
- "device_del", QMP_OK,
- "human-monitor-command", HMP(""));
+ DO_TEST_UPDATE_LIVE("disk-cdrom", "disk-cdrom-nochange", true,
false, NULL);
+
+ DO_TEST_ATTACH_LIVE("console-compat-2-live", "console-virtio",
false, true,
+ "chardev-add", "{\"return\":
{\"pty\": \"/dev/pts/26\"}}",
+ "device_add", QMP_OK);
+
+ DO_TEST_DETACH_LIVE("console-compat-2-live", "console-virtio",
false, false,
+ "device_del", QMP_OK,
+ "chardev-remove", QMP_OK);
+
+ DO_TEST_ATTACH_LIVE("base-live", "disk-virtio", false, true,
+ "human-monitor-command", HMP("OK\\r\\n"),
+ "device_add", QMP_OK);
+ DO_TEST_DETACH_LIVE("base-live", "disk-virtio", false, false,
+ "device_del", QMP_OK,
+ "human-monitor-command", HMP(""));
+
+ DO_TEST_ATTACH_EVENT_LIVE("base-live", "disk-virtio", false,
true,
+ "human-monitor-command",
HMP("OK\\r\\n"),
+ "device_add", QMP_OK,
+ "qom-list", QOM_OK);
+ DO_TEST_DETACH_LIVE("base-live", "disk-virtio", true, true,
+ "device_del", QMP_OK,
+ "qom-list", QOM_OK,
+ "human-monitor-command", HMP(""));
+ DO_TEST_DETACH_LIVE("base-live", "disk-virtio", false, false,
+ "device_del",
QMP_DEVICE_DELETED("virtio-disk4") QMP_OK,
+ "human-monitor-command", HMP(""),
+ "qom-list", QOM_OK);
+
+ DO_TEST_ATTACH_LIVE("base-live", "disk-usb", false, true,
+ "human-monitor-command", HMP("OK\\r\\n"),
+ "device_add", QMP_OK);
+ DO_TEST_DETACH_LIVE("base-live", "disk-usb", false, false,
+ "device_del", QMP_OK,
+ "human-monitor-command", HMP(""));
+
+ DO_TEST_ATTACH_EVENT_LIVE("base-live", "disk-usb", false, true,
+ "human-monitor-command",
HMP("OK\\r\\n"),
+ "device_add", QMP_OK,
+ "qom-list", QOM_OK);
+ DO_TEST_DETACH_LIVE("base-live", "disk-usb", true, true,
+ "device_del", QMP_OK,
+ "qom-list", QOM_OK,
+ "human-monitor-command", HMP(""));
+ DO_TEST_DETACH_LIVE("base-live", "disk-usb", false, false,
+ "device_del",
QMP_DEVICE_DELETED("usb-disk16") QMP_OK,
+ "human-monitor-command", HMP(""),
+ "qom-list", QOM_OK);
+
+ DO_TEST_ATTACH_LIVE("base-live", "disk-scsi", false, true,
+ "human-monitor-command", HMP("OK\\r\\n"),
+ "device_add", QMP_OK);
+ DO_TEST_DETACH_LIVE("base-live", "disk-scsi", false, false,
+ "device_del", QMP_OK,
+ "human-monitor-command", HMP(""));
+
+ DO_TEST_ATTACH_EVENT_LIVE("base-live", "disk-scsi", false, true,
+ "human-monitor-command",
HMP("OK\\r\\n"),
+ "device_add", QMP_OK,
+ "qom-list", QOM_OK);
+ DO_TEST_DETACH_LIVE("base-live", "disk-scsi", true, true,
+ "device_del", QMP_OK,
+ "qom-list", QOM_OK,
+ "human-monitor-command", HMP(""));
+ DO_TEST_DETACH_LIVE("base-live", "disk-scsi", false, false,
+ "device_del",
QMP_DEVICE_DELETED("scsi0-0-0-5") QMP_OK,
+ "human-monitor-command", HMP(""),
+ "qom-list", QOM_OK);
+
+ DO_TEST_ATTACH_LIVE("base-without-scsi-controller-live",
"disk-scsi-2", false, true,
+ /* Four controllers added */
+ "device_add", QMP_OK,
+ "device_add", QMP_OK,
+ "device_add", QMP_OK,
+ "device_add", QMP_OK,
+ "human-monitor-command", HMP("OK\\r\\n"),
+ /* Disk added */
+ "device_add", QMP_OK);
+ DO_TEST_DETACH_LIVE("base-with-scsi-controller-live",
"disk-scsi-2", false, false,
+ "device_del", QMP_OK,
+ "human-monitor-command", HMP(""));
+
+ DO_TEST_ATTACH_EVENT_LIVE("base-without-scsi-controller-live",
"disk-scsi-2", false, true,
+ /* Four controllers added */
+ "device_add", QMP_OK,
+ "device_add", QMP_OK,
+ "device_add", QMP_OK,
+ "device_add", QMP_OK,
+ "human-monitor-command",
HMP("OK\\r\\n"),
+ /* Disk added */
+ "device_add", QMP_OK,
+ "qom-list", QOM_OK);
+ DO_TEST_DETACH_LIVE("base-with-scsi-controller-live",
"disk-scsi-2", true, true,
+ "device_del", QMP_OK,
+ "qom-list", QOM_OK,
+ "human-monitor-command", HMP(""));
+ DO_TEST_DETACH_LIVE("base-with-scsi-controller-live",
"disk-scsi-2", false, false,
+ "device_del",
QMP_DEVICE_DELETED("scsi3-0-5-7") QMP_OK,
+ "human-monitor-command", HMP(""),
+ "qom-list", QOM_OK);
+
+ DO_TEST_ATTACH_LIVE("base-live", "qemu-agent", false, true,
+ "chardev-add", QMP_OK,
+ "device_add", QMP_OK);
+ DO_TEST_DETACH_LIVE("base-live", "qemu-agent-detach", false,
false,
+ "device_del", QMP_OK,
+ "chardev-remove", QMP_OK);
+
+ DO_TEST_ATTACH_LIVE("base-ccw-live", "ccw-virtio", false, true,
+ "human-monitor-command", HMP("OK\\r\\n"),
+ "device_add", QMP_OK);
+ DO_TEST_DETACH_LIVE("base-ccw-live", "ccw-virtio", false, false,
+ "device_del", QMP_OK,
+ "human-monitor-command", HMP(""));
+
+ DO_TEST_ATTACH_LIVE("base-ccw-live-with-ccw-virtio",
"ccw-virtio-2", false, true,
+ "human-monitor-command", HMP("OK\\r\\n"),
+ "device_add", QMP_OK);
+
+ DO_TEST_DETACH_LIVE("base-ccw-live-with-ccw-virtio",
"ccw-virtio-2", false, false,
+ "device_del", QMP_OK,
+ "human-monitor-command", HMP(""));
+
+ DO_TEST_ATTACH_LIVE("base-ccw-live-with-ccw-virtio",
"ccw-virtio-2-explicit", false, true,
+ "human-monitor-command", HMP("OK\\r\\n"),
+ "device_add", QMP_OK);
+
+ DO_TEST_DETACH_LIVE("base-ccw-live-with-ccw-virtio",
"ccw-virtio-2-explicit", false, false,
+ "device_del", QMP_OK,
+ "human-monitor-command", HMP(""));
/* Attach a second device, then detach the first one. Then attach the first one
again. */
- DO_TEST_ATTACH("base-ccw-live-with-ccw-virtio",
"ccw-virtio-2-explicit", false, true,
- "human-monitor-command", HMP("OK\\r\\n"),
- "device_add", QMP_OK);
+ DO_TEST_ATTACH_LIVE("base-ccw-live-with-ccw-virtio",
"ccw-virtio-2-explicit", false, true,
+ "human-monitor-command", HMP("OK\\r\\n"),
+ "device_add", QMP_OK);
- DO_TEST_DETACH("base-ccw-live-with-2-ccw-virtio",
"ccw-virtio-1-explicit", false, true,
- "device_del", QMP_OK,
- "human-monitor-command", HMP(""));
+ DO_TEST_DETACH_LIVE("base-ccw-live-with-2-ccw-virtio",
"ccw-virtio-1-explicit", false, true,
+ "device_del", QMP_OK,
+ "human-monitor-command", HMP(""));
- DO_TEST_ATTACH("base-ccw-live-with-2-ccw-virtio",
"ccw-virtio-1-reverse", false, false,
- "human-monitor-command", HMP("OK\\r\\n"),
- "device_add", QMP_OK);
+ DO_TEST_ATTACH_LIVE("base-ccw-live-with-2-ccw-virtio",
"ccw-virtio-1-reverse", false, false,
+ "human-monitor-command", HMP("OK\\r\\n"),
+ "device_add", QMP_OK);
qemuTestDriverFree(&driver);
return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
--
1.9.1