Extended the json monitor test program with support for query-cpus-fast
and added a sample file set for x86 data obtained using the it.
Signed-off-by: Viktor Mihajlovski <mihajlov(a)linux.vnet.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy(a)linux.vnet.ibm.com>
---
...qemumonitorjson-cpuinfo-x86-full-fast-cpus.json | 71 +++++++++++++
...umonitorjson-cpuinfo-x86-full-fast-hotplug.json | 115 ++++++++++++++++++++
.../qemumonitorjson-cpuinfo-x86-full-fast.data | 109 +++++++++++++++++++
tests/qemumonitorjsontest.c | 116 ++++++++++++++++-----
tests/qemumonitortestutils.c | 6 ++
tests/qemumonitortestutils.h | 1 +
6 files changed, 393 insertions(+), 25 deletions(-)
create mode 100644
tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-fast-cpus.json
create mode 100644
tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-fast-hotplug.json
create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-fast.data
diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-fast-cpus.json
b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-fast-cpus.json
new file mode 100644
index 0000000..88fd2b8
--- /dev/null
+++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-fast-cpus.json
@@ -0,0 +1,71 @@
+{
+ "return": [
+ {
+ "arch": "x86",
+ "cpu-index": 0,
+ "qom-path": "/machine/unattached/device[0]",
+ "thread-id": 895040
+ },
+ {
+ "arch": "x86",
+ "cpu-index": 1,
+ "qom-path": "/machine/peripheral/vcpu1",
+ "thread-id": 895056
+ },
+ {
+ "arch": "x86",
+ "cpu-index": 2,
+ "qom-path": "/machine/peripheral/vcpu2",
+ "thread-id": 895057
+ },
+ {
+ "arch": "x86",
+ "cpu-index": 3,
+ "qom-path": "/machine/peripheral/vcpu3",
+ "thread-id": 895058
+ },
+ {
+ "arch": "x86",
+ "cpu-index": 4,
+ "qom-path": "/machine/peripheral/vcpu4",
+ "thread-id": 895059
+ },
+ {
+ "arch": "x86",
+ "cpu-index": 5,
+ "qom-path": "/machine/peripheral/vcpu5",
+ "thread-id": 895060
+ },
+ {
+ "arch": "x86",
+ "cpu-index": 6,
+ "qom-path": "/machine/peripheral/vcpu6",
+ "thread-id": 895061
+ },
+ {
+ "arch": "x86",
+ "cpu-index": 7,
+ "qom-path": "/machine/peripheral/vcpu7",
+ "thread-id": 895062
+ },
+ {
+ "arch": "x86",
+ "cpu-index": 8,
+ "qom-path": "/machine/peripheral/vcpu8",
+ "thread-id": 895063
+ },
+ {
+ "arch": "x86",
+ "cpu-index": 9,
+ "qom-path": "/machine/peripheral/vcpu9",
+ "thread-id": 895064
+ },
+ {
+ "arch": "x86",
+ "cpu-index": 10,
+ "qom-path": "/machine/peripheral/vcpu10",
+ "thread-id": 895065
+ }
+ ],
+ "id": "libvirt-52"
+}
diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-fast-hotplug.json
b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-fast-hotplug.json
new file mode 100644
index 0000000..aff5aa3
--- /dev/null
+++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-fast-hotplug.json
@@ -0,0 +1,115 @@
+{
+ "return": [
+ {
+ "props": {
+ "core-id": 0,
+ "thread-id": 0,
+ "socket-id": 10
+ },
+ "vcpus-count": 1,
+ "qom-path": "/machine/peripheral/vcpu10",
+ "type": "Broadwell-x86_64-cpu"
+ },
+ {
+ "props": {
+ "core-id": 0,
+ "thread-id": 0,
+ "socket-id": 9
+ },
+ "vcpus-count": 1,
+ "qom-path": "/machine/peripheral/vcpu9",
+ "type": "Broadwell-x86_64-cpu"
+ },
+ {
+ "props": {
+ "core-id": 0,
+ "thread-id": 0,
+ "socket-id": 8
+ },
+ "vcpus-count": 1,
+ "qom-path": "/machine/peripheral/vcpu8",
+ "type": "Broadwell-x86_64-cpu"
+ },
+ {
+ "props": {
+ "core-id": 0,
+ "thread-id": 0,
+ "socket-id": 7
+ },
+ "vcpus-count": 1,
+ "qom-path": "/machine/peripheral/vcpu7",
+ "type": "Broadwell-x86_64-cpu"
+ },
+ {
+ "props": {
+ "core-id": 0,
+ "thread-id": 0,
+ "socket-id": 6
+ },
+ "vcpus-count": 1,
+ "qom-path": "/machine/peripheral/vcpu6",
+ "type": "Broadwell-x86_64-cpu"
+ },
+ {
+ "props": {
+ "core-id": 0,
+ "thread-id": 0,
+ "socket-id": 5
+ },
+ "vcpus-count": 1,
+ "qom-path": "/machine/peripheral/vcpu5",
+ "type": "Broadwell-x86_64-cpu"
+ },
+ {
+ "props": {
+ "core-id": 0,
+ "thread-id": 0,
+ "socket-id": 4
+ },
+ "vcpus-count": 1,
+ "qom-path": "/machine/peripheral/vcpu4",
+ "type": "Broadwell-x86_64-cpu"
+ },
+ {
+ "props": {
+ "core-id": 0,
+ "thread-id": 0,
+ "socket-id": 3
+ },
+ "vcpus-count": 1,
+ "qom-path": "/machine/peripheral/vcpu3",
+ "type": "Broadwell-x86_64-cpu"
+ },
+ {
+ "props": {
+ "core-id": 0,
+ "thread-id": 0,
+ "socket-id": 2
+ },
+ "vcpus-count": 1,
+ "qom-path": "/machine/peripheral/vcpu2",
+ "type": "Broadwell-x86_64-cpu"
+ },
+ {
+ "props": {
+ "core-id": 0,
+ "thread-id": 0,
+ "socket-id": 1
+ },
+ "vcpus-count": 1,
+ "qom-path": "/machine/peripheral/vcpu1",
+ "type": "Broadwell-x86_64-cpu"
+ },
+ {
+ "props": {
+ "core-id": 0,
+ "thread-id": 0,
+ "socket-id": 0
+ },
+ "vcpus-count": 1,
+ "qom-path": "/machine/unattached/device[0]",
+ "type": "Broadwell-x86_64-cpu"
+ }
+ ],
+ "id": "libvirt-51"
+}
diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-fast.data
b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-fast.data
new file mode 100644
index 0000000..1908e39
--- /dev/null
+++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-x86-full-fast.data
@@ -0,0 +1,109 @@
+[vcpu libvirt-id='0']
+ online=yes
+ hotpluggable=no
+ thread-id='895040'
+ enable-id='1'
+ query-cpus-id='0'
+ type='Broadwell-x86_64-cpu'
+ qom_path='/machine/unattached/device[0]'
+ topology: socket='0' core='0' thread='0' vcpus='1'
+[vcpu libvirt-id='1']
+ online=yes
+ hotpluggable=yes
+ thread-id='895056'
+ enable-id='2'
+ query-cpus-id='1'
+ type='Broadwell-x86_64-cpu'
+ alias='vcpu1'
+ qom_path='/machine/peripheral/vcpu1'
+ topology: socket='1' core='0' thread='0' vcpus='1'
+[vcpu libvirt-id='2']
+ online=yes
+ hotpluggable=yes
+ thread-id='895057'
+ enable-id='3'
+ query-cpus-id='2'
+ type='Broadwell-x86_64-cpu'
+ alias='vcpu2'
+ qom_path='/machine/peripheral/vcpu2'
+ topology: socket='2' core='0' thread='0' vcpus='1'
+[vcpu libvirt-id='3']
+ online=yes
+ hotpluggable=yes
+ thread-id='895058'
+ enable-id='4'
+ query-cpus-id='3'
+ type='Broadwell-x86_64-cpu'
+ alias='vcpu3'
+ qom_path='/machine/peripheral/vcpu3'
+ topology: socket='3' core='0' thread='0' vcpus='1'
+[vcpu libvirt-id='4']
+ online=yes
+ hotpluggable=yes
+ thread-id='895059'
+ enable-id='5'
+ query-cpus-id='4'
+ type='Broadwell-x86_64-cpu'
+ alias='vcpu4'
+ qom_path='/machine/peripheral/vcpu4'
+ topology: socket='4' core='0' thread='0' vcpus='1'
+[vcpu libvirt-id='5']
+ online=yes
+ hotpluggable=yes
+ thread-id='895060'
+ enable-id='6'
+ query-cpus-id='5'
+ type='Broadwell-x86_64-cpu'
+ alias='vcpu5'
+ qom_path='/machine/peripheral/vcpu5'
+ topology: socket='5' core='0' thread='0' vcpus='1'
+[vcpu libvirt-id='6']
+ online=yes
+ hotpluggable=yes
+ thread-id='895061'
+ enable-id='7'
+ query-cpus-id='6'
+ type='Broadwell-x86_64-cpu'
+ alias='vcpu6'
+ qom_path='/machine/peripheral/vcpu6'
+ topology: socket='6' core='0' thread='0' vcpus='1'
+[vcpu libvirt-id='7']
+ online=yes
+ hotpluggable=yes
+ thread-id='895062'
+ enable-id='8'
+ query-cpus-id='7'
+ type='Broadwell-x86_64-cpu'
+ alias='vcpu7'
+ qom_path='/machine/peripheral/vcpu7'
+ topology: socket='7' core='0' thread='0' vcpus='1'
+[vcpu libvirt-id='8']
+ online=yes
+ hotpluggable=yes
+ thread-id='895063'
+ enable-id='9'
+ query-cpus-id='8'
+ type='Broadwell-x86_64-cpu'
+ alias='vcpu8'
+ qom_path='/machine/peripheral/vcpu8'
+ topology: socket='8' core='0' thread='0' vcpus='1'
+[vcpu libvirt-id='9']
+ online=yes
+ hotpluggable=yes
+ thread-id='895064'
+ enable-id='10'
+ query-cpus-id='9'
+ type='Broadwell-x86_64-cpu'
+ alias='vcpu9'
+ qom_path='/machine/peripheral/vcpu9'
+ topology: socket='9' core='0' thread='0' vcpus='1'
+[vcpu libvirt-id='10']
+ online=yes
+ hotpluggable=yes
+ thread-id='895065'
+ enable-id='11'
+ query-cpus-id='10'
+ type='Broadwell-x86_64-cpu'
+ alias='vcpu10'
+ qom_path='/machine/peripheral/vcpu10'
+ topology: socket='10' core='0' thread='0' vcpus='1'
diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c
index 6824623..f23614e 100644
--- a/tests/qemumonitorjsontest.c
+++ b/tests/qemumonitorjsontest.c
@@ -1360,6 +1360,41 @@ testQemuMonitorJSONqemuMonitorJSONQueryCPUsEqual(struct
qemuMonitorQueryCpusEntr
return true;
}
+static int
+testQEMUMonitorJSONqemuMonitorJSONQueryCPUsHelper(qemuMonitorTestPtr test,
+ struct qemuMonitorQueryCpusEntry
*expect,
+ bool fast, size_t num)
+{
+ struct qemuMonitorQueryCpusEntry *cpudata = NULL;
+ size_t ncpudata = 0;
+ size_t i;
+ int ret = -1;
+
+ if (qemuMonitorJSONQueryCPUs(qemuMonitorTestGetMonitor(test),
+ &cpudata, &ncpudata, true, fast) < 0)
+ goto cleanup;
+
+ if (ncpudata != num) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ "Expecting ncpupids = %zu but got %zu", num, ncpudata);
+ goto cleanup;
+ }
+
+ for (i = 0; i < ncpudata; i++) {
+ if (!testQemuMonitorJSONqemuMonitorJSONQueryCPUsEqual(cpudata + i,
+ expect + i)) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ "vcpu entry %zu does not match expected data", i);
+ goto cleanup;
+ }
+ }
+
+ ret = 0;
+
+ cleanup:
+ qemuMonitorQueryCpusFree(cpudata, ncpudata);
+ return ret;
+}
static int
testQemuMonitorJSONqemuMonitorJSONQueryCPUs(const void *data)
@@ -1367,15 +1402,16 @@ testQemuMonitorJSONqemuMonitorJSONQueryCPUs(const void *data)
virDomainXMLOptionPtr xmlopt = (virDomainXMLOptionPtr)data;
qemuMonitorTestPtr test = qemuMonitorTestNewSimple(true, xmlopt);
int ret = -1;
- struct qemuMonitorQueryCpusEntry *cpudata = NULL;
- struct qemuMonitorQueryCpusEntry expect[] = {
- {0, 17622, (char *) "/machine/unattached/device[0]", true},
- {1, 17624, (char *) "/machine/unattached/device[1]", true},
- {2, 17626, (char *) "/machine/unattached/device[2]", true},
- {3, 17628, NULL, true},
+ struct qemuMonitorQueryCpusEntry expect_slow[] = {
+ {0, 17622, (char *) "/machine/unattached/device[0]", true},
+ {1, 17624, (char *) "/machine/unattached/device[1]", true},
+ {2, 17626, (char *) "/machine/unattached/device[2]", true},
+ {3, 17628, NULL, true},
+ };
+ struct qemuMonitorQueryCpusEntry expect_fast[] = {
+ {0, 17629, (char *) "/machine/unattached/device[0]", false},
+ {1, 17630, (char *) "/machine/unattached/device[1]", false},
};
- size_t ncpudata = 0;
- size_t i;
if (!test)
return -1;
@@ -1419,29 +1455,37 @@ testQemuMonitorJSONqemuMonitorJSONQueryCPUs(const void *data)
"}") < 0)
goto cleanup;
- if (qemuMonitorJSONQueryCPUs(qemuMonitorTestGetMonitor(test),
- &cpudata, &ncpudata, true, false) < 0)
+ if (qemuMonitorTestAddItem(test, "query-cpus-fast",
+ "{"
+ " \"return\": ["
+ " {"
+ " \"cpu-index\": 0,"
+ " \"qom-path\":
\"/machine/unattached/device[0]\","
+ " \"thread-id\": 17629"
+ " },"
+ " {"
+ " \"cpu-index\": 1,"
+ " \"qom-path\":
\"/machine/unattached/device[1]\","
+ " \"thread-id\": 17630"
+ " }"
+ " ],"
+ " \"id\": \"libvirt-8\""
+ "}") < 0)
goto cleanup;
- if (ncpudata != 4) {
- virReportError(VIR_ERR_INTERNAL_ERROR,
- "Expecting ncpupids = 4 but got %zu", ncpudata);
+ /* query-cpus */
+ if (testQEMUMonitorJSONqemuMonitorJSONQueryCPUsHelper(test, expect_slow,
+ false, 4))
goto cleanup;
- }
- for (i = 0; i < ncpudata; i++) {
- if (!testQemuMonitorJSONqemuMonitorJSONQueryCPUsEqual(cpudata + i,
- expect + i)) {
- virReportError(VIR_ERR_INTERNAL_ERROR,
- "vcpu entry %zu does not match expected data", i);
- goto cleanup;
- }
- }
+ /* query-cpus-fast */
+ if (testQEMUMonitorJSONqemuMonitorJSONQueryCPUsHelper(test, expect_fast,
+ true, 2))
+ goto cleanup;
ret = 0;
cleanup:
- qemuMonitorQueryCpusFree(cpudata, ncpudata);
qemuMonitorTestFree(test);
return ret;
}
@@ -2612,6 +2656,7 @@ struct testCPUInfoData {
const char *name;
size_t maxvcpus;
virDomainXMLOptionPtr xmlopt;
+ bool fast;
};
@@ -2678,6 +2723,7 @@ testQemuMonitorCPUInfo(const void *opaque)
{
const struct testCPUInfoData *data = opaque;
qemuMonitorTestPtr test = qemuMonitorTestNewSimple(true, data->xmlopt);
+ virDomainObjPtr vm = NULL;
char *queryCpusFile = NULL;
char *queryHotpluggableFile = NULL;
char *dataFile = NULL;
@@ -2712,9 +2758,20 @@ testQemuMonitorCPUInfo(const void *opaque)
queryHotpluggableStr) < 0)
goto cleanup;
- if (qemuMonitorTestAddItem(test, "query-cpus", queryCpusStr) < 0)
+ if (qemuMonitorTestAddItem(test, data->fast ? "query-cpus-fast" :
"query-cpus",
+ queryCpusStr) < 0)
goto cleanup;
+ vm = qemuMonitorTestGetDomainObj(test);
+ if (!vm)
+ return -1;
+
+ if (data->fast) {
+ QEMU_DOMAIN_PRIVATE(vm)->qemuCaps = virQEMUCapsNew();
+ virQEMUCapsSet(QEMU_DOMAIN_PRIVATE(vm)->qemuCaps,
+ QEMU_CAPS_QUERY_CPUS_FAST);
+ }
+
rc = qemuMonitorGetCPUInfo(qemuMonitorTestGetMonitor(test),
&vcpus, data->maxvcpus, true);
@@ -2872,7 +2929,15 @@ mymain(void)
#define DO_TEST_CPU_INFO(name, maxvcpus) \
do { \
- struct testCPUInfoData data = {name, maxvcpus, driver.xmlopt}; \
+ struct testCPUInfoData data = {name, maxvcpus, driver.xmlopt, false}; \
+ if (virTestRun("GetCPUInfo(" name ")",
testQemuMonitorCPUInfo, \
+ &data) < 0) \
+ ret = -1; \
+ } while (0)
+
+#define DO_TEST_CPU_INFO_FAST(name, maxvcpus) \
+ do { \
+ struct testCPUInfoData data = {name, maxvcpus, driver.xmlopt, true}; \
if (virTestRun("GetCPUInfo(" name ")",
testQemuMonitorCPUInfo, \
&data) < 0) \
ret = -1; \
@@ -2956,6 +3021,7 @@ mymain(void)
DO_TEST_CPU_INFO("x86-basic-pluggable", 8);
DO_TEST_CPU_INFO("x86-full", 11);
DO_TEST_CPU_INFO("x86-node-full", 8);
+ DO_TEST_CPU_INFO_FAST("x86-full-fast", 11);
DO_TEST_CPU_INFO("ppc64-basic", 24);
DO_TEST_CPU_INFO("ppc64-hotplug-1", 24);
diff --git a/tests/qemumonitortestutils.c b/tests/qemumonitortestutils.c
index 5e30fb0..b20d59a 100644
--- a/tests/qemumonitortestutils.c
+++ b/tests/qemumonitortestutils.c
@@ -1439,3 +1439,9 @@ qemuMonitorTestGetAgent(qemuMonitorTestPtr test)
{
return test->agent;
}
+
+virDomainObjPtr
+qemuMonitorTestGetDomainObj(qemuMonitorTestPtr test)
+{
+ return test->vm;
+}
diff --git a/tests/qemumonitortestutils.h b/tests/qemumonitortestutils.h
index 8b19b37..3604a1b 100644
--- a/tests/qemumonitortestutils.h
+++ b/tests/qemumonitortestutils.h
@@ -96,5 +96,6 @@ void qemuMonitorTestFree(qemuMonitorTestPtr test);
qemuMonitorPtr qemuMonitorTestGetMonitor(qemuMonitorTestPtr test);
qemuAgentPtr qemuMonitorTestGetAgent(qemuMonitorTestPtr test);
+virDomainObjPtr qemuMonitorTestGetDomainObj(qemuMonitorTestPtr test);
#endif /* __VIR_QEMU_MONITOR_TEST_UTILS_H__ */
--
1.9.1