[libvirt] [PATCH 3/3] test: Support virNodeDeviceCreate and virNodeDeviceDestroy

Cole Robinson crobinso at redhat.com
Mon Oct 19 14:39:54 UTC 2009


On 10/17/2009 09:10 AM, Matthias Bolte wrote:
> 2009/10/16 Cole Robinson <crobinso at redhat.com>:
>>
>> Signed-off-by: Cole Robinson <crobinso at redhat.com>
>> ---
>> Â src/test/test_driver.c | Â 129 +++++++++++++++++++++++++++++++++++++++++++++++-
>> Â 1 files changed, 127 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/test/test_driver.c b/src/test/test_driver.c
>> index 0541a73..888bc9c 100644
>> --- a/src/test/test_driver.c
>> +++ b/src/test/test_driver.c
>> @@ -4376,6 +4376,131 @@ cleanup:
>> Â  Â  return ret;
>> Â }
>>
>> +static virNodeDevicePtr
>> +testNodeDeviceCreateXML(virConnectPtr conn,
>> + Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â const char *xmlDesc,
>> + Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â unsigned int flags ATTRIBUTE_UNUSED)
>> +{
>> + Â  Â testConnPtr driver = conn->privateData;
>> + Â  Â virNodeDeviceDefPtr def = NULL;
>> + Â  Â virNodeDeviceObjPtr obj = NULL;
>> + Â  Â char *wwnn = NULL, *wwpn = NULL;
>> + Â  Â int parent_host = -1;
>> + Â  Â virNodeDevicePtr dev = NULL;
>> + Â  Â virNodeDevCapsDefPtr caps;
>> +
>> + Â  Â testDriverLock(driver);
>> +
>> + Â  Â def = virNodeDeviceDefParseString(conn, xmlDesc, CREATE_DEVICE);
>> + Â  Â if (def == NULL) {
>> + Â  Â  Â  Â goto cleanup;
>> + Â  Â }
>> +
>> + Â  Â /* We run these next two simply for validation */
>> + Â  Â if (virNodeDeviceGetWWNs(conn, def, &wwnn, &wwpn) == -1) {
>> + Â  Â  Â  Â goto cleanup;
>> + Â  Â }
>> +
>> + Â  Â if (virNodeDeviceGetParentHost(conn,
>> + Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  &driver->devs,
>> + Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  def->name,
>> + Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  def->parent,
>> + Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  &parent_host) == -1) {
>> + Â  Â  Â  Â goto cleanup;
>> + Â  Â }
>> +
>> + Â  Â /* 'name' is supposed to be filled in by the node device backend, which
>> + Â  Â  * we don't have. Use WWPN instead. */
>> + Â  Â VIR_FREE(def->name);
>> + Â  Â if (!(def->name = strdup(wwpn))) {
>> + Â  Â  Â  Â virReportOOMError(dev->conn);
> 
> dev is NULL here, call virReportOOMError(conn) instead.

Whoops, yeah that's bad. Good catch!

Thanks,
Cole

> 
>> + Â  Â  Â  Â goto cleanup;
>> + Â  Â }
>> +
>> + Â  Â /* Fill in a random 'host' value, since this would also come from
>> + Â  Â  * the backend */
>> + Â  Â caps = def->caps;
>> + Â  Â while (caps) {
>> + Â  Â  Â  Â if (caps->type != VIR_NODE_DEV_CAP_SCSI_HOST)
>> + Â  Â  Â  Â  Â  Â continue;
>> +
>> + Â  Â  Â  Â caps->data.scsi_host.host = virRandom(1024);
>> + Â  Â  Â  Â caps = caps->next;
>> + Â  Â }
>> +
>> +
>> + Â  Â if (!(obj = virNodeDeviceAssignDef(conn, &driver->devs, def))) {
>> + Â  Â  Â  Â goto cleanup;
>> + Â  Â }
>> + Â  Â virNodeDeviceObjUnlock(obj);
>> +
>> + Â  Â dev = virGetNodeDevice(conn, def->name);
>> + Â  Â def = NULL;
>> +cleanup:
>> + Â  Â testDriverUnlock(driver);
>> + Â  Â if (def)
>> + Â  Â  Â  Â virNodeDeviceDefFree(def);
>> + Â  Â VIR_FREE(wwnn);
>> + Â  Â VIR_FREE(wwpn);
>> + Â  Â return dev;
>> +}
>> +
> 
> ACK
> 
> Matthias




More information about the libvir-list mailing list