
2009/10/16 Cole Robinson <crobinso@redhat.com>:
Signed-off-by: Cole Robinson <crobinso@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.
+ 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