404507
From 15e49265411702cd518af91e04a78ef911559d06 Mon Sep 17 00:00:00 2001
404507
Message-Id: <15e49265411702cd518af91e04a78ef911559d06@dist-git>
404507
From: Martin Kletzander <mkletzan@redhat.com>
404507
Date: Wed, 31 Jan 2018 16:32:31 +0100
404507
Subject: [PATCH] tests: Add virresctrltest
404507
404507
This test initializes capabilities from vircaps2xmldata (since it exists there
404507
already) and then requests list of free bitmaps (all unallocated space) from
404507
virresctrl.c
404507
404507
Desirable outputs are saved in virresctrldata.
404507
404507
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
404507
(cherry picked from commit ae885bb52089b1d367e7ac1ed5d8d683e0bfefbd)
404507
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
404507
404507
https://bugzilla.redhat.com/show_bug.cgi?id=1289368
404507
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
404507
---
404507
 tests/Makefile.am                                  |   9 +-
404507
 tests/virresctrldata/resctrl-cdp.schemata          |   2 +
404507
 .../virresctrldata/resctrl-skx-twocaches.schemata  |   1 +
404507
 tests/virresctrldata/resctrl-skx.schemata          |   1 +
404507
 tests/virresctrldata/resctrl.schemata              |   1 +
404507
 tests/virresctrltest.c                             | 102 +++++++++++++++++++++
404507
 6 files changed, 115 insertions(+), 1 deletion(-)
404507
 create mode 100644 tests/virresctrldata/resctrl-cdp.schemata
404507
 create mode 100644 tests/virresctrldata/resctrl-skx-twocaches.schemata
404507
 create mode 100644 tests/virresctrldata/resctrl-skx.schemata
404507
 create mode 100644 tests/virresctrldata/resctrl.schemata
404507
 create mode 100644 tests/virresctrltest.c
404507
404507
diff --git a/tests/Makefile.am b/tests/Makefile.am
404507
index 0b2305d70b..f845b44102 100644
404507
--- a/tests/Makefile.am
404507
+++ b/tests/Makefile.am
404507
@@ -164,6 +164,7 @@ EXTRA_DIST =		\
404507
 	xml2vmxdata \
404507
 	virstorageutildata \
404507
 	virfilecachedata \
404507
+	virresctrldata \
404507
 	$(NULL)
404507
 
404507
 test_helpers = commandhelper ssh
404507
@@ -231,6 +232,7 @@ if WITH_LINUX
404507
 test_programs += fchosttest
404507
 test_programs += scsihosttest
404507
 test_programs += vircaps2xmltest
404507
+test_programs += virresctrltest
404507
 test_libraries += virusbmock.la \
404507
 	virnetdevbandwidthmock.la \
404507
 	virnumamock.la \
404507
@@ -1172,8 +1174,13 @@ virnumamock_la_CFLAGS = $(AM_CFLAGS)
404507
 virnumamock_la_LDFLAGS = $(MOCKLIBS_LDFLAGS)
404507
 virnumamock_la_LIBADD = $(MOCKLIBS_LIBS)
404507
 
404507
+virresctrltest_SOURCES = \
404507
+	virresctrltest.c testutils.h testutils.c virfilewrapper.h virfilewrapper.c
404507
+virresctrltest_LDADD = $(LDADDS)
404507
+
404507
 else ! WITH_LINUX
404507
-EXTRA_DIST += vircaps2xmltest.c virnumamock.c virfilewrapper.c virfilewrapper.h
404507
+EXTRA_DIST += vircaps2xmltest.c virnumamock.c virfilewrapper.c \
404507
+			  virfilewrapper.h virresctrltest.c
404507
 endif ! WITH_LINUX
404507
 
404507
 if WITH_NSS
404507
diff --git a/tests/virresctrldata/resctrl-cdp.schemata b/tests/virresctrldata/resctrl-cdp.schemata
404507
new file mode 100644
404507
index 0000000000..2897e2afa6
404507
--- /dev/null
404507
+++ b/tests/virresctrldata/resctrl-cdp.schemata
404507
@@ -0,0 +1,2 @@
404507
+L3CODE:0=00ffc;1=0ff00
404507
+L3DATA:0=00000;1=03fff
404507
diff --git a/tests/virresctrldata/resctrl-skx-twocaches.schemata b/tests/virresctrldata/resctrl-skx-twocaches.schemata
404507
new file mode 100644
404507
index 0000000000..86b3801a04
404507
--- /dev/null
404507
+++ b/tests/virresctrldata/resctrl-skx-twocaches.schemata
404507
@@ -0,0 +1 @@
404507
+L3:0=001;1=400
404507
diff --git a/tests/virresctrldata/resctrl-skx.schemata b/tests/virresctrldata/resctrl-skx.schemata
404507
new file mode 100644
404507
index 0000000000..5e8b0d6362
404507
--- /dev/null
404507
+++ b/tests/virresctrldata/resctrl-skx.schemata
404507
@@ -0,0 +1 @@
404507
+L3:0=70f
404507
diff --git a/tests/virresctrldata/resctrl.schemata b/tests/virresctrldata/resctrl.schemata
404507
new file mode 100644
404507
index 0000000000..fa980e58c9
404507
--- /dev/null
404507
+++ b/tests/virresctrldata/resctrl.schemata
404507
@@ -0,0 +1 @@
404507
+L3:0=000ff;1=000f0
404507
diff --git a/tests/virresctrltest.c b/tests/virresctrltest.c
404507
new file mode 100644
404507
index 0000000000..99e20d5dec
404507
--- /dev/null
404507
+++ b/tests/virresctrltest.c
404507
@@ -0,0 +1,102 @@
404507
+#include <config.h>
404507
+#include <stdlib.h>
404507
+
404507
+#include "testutils.h"
404507
+#include "virfilewrapper.h"
404507
+#include "virresctrlpriv.h"
404507
+
404507
+
404507
+#define VIR_FROM_THIS VIR_FROM_NONE
404507
+
404507
+struct virResctrlData {
404507
+    const char *filename;
404507
+    bool fail;
404507
+};
404507
+
404507
+
404507
+static int
404507
+test_virResctrlGetUnused(const void *opaque)
404507
+{
404507
+    struct virResctrlData *data = (struct virResctrlData *) opaque;
404507
+    char *system_dir = NULL;
404507
+    char *resctrl_dir = NULL;
404507
+    int ret = -1;
404507
+    virResctrlAllocPtr alloc = NULL;
404507
+    char *schemata_str = NULL;
404507
+    char *schemata_file;
404507
+    virCapsPtr caps = NULL;
404507
+
404507
+    if (virAsprintf(&system_dir, "%s/vircaps2xmldata/linux-%s/system",
404507
+                    abs_srcdir, data->filename) < 0)
404507
+        goto cleanup;
404507
+
404507
+    if (virAsprintf(&resctrl_dir, "%s/vircaps2xmldata/linux-%s/resctrl",
404507
+                    abs_srcdir, data->filename) < 0)
404507
+        goto cleanup;
404507
+
404507
+    if (virAsprintf(&schemata_file, "%s/virresctrldata/%s.schemata",
404507
+                    abs_srcdir, data->filename) < 0)
404507
+        goto cleanup;
404507
+
404507
+    virFileWrapperAddPrefix("/sys/devices/system", system_dir);
404507
+    virFileWrapperAddPrefix("/sys/fs/resctrl", resctrl_dir);
404507
+
404507
+    caps = virCapabilitiesNew(VIR_ARCH_X86_64, false, false);
404507
+    if (!caps || virCapabilitiesInitCaches(caps) < 0) {
404507
+        fprintf(stderr, "Could not initialize capabilities");
404507
+        goto cleanup;
404507
+    }
404507
+
404507
+    alloc = virResctrlAllocGetUnused(caps->host.resctrl);
404507
+
404507
+    virFileWrapperClearPrefixes();
404507
+
404507
+    if (!alloc) {
404507
+        if (data->fail)
404507
+            ret = 0;
404507
+        goto cleanup;
404507
+    } else if (data->fail) {
404507
+        VIR_TEST_DEBUG("Error expected but there wasn't any.\n");
404507
+        ret = -1;
404507
+        goto cleanup;
404507
+    }
404507
+
404507
+    schemata_str = virResctrlAllocFormat(alloc);
404507
+
404507
+    if (virTestCompareToFile(schemata_str, schemata_file) < 0)
404507
+        goto cleanup;
404507
+
404507
+    ret = 0;
404507
+ cleanup:
404507
+    virObjectUnref(caps);
404507
+    virObjectUnref(alloc);
404507
+    VIR_FREE(system_dir);
404507
+    VIR_FREE(resctrl_dir);
404507
+    VIR_FREE(schemata_str);
404507
+    VIR_FREE(schemata_file);
404507
+    return ret;
404507
+}
404507
+
404507
+
404507
+static int
404507
+mymain(void)
404507
+{
404507
+    struct virResctrlData data = {0};
404507
+    int ret = 0;
404507
+
404507
+#define DO_TEST_UNUSED(_filename) \
404507
+    do { \
404507
+        data = (struct virResctrlData) { .filename = _filename }; \
404507
+        if (virTestRun("Free: " _filename, test_virResctrlGetUnused, &data) < 0) \
404507
+            ret = -1; \
404507
+    } while (0)
404507
+
404507
+    DO_TEST_UNUSED("resctrl");
404507
+    DO_TEST_UNUSED("resctrl-cdp");
404507
+    DO_TEST_UNUSED("resctrl-skx");
404507
+    DO_TEST_UNUSED("resctrl-skx-twocaches");
404507
+
404507
+    return ret;
404507
+}
404507
+
404507
+VIR_TEST_MAIN(mymain)
404507
-- 
404507
2.16.1
404507