From: Martin Kletzander <mkletzan@redhat.com>
This commit goes through all virhostcpudata subdirectories and checks
that `virHostCPUGetMap()` returns valid data for each one of them.
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
---
tests/virhostcputest.c | 57 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 57 insertions(+)
diff --git a/tests/virhostcputest.c b/tests/virhostcputest.c
index 4e65e5febf93..4b31b7944484 100644
--- a/tests/virhostcputest.c
+++ b/tests/virhostcputest.c
@@ -244,11 +244,41 @@ linuxTestNodeCPUStats(const void *data)
}
+static int
+linuxTestHostCPUGetMap(const void *data G_GNUC_UNUSED)
+{
+ g_autofree unsigned char *cpumap = NULL;
+
+ int ncpus = virHostCPUGetMap(&cpumap, NULL, 0);
+
+ g_autoptr(virBitmap) actual = virBitmapNewData(cpumap, VIR_DIV_UP(ncpus, 8));
+ g_autoptr(virBitmap) expected = NULL;
+
+ if (virFileReadValueBitmap(&expected, "%s/cpu/online", SYSFS_SYSTEM_PATH) < 0)
+ return -1;
+
+ if (!virBitmapEqual(actual, expected)) {
+ g_autofree char *expected_str = virBitmapFormat(expected);
+ g_autofree char *actual_str = virBitmapFormat(actual);
+ fprintf(stderr,
+ "Bitmaps are different\nexpected: %s\nactual: %s\n",
+ expected_str, actual_str);
+ return -1;
+ }
+
+ return 0;
+}
+
+
static int
mymain(void)
{
int ret = 0;
size_t i;
+ int rc = 0;
+ struct dirent *ent = NULL;
+ g_autofree char *datadir = g_strdup_printf("%s/virhostcpudata", abs_srcdir);
+ g_autoptr(DIR) dir = NULL;
const struct linuxTestHostCPUData nodeData[] = {
{"test1", VIR_ARCH_X86_64},
{"test1", VIR_ARCH_PPC},
@@ -300,6 +330,33 @@ mymain(void)
DO_TEST_CPU_STATS("24cpu", 24, false);
DO_TEST_CPU_STATS("24cpu", 25, true);
+ /* Tests for virHostCPUGetMap() with each data subdirectory. */
+ if (virDirOpen(&dir, datadir) < 0)
+ return -1;
+
+ while ((rc = virDirRead(dir, &ent, datadir)) > 0) {
+ struct stat sb;
+ g_autofree char *path = g_strdup_printf("%s/%s", datadir, ent->d_name);
+
+ if (stat(path, &sb) < 0) {
+ fprintf(stderr, "Cannot stat %s\n", path);
+ return -1;
+ }
+
+ if (!S_ISDIR(sb.st_mode))
+ continue;
+
+ virFileWrapperAddPrefix(SYSFS_SYSTEM_PATH, path);
+ if (virTestRun(ent->d_name, linuxTestHostCPUGetMap, NULL) < 0)
+ ret = -1;
+ virFileWrapperRemovePrefix(SYSFS_SYSTEM_PATH);
+ }
+
+ if (rc < 0) {
+ fprintf(stderr, "Error reading %s\n", SYSFS_SYSTEM_PATH);
+ return -1;
+ }
+
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
--
2.53.0