mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-20 02:21:26 +00:00
qemuhotplugtest: Add tests for virtio disk hotplug
This commit is contained in:
parent
2618dc2a45
commit
2074574821
@ -73,7 +73,15 @@ qemuHotplugCreateObjects(virDomainXMLOptionPtr xmlopt,
|
||||
goto cleanup;
|
||||
|
||||
/* for attach & detach qemu must support -device */
|
||||
virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_DRIVE);
|
||||
virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_DEVICE);
|
||||
virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_NET_NAME);
|
||||
|
||||
if (qemuDomainAssignPCIAddresses((*vm)->def, priv->qemuCaps, *vm) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (qemuAssignDeviceAliases((*vm)->def, priv->qemuCaps) < 0)
|
||||
goto cleanup;
|
||||
|
||||
ret = 0;
|
||||
cleanup:
|
||||
@ -87,12 +95,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 +121,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 +269,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 +315,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 +332,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("none", "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 +375,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 +396,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);
|
||||
|
@ -50,7 +50,7 @@
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||
</controller>
|
||||
<controller type='pci' index='0' model='pci-root'>
|
||||
<alias name='pci0'/>
|
||||
<alias name='pci.0'/>
|
||||
</controller>
|
||||
<controller type='virtio-serial' index='0'>
|
||||
<alias name='virtio-serial0'/>
|
||||
|
7
tests/qemuhotplugtestdata/qemuhotplug-disk-virtio.xml
Normal file
7
tests/qemuhotplugtestdata/qemuhotplug-disk-virtio.xml
Normal file
@ -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>
|
@ -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>
|
@ -50,7 +50,7 @@
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||
</controller>
|
||||
<controller type='pci' index='0' model='pci-root'>
|
||||
<alias name='pci0'/>
|
||||
<alias name='pci.0'/>
|
||||
</controller>
|
||||
<controller type='virtio-serial' index='0'>
|
||||
<alias name='virtio-serial0'/>
|
||||
|
Loading…
x
Reference in New Issue
Block a user