--- tests/vircgrouptest.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c index e05b882..5c14efb 100644 --- a/tests/vircgrouptest.c +++ b/tests/vircgrouptest.c @@ -33,6 +33,7 @@ # include "virlog.h" # include "virfile.h" # include "testutilslxc.h" +# include "nodeinfo.h" # define VIR_FROM_THIS VIR_FROM_NONE @@ -530,6 +531,68 @@ static int testCgroupAvailable(const void *args) return 0; } +static int testCgroupGetPercpuStats(const void *args ATTRIBUTE_UNUSED) +{ + virCgroupPtr cgroup = NULL; + size_t i; + int rv, ret = -1; + virTypedParameter params[2]; + + // TODO: mock nodeGetCPUCount() as well & check 2nd cpu, too + unsigned long long expected[] = { + 1413142688153030 + }; + + if ((rv = virCgroupNewPartition("/virtualmachines", true, + (1 << VIR_CGROUP_CONTROLLER_CPU) | + (1 << VIR_CGROUP_CONTROLLER_CPUACCT), + &cgroup)) < 0) { + fprintf(stderr, "Could not create /virtualmachines cgroup: %d\n", -rv); + goto cleanup; + } + + if (nodeGetCPUCount() < 1) { + fprintf(stderr, "Unexpected: nodeGetCPUCount() yields: %d\n", nodeGetCPUCount()); + goto cleanup; + } + + if ((rv = virCgroupGetPercpuStats(cgroup, + params, + 2, 0, 1)) < 0) { + fprintf(stderr, "Failed call to virCgroupGetPercpuStats for /virtualmachines cgroup: %d\n", -rv); + goto cleanup; + } + + for (i = 0; i < ARRAY_CARDINALITY(expected); i++) { + if (!STREQ(params[i].field, VIR_DOMAIN_CPU_STATS_CPUTIME)) { + fprintf(stderr, + "Wrong parameter name value from virCgroupGetPercpuStats (is: %s)\n", + params[i].field); + goto cleanup; + } + + if (params[i].type != VIR_TYPED_PARAM_ULLONG) { + fprintf(stderr, + "Wrong parameter value type from virCgroupGetPercpuStats (is: %d)\n", + params[i].type); + goto cleanup; + } + + if (params[i].value.ul != expected[i]) { + fprintf(stderr, + "Wrong value from virCgroupGetMemoryUsage (expected %llu)\n", + params[i].value.ul); + goto cleanup; + } + } + + ret = 0; + +cleanup: + virCgroupFree(&cgroup); + return ret; +} + static int testCgroupGetMemoryUsage(const void *args ATTRIBUTE_UNUSED) { virCgroupPtr cgroup = NULL; @@ -735,6 +798,9 @@ mymain(void) if (virtTestRun("virCgroupGetMemoryUsage works", testCgroupGetMemoryUsage, NULL) < 0) ret = -1; + if (virtTestRun("virCgroupGetPercpuStats works", testCgroupGetPercpuStats, NULL) < 0) + ret = -1; + setenv("VIR_CGROUP_MOCK_MODE", "allinone", 1); if (virtTestRun("New cgroup for self (allinone)", testCgroupNewForSelfAllInOne, NULL) < 0) ret = -1; -- 1.8.4.5 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list