mirror of https://gitee.com/openkylin/libvirt.git
qemuagenttest: Introduce testing of shutdown commands
This patch exports a few utility functions and adds testing of shutdown commands of the guest agent.
This commit is contained in:
parent
f3a9391bec
commit
fea2590a02
|
@ -207,6 +207,124 @@ cleanup:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct qemuAgentShutdownTestData {
|
||||||
|
const char *mode;
|
||||||
|
qemuAgentEvent event;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
qemuAgentShutdownTestMonitorHandler(qemuMonitorTestPtr test,
|
||||||
|
qemuMonitorTestItemPtr item,
|
||||||
|
const char *cmdstr)
|
||||||
|
{
|
||||||
|
struct qemuAgentShutdownTestData *data;
|
||||||
|
virJSONValuePtr val = NULL;
|
||||||
|
virJSONValuePtr args;
|
||||||
|
const char *cmdname;
|
||||||
|
const char *mode;
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
data = qemuMonitorTestItemGetPrivateData(item);
|
||||||
|
|
||||||
|
if (!(val = virJSONValueFromString(cmdstr)))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (!(cmdname = virJSONValueObjectGetString(val, "execute"))) {
|
||||||
|
ret = qemuMonitorReportError(test, "Missing command name in %s", cmdstr);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (STRNEQ(cmdname, "guest-shutdown")) {
|
||||||
|
ret = qemuMonitorTestAddUnexpectedErrorResponse(test);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(args = virJSONValueObjectGet(val, "arguments"))) {
|
||||||
|
ret = qemuMonitorReportError(test,
|
||||||
|
"Missing arguments section");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(mode = virJSONValueObjectGetString(args, "mode"))) {
|
||||||
|
ret = qemuMonitorReportError(test, "Missing shutdown mode");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* now don't reply but return a qemu agent event */
|
||||||
|
qemuAgentNotifyEvent(qemuMonitorTestGetAgent(test),
|
||||||
|
data->event);
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
virJSONValueFree(val);
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
testQemuAgentShutdown(const void *data)
|
||||||
|
{
|
||||||
|
virDomainXMLOptionPtr xmlopt = (virDomainXMLOptionPtr)data;
|
||||||
|
qemuMonitorTestPtr test = qemuMonitorTestNewAgent(xmlopt);
|
||||||
|
struct qemuAgentShutdownTestData priv;
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
if (!test)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (qemuMonitorTestAddAgentSyncResponse(test) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
priv.event = QEMU_AGENT_EVENT_SHUTDOWN;
|
||||||
|
priv.mode = "shutdown";
|
||||||
|
|
||||||
|
if (qemuMonitorTestAddHandler(test, qemuAgentShutdownTestMonitorHandler,
|
||||||
|
&priv, NULL) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (qemuAgentShutdown(qemuMonitorTestGetAgent(test),
|
||||||
|
QEMU_AGENT_SHUTDOWN_HALT) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (qemuMonitorTestAddAgentSyncResponse(test) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
priv.event = QEMU_AGENT_EVENT_SHUTDOWN;
|
||||||
|
priv.mode = "powerdown";
|
||||||
|
|
||||||
|
if (qemuMonitorTestAddHandler(test, qemuAgentShutdownTestMonitorHandler,
|
||||||
|
&priv, NULL) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (qemuAgentShutdown(qemuMonitorTestGetAgent(test),
|
||||||
|
QEMU_AGENT_SHUTDOWN_POWERDOWN) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (qemuMonitorTestAddAgentSyncResponse(test) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
priv.event = QEMU_AGENT_EVENT_RESET;
|
||||||
|
priv.mode = "reboot";
|
||||||
|
|
||||||
|
if (qemuMonitorTestAddHandler(test, qemuAgentShutdownTestMonitorHandler,
|
||||||
|
&priv, NULL) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (qemuAgentShutdown(qemuMonitorTestGetAgent(test),
|
||||||
|
QEMU_AGENT_SHUTDOWN_REBOOT) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
qemuMonitorTestFree(test);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
mymain(void)
|
mymain(void)
|
||||||
{
|
{
|
||||||
|
@ -232,6 +350,7 @@ mymain(void)
|
||||||
DO_TEST(FSThaw);
|
DO_TEST(FSThaw);
|
||||||
DO_TEST(FSTrim);
|
DO_TEST(FSTrim);
|
||||||
DO_TEST(Suspend);
|
DO_TEST(Suspend);
|
||||||
|
DO_TEST(Shutdown);
|
||||||
|
|
||||||
virObjectUnref(xmlopt);
|
virObjectUnref(xmlopt);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue