[libvirt] [PATCH 2/2] tests: Augment vcgrouptest to add virCgroupGetMemoryStat

John Ferlan jferlan at redhat.com
Wed Nov 7 23:57:40 UTC 2018


Add a test to fetch the GetMemoryStat output. This only gets
data for v1 only right now since the v2 data from commit 61ff6021
is rather useless returning all 0's.

Signed-off-by: John Ferlan <jferlan at redhat.com>
---
 tests/vircgrouptest.c | 61 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 61 insertions(+)

diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c
index 310e1fb6a2..06c4a8ef5c 100644
--- a/tests/vircgrouptest.c
+++ b/tests/vircgrouptest.c
@@ -802,6 +802,64 @@ static int testCgroupGetMemoryUsage(const void *args ATTRIBUTE_UNUSED)
     return ret;
 }
 
+
+static int
+testCgroupGetMemoryStat(const void *args ATTRIBUTE_UNUSED)
+{
+    virCgroupPtr cgroup = NULL;
+    int rv, ret = -1;
+    size_t i;
+
+    const unsigned long long expected_values[] = {
+        1336619008ULL,
+        67100672ULL,
+        145887232ULL,
+        661872640ULL,
+        627400704UL,
+        3690496ULL
+    };
+    const char* names[] = {
+        "cache",
+        "active_anon",
+        "inactive_anon",
+        "active_file",
+        "inactive_file",
+        "unevictable"
+    };
+    unsigned long long values[ARRAY_CARDINALITY(expected_values)];
+
+    if ((rv = virCgroupNewPartition("/virtualmachines", true,
+                                    (1 << VIR_CGROUP_CONTROLLER_MEMORY),
+                                    &cgroup)) < 0) {
+        fprintf(stderr, "Could not create /virtualmachines cgroup: %d\n", -rv);
+        goto cleanup;
+    }
+
+    if ((rv = virCgroupGetMemoryStat(cgroup, &values[0],
+                                     &values[1], &values[2],
+                                     &values[3], &values[4],
+                                     &values[5])) < 0) {
+        fprintf(stderr, "Could not retrieve GetMemoryStat for /virtualmachines cgroup: %d\n", -rv);
+        goto cleanup;
+    }
+
+    for (i = 0; i < ARRAY_CARDINALITY(expected_values); i++) {
+        if (expected_values[i] != (values[i] << 10)) {
+            fprintf(stderr,
+                    "Wrong value (%llu) for %s from virCgroupGetMemoryStat (expected %llu)\n",
+                    values[i], names[i], expected_values[i]);
+            goto cleanup;
+        }
+    }
+
+    ret = 0;
+
+ cleanup:
+    virCgroupFree(&cgroup);
+    return ret;
+}
+
+
 static int testCgroupGetBlkioIoServiced(const void *args ATTRIBUTE_UNUSED)
 {
     virCgroupPtr cgroup = NULL;
@@ -1035,6 +1093,9 @@ mymain(void)
     if (virTestRun("virCgroupGetMemoryUsage works", testCgroupGetMemoryUsage, NULL) < 0)
         ret = -1;
 
+    if (virTestRun("virCgroupGetMemoryStat works", testCgroupGetMemoryStat, NULL) < 0)
+        ret = -1;
+
     if (virTestRun("virCgroupGetPercpuStats works", testCgroupGetPercpuStats, NULL) < 0)
         ret = -1;
     cleanupFakeFS(fakerootdir);
-- 
2.17.2




More information about the libvir-list mailing list