[libvirt] [PATCH 2/2] test: introduce a function in test driver to check get vcpupin info

Luyao Huang lhuang at redhat.com
Tue Jul 14 13:10:50 UTC 2015


As there is a regression in use vcpupin get info, introduce a new function
to test the virsh client.

Signed-off-by: Luyao Huang <lhuang at redhat.com>
---
 src/test/test_driver.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/vcpupin          | 34 +++++++++++++++++++++++++++----
 2 files changed, 85 insertions(+), 4 deletions(-)

diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index d38006f..213a9a1 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -2518,6 +2518,60 @@ static int testDomainPinVcpu(virDomainPtr domain,
     return ret;
 }
 
+static int
+testDomainGetVcpuPinInfo(virDomainPtr dom,
+                        int ncpumaps,
+                        unsigned char *cpumaps,
+                        int maplen,
+                        unsigned int flags)
+{
+    testDriverPtr privconn = dom->conn->privateData;
+    virDomainObjPtr privdom;
+    virDomainDefPtr def;
+    int ret = -1, hostcpus, vcpu;
+    virBitmapPtr allcpumap = NULL;
+
+    if (!(privdom = testDomObjFromDomain(dom)))
+        return -1;
+
+    if (!(def = virDomainObjGetOneDef(privdom, flags)))
+        goto cleanup;
+
+    hostcpus = VIR_NODEINFO_MAXCPUS(privconn->nodeInfo);
+
+    if (!(allcpumap = virBitmapNew(hostcpus)))
+        goto cleanup;
+
+    virBitmapSetAll(allcpumap);
+
+    /* Clamp to actual number of vcpus */
+    if (ncpumaps > def->vcpus)
+        ncpumaps = def->vcpus;
+
+    for (vcpu = 0; vcpu < ncpumaps; vcpu++) {
+        virDomainPinDefPtr pininfo;
+        virBitmapPtr bitmap = NULL;
+
+        pininfo = virDomainPinFind(def->cputune.vcpupin,
+                                   def->cputune.nvcpupin,
+                                   vcpu);
+
+        if (pininfo && pininfo->cpumask)
+            bitmap = pininfo->cpumask;
+        else
+            bitmap = allcpumap;
+
+        virBitmapToDataBuf(bitmap, VIR_GET_CPUMAP(cpumaps, maplen, vcpu), maplen);
+    }
+
+    ret = ncpumaps;
+
+ cleanup:
+    virBitmapFree(allcpumap);
+    virDomainObjEndAPI(&privdom);
+    return ret;
+}
+
 static char *testDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
 {
     virDomainDefPtr def;
@@ -6598,6 +6652,7 @@ static virHypervisorDriver testHypervisorDriver = {
     .domainGetVcpusFlags = testDomainGetVcpusFlags, /* 0.8.5 */
     .domainPinVcpu = testDomainPinVcpu, /* 0.7.3 */
     .domainGetVcpus = testDomainGetVcpus, /* 0.7.3 */
+    .domainGetVcpuPinInfo = testDomainGetVcpuPinInfo, /* 1.2.18 */
     .domainGetMaxVcpus = testDomainGetMaxVcpus, /* 0.7.3 */
     .domainGetXMLDesc = testDomainGetXMLDesc, /* 0.1.4 */
     .connectListDefinedDomains = testConnectListDefinedDomains, /* 0.1.11 */
diff --git a/tests/vcpupin b/tests/vcpupin
index b6b8b31..213db93 100755
--- a/tests/vcpupin
+++ b/tests/vcpupin
@@ -66,12 +66,38 @@ error: vcpupin: Missing vCPU number in pin mode.
 EOF
 compare exp out || fail=1
 
-# without arguments. This should succeed but the backend function in the
-# test driver isn't implemented
-$abs_top_builddir/tools/virsh --connect test:///default vcpupin test > out 2>&1
+# An out-of-range vCPU number when get information with live flag
+$abs_top_builddir/tools/virsh --connect test:///default vcpupin test 100 --live > out 2>&1
 test $? = 1 || fail=1
 cat <<\EOF > exp || fail=1
-error: this function is not supported by the connection driver: virDomainGetVcpuPinInfo
+error: vcpu 100 is out of range of live cpu count 2
+
+EOF
+compare exp out || fail=1
+
+# An out-of-range vCPU number when get information without flag
+$abs_top_builddir/tools/virsh --connect test:///default vcpupin test 100 > out 2>&1
+test $? = 1 || fail=1
+cat <<\EOF > exp || fail=1
+error: vcpu 100 is out of range of live cpu count 2
+
+EOF
+compare exp out || fail=1
+
+# An out-of-range vCPU number when get information with config flag
+$abs_top_builddir/tools/virsh --connect test:///default vcpupin test 100 --config > out 2>&1
+test $? = 1 || fail=1
+cat <<\EOF > exp || fail=1
+error: vcpu 100 is out of range of persistent cpu count 2
+
+EOF
+compare exp out || fail=1
+
+# An out-of-range vCPU number when get information with current flag
+$abs_top_builddir/tools/virsh --connect test:///default vcpupin test 100 --current > out 2>&1
+test $? = 1 || fail=1
+cat <<\EOF > exp || fail=1
+error: vcpu 100 is out of range of live cpu count 2
 
 EOF
 compare exp out || fail=1
-- 
1.8.3.1




More information about the libvir-list mailing list