Add test cases for qemuAgentGetFSInfo, with a sample agent response for
the qemu-get-fsinfo command and a configuration xml.
Signed-off-by: Tomoki Sekiyama <tomoki.sekiyama(a)hds.com>
---
tests/Makefile.am | 1
tests/qemuagentdata/qemuagent-fsinfo.xml | 39 ++++++++
tests/qemuagenttest.c | 143 ++++++++++++++++++++++++++++++
3 files changed, 183 insertions(+)
create mode 100644 tests/qemuagentdata/qemuagent-fsinfo.xml
diff --git a/tests/Makefile.am b/tests/Makefile.am
index a3e3ab3..e9418ea 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -103,6 +103,7 @@ EXTRA_DIST = \
nwfilterxml2xmlin \
nwfilterxml2xmlout \
oomtrace.pl \
+ qemuagentdata \
qemucapabilitiesdata \
qemucaps2xmldata \
qemuhelpdata \
diff --git a/tests/qemuagentdata/qemuagent-fsinfo.xml
b/tests/qemuagentdata/qemuagent-fsinfo.xml
new file mode 100644
index 0000000..9638feb
--- /dev/null
+++ b/tests/qemuagentdata/qemuagent-fsinfo.xml
@@ -0,0 +1,39 @@
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219136</memory>
+ <currentMemory unit='KiB'>219136</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu</emulator>
+ <disk type='file' device='disk'>
+ <source file='/tmp/idedisk.img'/>
+ <target dev='hdc' bus='ide'/>
+ <address type='drive' controller='0' bus='1'
target='0' unit='0'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='qcow2'/>
+ <source file='/tmp/virtio-blk1.qcow2'/>
+ <target dev='vda' bus='virtio'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x06' function='0x0'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='qcow2'/>
+ <source file='/tmp/virtio-blk2.qcow2'/>
+ <target dev='vdb' bus='virtio'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x07' function='0x0'/>
+ </disk>
+ <controller type='ide' index='0'>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x01' function='0x1'/>
+ </controller>
+ <memballoon model='virtio'/>
+ </devices>
+</domain>
diff --git a/tests/qemuagenttest.c b/tests/qemuagenttest.c
index bc649b4..4b6d950 100644
--- a/tests/qemuagenttest.c
+++ b/tests/qemuagenttest.c
@@ -164,6 +164,148 @@ testQemuAgentFSTrim(const void *data)
static int
+testQemuAgentGetFSInfo(const void *data)
+{
+ virDomainXMLOptionPtr xmlopt = (virDomainXMLOptionPtr)data;
+ virCapsPtr caps = testQemuCapsInit();
+ qemuMonitorTestPtr test = qemuMonitorTestNewAgent(xmlopt);
+ char *domain_filename = NULL;
+ char *domain_xml = NULL;
+ virDomainDefPtr def = NULL;
+ virDomainFSInfoPtr *info = NULL;
+ int ret = -1, ninfo = 0, i;
+
+ if (!test)
+ return -1;
+
+ if (virAsprintf(&domain_filename,
"%s/qemuagentdata/qemuagent-fsinfo.xml",
+ abs_srcdir) < 0)
+ goto cleanup;
+
+ if (virtTestLoadFile(domain_filename, &domain_xml) < 0)
+ goto cleanup;
+
+ if (!(def = virDomainDefParseString(domain_xml, caps, xmlopt,
+ QEMU_EXPECTED_VIRT_TYPES,
+ VIR_DOMAIN_XML_INACTIVE)))
+ goto cleanup;
+
+ if (qemuMonitorTestAddAgentSyncResponse(test) < 0)
+ goto cleanup;
+
+ if (qemuMonitorTestAddItem(test, "guest-get-fsinfo",
+ "{\"return\": ["
+ " {\"name\": \"sda1\",
\"mountpoint\": \"/\","
+ " \"disk\": ["
+ " {\"bus-type\":
\"ide\","
+ " \"bus\": 1, \"unit\":
0,"
+ " \"pci-controller\": {"
+ " \"bus\": 0, \"slot\":
1,"
+ " \"domain\": 0,
\"function\": 1},"
+ " \"target\": 0}],"
+ " \"type\": \"ext4\"},"
+ " {\"name\": \"dm-1\","
+ " \"mountpoint\":
\"/opt\","
+ " \"disk\": ["
+ " {\"bus-type\":
\"virtio\","
+ " \"bus\": 0, \"unit\":
0,"
+ " \"pci-controller\": {"
+ " \"bus\": 0, \"slot\":
6,"
+ " \"domain\": 0,
\"function\": 0},"
+ " \"target\": 0},"
+ " {\"bus-type\":
\"virtio\","
+ " \"bus\": 0, \"unit\":
0,"
+ " \"pci-controller\": {"
+ " \"bus\": 0, \"slot\":
7,"
+ " \"domain\": 0,
\"function\": 0},"
+ " \"target\": 0}],"
+ " \"type\": \"vfat\"},"
+ " {\"name\": \"sdb1\","
+ " \"mountpoint\":
\"/mnt/disk\","
+ " \"disk\": [], \"type\":
\"xfs\"}]}") < 0)
+ goto cleanup;
+
+ if ((ninfo = qemuAgentGetFSInfo(qemuMonitorTestGetAgent(test),
+ &info, def)) < 0)
+ goto cleanup;
+
+ if (ninfo != 3) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ "expected 3 filesystems information, got %d", ninfo);
+ ret = -1;
+ goto cleanup;
+ }
+ if (STRNEQ(info[2]->name, "sda1") ||
+ STRNEQ(info[2]->mountpoint, "/") ||
+ STRNEQ(info[2]->type, "ext4") ||
+ !info[2]->devAlias || !info[2]->devAlias[0] || info[2]->devAlias[1] ||
+ STRNEQ(info[2]->devAlias[0], "hdc")) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ "unexpected filesystems information returned for sda1 (%s,%s)",
+ info[2]->name, info[2]->devAlias ? info[2]->devAlias[0] :
"null");
+ ret = -1;
+ goto cleanup;
+ }
+ if (STRNEQ(info[1]->name, "dm-1") ||
+ STRNEQ(info[1]->mountpoint, "/opt") ||
+ STRNEQ(info[1]->type, "vfat") ||
+ !info[1]->devAlias || !info[1]->devAlias[0] ||
+ !info[1]->devAlias[1] || info[1]->devAlias[2] ||
+ STRNEQ(info[1]->devAlias[0], "vda") ||
+ STRNEQ(info[1]->devAlias[1], "vdb")) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ "unexpected filesystems information returned for dm-1 (%s,%s)",
+ info[0]->name, info[0]->devAlias ? info[0]->devAlias[0] :
"null");
+ ret = -1;
+ goto cleanup;
+ }
+ if (STRNEQ(info[0]->name, "sdb1") ||
+ STRNEQ(info[0]->mountpoint, "/mnt/disk") ||
+ STRNEQ(info[0]->type, "xfs") ||
+ (info[0]->devAlias && info[0]->devAlias[0])) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ "unexpected filesystems information returned for sdb1 (%s,%s)",
+ info[0]->name, info[0]->devAlias ? info[0]->devAlias[0] :
"null");
+ ret = -1;
+ goto cleanup;
+ }
+
+ if (qemuMonitorTestAddAgentSyncResponse(test) < 0)
+ goto cleanup;
+
+ if (qemuMonitorTestAddItem(test, "guest-get-fsinfo",
+ "{\"error\":"
+ "
{\"class\":\"CommandDisabled\","
+ " \"desc\":\"The command
guest-get-fsinfo "
+ "has been disabled for "
+ "this instance\","
+ "
\"data\":{\"name\":\"guest-get-fsinfo\"}"
+ " }"
+ "}") < 0)
+ goto cleanup;
+
+ if (qemuAgentGetFSInfo(qemuMonitorTestGetAgent(test), &info, def) != -1) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ "agent get-fsinfo command should have failed");
+ goto cleanup;
+ }
+
+ ret = 0;
+
+ cleanup:
+ for (i = 0; i < ninfo; i++)
+ virDomainFSInfoFree(info[i]);
+ VIR_FREE(info);
+ VIR_FREE(domain_filename);
+ VIR_FREE(domain_xml);
+ virObjectUnref(caps);
+ virDomainDefFree(def);
+ qemuMonitorTestFree(test);
+ return ret;
+}
+
+
+static int
testQemuAgentSuspend(const void *data)
{
virDomainXMLOptionPtr xmlopt = (virDomainXMLOptionPtr)data;
@@ -605,6 +747,7 @@ mymain(void)
DO_TEST(FSFreeze);
DO_TEST(FSThaw);
DO_TEST(FSTrim);
+ DO_TEST(GetFSInfo);
DO_TEST(Suspend);
DO_TEST(Shutdown);
DO_TEST(CPU);