[libvirt] [PATCH 3/6] tests: add qemumonitorjson tests for query-cpus-fast

Viktor Mihajlovski mihajlov at linux.vnet.ibm.com
Fri Mar 2 09:29:08 UTC 2018


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 at linux.vnet.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy at 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




More information about the libvir-list mailing list