There is no method to rename inactive domains for test driver.
After this patch, we can rename the domains using 'domrename'.
virsh# domrename test anothertest
Domain successfully renamed
Signed-off-by: Julio Faracco <jcfaracco(a)gmail.com>
---
src/test/test_driver.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 96 insertions(+)
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 8adc216..710fd5d 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -2618,6 +2618,101 @@ testDomainGetVcpuPinInfo(virDomainPtr dom,
return ret;
}
+static int
+testDomainRenameCallback(virDomainObjPtr privdom,
+ const char *new_name,
+ unsigned int flags,
+ void *opaque)
+{
+ testDriverPtr driver = opaque;
+ virObjectEventPtr event_new = NULL;
+ virObjectEventPtr event_old = NULL;
+ int ret = -1;
+ char *new_dom_name = NULL;
+ char *old_dom_name = NULL;
+
+ virCheckFlags(0, ret);
+
+ if (VIR_STRDUP(new_dom_name, new_name) < 0)
+ goto cleanup;
+
+ event_old = virDomainEventLifecycleNewFromObj(privdom,
+ VIR_DOMAIN_EVENT_UNDEFINED,
+ VIR_DOMAIN_EVENT_UNDEFINED_RENAMED);
+
+ /* Switch name in domain definition. */
+ old_dom_name = privdom->def->name;
+ privdom->def->name = new_dom_name;
+ new_dom_name = NULL;
+
+ event_new = virDomainEventLifecycleNewFromObj(privdom,
+ VIR_DOMAIN_EVENT_DEFINED,
+ VIR_DOMAIN_EVENT_DEFINED_RENAMED);
+ ret = 0;
+
+ cleanup:
+ VIR_FREE(old_dom_name);
+ VIR_FREE(new_dom_name);
+ testObjectEventQueue(driver, event_old);
+ testObjectEventQueue(driver, event_new);
+ return ret;
+}
+
+static int testDomainRename(virDomainPtr dom,
+ const char *new_name,
+ unsigned int flags)
+{
+ testDriverPtr driver = dom->conn->privateData;
+ virDomainObjPtr privdom = NULL;
+ int ret = -1;
+
+ virCheckFlags(0, -1);
+
+ if (!(privdom = testDomObjFromDomain(dom)))
+ goto cleanup;
+
+ if (virDomainObjIsActive(privdom)) {
+ virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("cannot rename active domain"));
+ goto cleanup;
+ }
+
+ if (!privdom->persistent) {
+ virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("cannot rename a transient domain"));
+ goto cleanup;
+ }
+
+ if (privdom->hasManagedSave) {
+ virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("domain with a managed saved state can't be
renamed"));
+ goto cleanup;
+ }
+
+ if (virDomainObjGetState(privdom, NULL) != VIR_DOMAIN_SHUTOFF) {
+ virReportError(VIR_ERR_OPERATION_INVALID,
+ "%s", _("domain has to be shutoff before
renaming"));
+ goto cleanup;
+ }
+
+ if (virDomainSnapshotObjListNum(privdom->snapshots, NULL, 0) > 0) {
+ virReportError(VIR_ERR_OPERATION_INVALID,
+ "%s", _("cannot rename domain with
snapshots"));
+ goto cleanup;
+ }
+
+ if (virDomainObjListRename(driver->domains, privdom, new_name, flags,
+ testDomainRenameCallback, driver) < 0)
+ goto cleanup;
+
+ /* Success, domain has been renamed. */
+ ret = 0;
+
+ cleanup:
+ virDomainObjEndAPI(&privdom);
+ return ret;
+}
+
static char *testDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
{
testDriverPtr privconn = domain->conn->privateData;
@@ -6825,6 +6920,7 @@ static virHypervisorDriver testHypervisorDriver = {
.connectDomainEventDeregisterAny = testConnectDomainEventDeregisterAny, /* 0.8.0 */
.connectIsAlive = testConnectIsAlive, /* 0.9.8 */
.nodeGetCPUMap = testNodeGetCPUMap, /* 1.0.0 */
+ .domainRename = testDomainRename, /* 4.0.0 */
.domainScreenshot = testDomainScreenshot, /* 1.0.5 */
.domainGetMetadata = testDomainGetMetadata, /* 1.1.3 */
.domainSetMetadata = testDomainSetMetadata, /* 1.1.3 */
--
2.7.4