mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06: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;
|
goto cleanup;
|
||||||
|
|
||||||
/* for attach & detach qemu must support -device */
|
/* for attach & detach qemu must support -device */
|
||||||
|
virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_DRIVE);
|
||||||
virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_DEVICE);
|
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;
|
ret = 0;
|
||||||
cleanup:
|
cleanup:
|
||||||
@ -87,12 +95,14 @@ testQemuHotplugAttach(virDomainObjPtr vm,
|
|||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
switch (dev->type) {
|
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:
|
case VIR_DOMAIN_DEVICE_CHR:
|
||||||
ret = qemuDomainAttachChrDevice(&driver, vm, dev->data.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;
|
break;
|
||||||
default:
|
default:
|
||||||
if (virTestGetVerbose())
|
if (virTestGetVerbose())
|
||||||
@ -111,6 +121,9 @@ testQemuHotplugDetach(virDomainObjPtr vm,
|
|||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
switch (dev->type) {
|
switch (dev->type) {
|
||||||
|
case VIR_DOMAIN_DEVICE_DISK:
|
||||||
|
ret = qemuDomainDetachDeviceDiskLive(&driver, vm, dev);
|
||||||
|
break;
|
||||||
case VIR_DOMAIN_DEVICE_CHR:
|
case VIR_DOMAIN_DEVICE_CHR:
|
||||||
ret = qemuDomainDetachChrDevice(&driver, vm, dev->data.chr);
|
ret = qemuDomainDetachChrDevice(&driver, vm, dev->data.chr);
|
||||||
break;
|
break;
|
||||||
@ -256,6 +269,11 @@ testQemuHotplug(const void *data)
|
|||||||
switch (test->action) {
|
switch (test->action) {
|
||||||
case ATTACH:
|
case ATTACH:
|
||||||
ret = testQemuHotplugAttach(vm, dev);
|
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)
|
if (ret == 0 || fail)
|
||||||
ret = testQemuHotplugCheckResult(vm, result_xml, fail);
|
ret = testQemuHotplugCheckResult(vm, result_xml, fail);
|
||||||
break;
|
break;
|
||||||
@ -297,6 +315,7 @@ mymain(void)
|
|||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
struct qemuHotplugTestData data = {0};
|
struct qemuHotplugTestData data = {0};
|
||||||
|
virSecurityManagerPtr mgr;
|
||||||
|
|
||||||
#if !WITH_YAJL
|
#if !WITH_YAJL
|
||||||
fputs("libvirt not compiled with yajl, skipping this test\n", stderr);
|
fputs("libvirt not compiled with yajl, skipping this test\n", stderr);
|
||||||
@ -313,12 +332,22 @@ mymain(void)
|
|||||||
driver.config = virQEMUDriverConfigNew(false);
|
driver.config = virQEMUDriverConfigNew(false);
|
||||||
VIR_FREE(driver.config->spiceListen);
|
VIR_FREE(driver.config->spiceListen);
|
||||||
VIR_FREE(driver.config->vncListen);
|
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()))
|
if (!(driver.domainEventState = virDomainEventStateNew()))
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
|
||||||
/* some dummy values from 'config file' */
|
driver.lockManager = virLockManagerPluginNew("nop", "qemu",
|
||||||
if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0)
|
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;
|
return EXIT_FAILURE;
|
||||||
|
|
||||||
#define DO_TEST(file, ACTION, dev, fial, kep, ...) \
|
#define DO_TEST(file, ACTION, dev, fial, kep, ...) \
|
||||||
@ -346,6 +375,7 @@ mymain(void)
|
|||||||
|
|
||||||
|
|
||||||
#define QMP_OK "{\"return\": {}}"
|
#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", "graphics-spice-nochange", false, false, NULL);
|
||||||
DO_TEST_UPDATE("graphics-spice-timeout", "graphics-spice-timeout-nochange", false, false,
|
DO_TEST_UPDATE("graphics-spice-timeout", "graphics-spice-timeout-nochange", false, false,
|
||||||
@ -366,6 +396,13 @@ mymain(void)
|
|||||||
"device_del", QMP_OK,
|
"device_del", QMP_OK,
|
||||||
"chardev-remove", 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.caps);
|
||||||
virObjectUnref(driver.xmlopt);
|
virObjectUnref(driver.xmlopt);
|
||||||
virObjectUnref(driver.config);
|
virObjectUnref(driver.config);
|
||||||
|
@ -50,7 +50,7 @@
|
|||||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||||
</controller>
|
</controller>
|
||||||
<controller type='pci' index='0' model='pci-root'>
|
<controller type='pci' index='0' model='pci-root'>
|
||||||
<alias name='pci0'/>
|
<alias name='pci.0'/>
|
||||||
</controller>
|
</controller>
|
||||||
<controller type='virtio-serial' index='0'>
|
<controller type='virtio-serial' index='0'>
|
||||||
<alias name='virtio-serial0'/>
|
<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'/>
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||||
</controller>
|
</controller>
|
||||||
<controller type='pci' index='0' model='pci-root'>
|
<controller type='pci' index='0' model='pci-root'>
|
||||||
<alias name='pci0'/>
|
<alias name='pci.0'/>
|
||||||
</controller>
|
</controller>
|
||||||
<controller type='virtio-serial' index='0'>
|
<controller type='virtio-serial' index='0'>
|
||||||
<alias name='virtio-serial0'/>
|
<alias name='virtio-serial0'/>
|
||||||
|
Loading…
Reference in New Issue
Block a user