render / rpms / libvirt

Forked from rpms/libvirt 8 months ago
Clone
c480ed
From 356b50b2014aafc7c1555e11cf93650dad39f03a Mon Sep 17 00:00:00 2001
c480ed
Message-Id: <356b50b2014aafc7c1555e11cf93650dad39f03a@dist-git>
c480ed
From: John Ferlan <jferlan@redhat.com>
c480ed
Date: Mon, 1 Jul 2019 17:08:08 +0200
c480ed
Subject: [PATCH] tests: Augment vcgrouptest to add virCgroupGetMemoryStat
c480ed
MIME-Version: 1.0
c480ed
Content-Type: text/plain; charset=UTF-8
c480ed
Content-Transfer-Encoding: 8bit
c480ed
c480ed
Add a test to fetch the GetMemoryStat output. This only gets
c480ed
data for v1 only right now since the v2 data from commit 61ff6021
c480ed
is rather useless returning all 0's. The v1 data was originally
c480ed
added in commit d1452470.
c480ed
c480ed
Signed-off-by: John Ferlan <jferlan@redhat.com>
c480ed
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
c480ed
(cherry picked from commit 99b8ef7a98d6ad4a01549204195f5e17ee1984ee)
c480ed
c480ed
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1689297
c480ed
c480ed
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
c480ed
Message-Id: <3c217939ce31a379e149865bc0f3342fc334ba42.1561993100.git.phrdina@redhat.com>
c480ed
Reviewed-by: Ján Tomko <jtomko@redhat.com>
c480ed
---
c480ed
 tests/vircgrouptest.c | 64 +++++++++++++++++++++++++++++++++++++++++++
c480ed
 1 file changed, 64 insertions(+)
c480ed
c480ed
diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c
c480ed
index 118b1bc246..e9cf792bdd 100644
c480ed
--- a/tests/vircgrouptest.c
c480ed
+++ b/tests/vircgrouptest.c
c480ed
@@ -803,6 +803,67 @@ static int testCgroupGetMemoryUsage(const void *args ATTRIBUTE_UNUSED)
c480ed
     return ret;
c480ed
 }
c480ed
 
c480ed
+
c480ed
+static int
c480ed
+testCgroupGetMemoryStat(const void *args ATTRIBUTE_UNUSED)
c480ed
+{
c480ed
+    virCgroupPtr cgroup = NULL;
c480ed
+    int rv;
c480ed
+    int ret = -1;
c480ed
+    size_t i;
c480ed
+
c480ed
+    const unsigned long long expected_values[] = {
c480ed
+        1336619008ULL,
c480ed
+        67100672ULL,
c480ed
+        145887232ULL,
c480ed
+        661872640ULL,
c480ed
+        627400704UL,
c480ed
+        3690496ULL
c480ed
+    };
c480ed
+    const char* names[] = {
c480ed
+        "cache",
c480ed
+        "active_anon",
c480ed
+        "inactive_anon",
c480ed
+        "active_file",
c480ed
+        "inactive_file",
c480ed
+        "unevictable"
c480ed
+    };
c480ed
+    unsigned long long values[ARRAY_CARDINALITY(expected_values)];
c480ed
+
c480ed
+    if ((rv = virCgroupNewPartition("/virtualmachines", true,
c480ed
+                                    (1 << VIR_CGROUP_CONTROLLER_MEMORY),
c480ed
+                                    &cgroup)) < 0) {
c480ed
+        fprintf(stderr, "Could not create /virtualmachines cgroup: %d\n", -rv);
c480ed
+        goto cleanup;
c480ed
+    }
c480ed
+
c480ed
+    if ((rv = virCgroupGetMemoryStat(cgroup, &values[0],
c480ed
+                                     &values[1], &values[2],
c480ed
+                                     &values[3], &values[4],
c480ed
+                                     &values[5])) < 0) {
c480ed
+        fprintf(stderr, "Could not retrieve GetMemoryStat for /virtualmachines cgroup: %d\n", -rv);
c480ed
+        goto cleanup;
c480ed
+    }
c480ed
+
c480ed
+    for (i = 0; i < ARRAY_CARDINALITY(expected_values); i++) {
c480ed
+        /* NB: virCgroupGetMemoryStat returns a KiB scaled value */
c480ed
+        if ((expected_values[i] >> 10) != values[i]) {
c480ed
+            fprintf(stderr,
c480ed
+                    "Wrong value (%llu) for %s from virCgroupGetMemoryStat "
c480ed
+                    "(expected %llu)\n",
c480ed
+                    values[i], names[i], (expected_values[i] >> 10));
c480ed
+            goto cleanup;
c480ed
+        }
c480ed
+    }
c480ed
+
c480ed
+    ret = 0;
c480ed
+
c480ed
+ cleanup:
c480ed
+    virCgroupFree(&cgroup);
c480ed
+    return ret;
c480ed
+}
c480ed
+
c480ed
+
c480ed
 static int testCgroupGetBlkioIoServiced(const void *args ATTRIBUTE_UNUSED)
c480ed
 {
c480ed
     virCgroupPtr cgroup = NULL;
c480ed
@@ -1036,6 +1097,9 @@ mymain(void)
c480ed
     if (virTestRun("virCgroupGetMemoryUsage works", testCgroupGetMemoryUsage, NULL) < 0)
c480ed
         ret = -1;
c480ed
 
c480ed
+    if (virTestRun("virCgroupGetMemoryStat works", testCgroupGetMemoryStat, NULL) < 0)
c480ed
+        ret = -1;
c480ed
+
c480ed
     if (virTestRun("virCgroupGetPercpuStats works", testCgroupGetPercpuStats, NULL) < 0)
c480ed
         ret = -1;
c480ed
     cleanupFakeFS(fakerootdir);
c480ed
-- 
c480ed
2.22.0
c480ed