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