From 356b50b2014aafc7c1555e11cf93650dad39f03a Mon Sep 17 00:00:00 2001 Message-Id: <356b50b2014aafc7c1555e11cf93650dad39f03a@dist-git> From: John Ferlan Date: Mon, 1 Jul 2019 17:08:08 +0200 Subject: [PATCH] tests: Augment vcgrouptest to add virCgroupGetMemoryStat MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. The v1 data was originally added in commit d1452470. Signed-off-by: John Ferlan Reviewed-by: Pavel Hrdina (cherry picked from commit 99b8ef7a98d6ad4a01549204195f5e17ee1984ee) Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1689297 Signed-off-by: Pavel Hrdina Message-Id: <3c217939ce31a379e149865bc0f3342fc334ba42.1561993100.git.phrdina@redhat.com> Reviewed-by: Ján Tomko --- tests/vircgrouptest.c | 64 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c index 118b1bc246..e9cf792bdd 100644 --- a/tests/vircgrouptest.c +++ b/tests/vircgrouptest.c @@ -803,6 +803,67 @@ static int testCgroupGetMemoryUsage(const void *args ATTRIBUTE_UNUSED) return ret; } + +static int +testCgroupGetMemoryStat(const void *args ATTRIBUTE_UNUSED) +{ + virCgroupPtr cgroup = NULL; + int rv; + int 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++) { + /* NB: virCgroupGetMemoryStat returns a KiB scaled value */ + if ((expected_values[i] >> 10) != values[i]) { + fprintf(stderr, + "Wrong value (%llu) for %s from virCgroupGetMemoryStat " + "(expected %llu)\n", + values[i], names[i], (expected_values[i] >> 10)); + goto cleanup; + } + } + + ret = 0; + + cleanup: + virCgroupFree(&cgroup); + return ret; +} + + static int testCgroupGetBlkioIoServiced(const void *args ATTRIBUTE_UNUSED) { virCgroupPtr cgroup = NULL; @@ -1036,6 +1097,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.22.0