2017-11-11 08:13:08 +00:00
|
|
|
#include <config.h>
|
|
|
|
|
|
|
|
#include "testutils.h"
|
|
|
|
#include "virfilewrapper.h"
|
2018-12-13 14:53:50 +00:00
|
|
|
#define LIBVIRT_VIRRESCTRLPRIV_H_ALLOW
|
2017-11-11 08:13:08 +00:00
|
|
|
#include "virresctrlpriv.h"
|
|
|
|
|
|
|
|
|
|
|
|
#define VIR_FROM_THIS VIR_FROM_NONE
|
|
|
|
|
|
|
|
struct virResctrlData {
|
|
|
|
const char *filename;
|
|
|
|
bool fail;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
test_virResctrlGetUnused(const void *opaque)
|
|
|
|
{
|
|
|
|
struct virResctrlData *data = (struct virResctrlData *) opaque;
|
|
|
|
char *system_dir = NULL;
|
|
|
|
char *resctrl_dir = NULL;
|
|
|
|
int ret = -1;
|
2021-03-11 07:16:13 +00:00
|
|
|
virResctrlAlloc *alloc = NULL;
|
2017-11-11 08:13:08 +00:00
|
|
|
char *schemata_str = NULL;
|
|
|
|
char *schemata_file;
|
2021-03-11 07:16:13 +00:00
|
|
|
virCaps *caps = NULL;
|
2017-11-11 08:13:08 +00:00
|
|
|
|
2019-10-22 13:26:14 +00:00
|
|
|
system_dir = g_strdup_printf("%s/vircaps2xmldata/linux-%s/system", abs_srcdir,
|
|
|
|
data->filename);
|
2017-11-11 08:13:08 +00:00
|
|
|
|
2019-10-22 13:26:14 +00:00
|
|
|
resctrl_dir = g_strdup_printf("%s/vircaps2xmldata/linux-%s/resctrl",
|
|
|
|
abs_srcdir, data->filename);
|
2017-11-11 08:13:08 +00:00
|
|
|
|
2019-10-22 13:26:14 +00:00
|
|
|
schemata_file = g_strdup_printf("%s/virresctrldata/%s.schemata", abs_srcdir,
|
|
|
|
data->filename);
|
2017-11-11 08:13:08 +00:00
|
|
|
|
|
|
|
virFileWrapperAddPrefix("/sys/devices/system", system_dir);
|
|
|
|
virFileWrapperAddPrefix("/sys/fs/resctrl", resctrl_dir);
|
|
|
|
|
|
|
|
caps = virCapabilitiesNew(VIR_ARCH_X86_64, false, false);
|
|
|
|
if (!caps || virCapabilitiesInitCaches(caps) < 0) {
|
|
|
|
fprintf(stderr, "Could not initialize capabilities");
|
|
|
|
goto cleanup;
|
|
|
|
}
|
|
|
|
|
|
|
|
alloc = virResctrlAllocGetUnused(caps->host.resctrl);
|
|
|
|
|
|
|
|
virFileWrapperClearPrefixes();
|
|
|
|
|
|
|
|
if (!alloc) {
|
|
|
|
if (data->fail)
|
|
|
|
ret = 0;
|
|
|
|
goto cleanup;
|
|
|
|
} else if (data->fail) {
|
2019-05-03 08:31:02 +00:00
|
|
|
VIR_TEST_DEBUG("Error expected but there wasn't any.");
|
2017-11-11 08:13:08 +00:00
|
|
|
ret = -1;
|
|
|
|
goto cleanup;
|
|
|
|
}
|
|
|
|
|
|
|
|
schemata_str = virResctrlAllocFormat(alloc);
|
|
|
|
|
|
|
|
if (virTestCompareToFile(schemata_str, schemata_file) < 0)
|
|
|
|
goto cleanup;
|
|
|
|
|
|
|
|
ret = 0;
|
|
|
|
cleanup:
|
|
|
|
virObjectUnref(caps);
|
|
|
|
virObjectUnref(alloc);
|
|
|
|
VIR_FREE(system_dir);
|
|
|
|
VIR_FREE(resctrl_dir);
|
|
|
|
VIR_FREE(schemata_str);
|
|
|
|
VIR_FREE(schemata_file);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
mymain(void)
|
|
|
|
{
|
|
|
|
struct virResctrlData data = {0};
|
|
|
|
int ret = 0;
|
|
|
|
|
|
|
|
#define DO_TEST_UNUSED(_filename) \
|
|
|
|
do { \
|
|
|
|
data = (struct virResctrlData) { .filename = _filename }; \
|
|
|
|
if (virTestRun("Free: " _filename, test_virResctrlGetUnused, &data) < 0) \
|
|
|
|
ret = -1; \
|
|
|
|
} while (0)
|
|
|
|
|
|
|
|
DO_TEST_UNUSED("resctrl");
|
|
|
|
DO_TEST_UNUSED("resctrl-cdp");
|
|
|
|
DO_TEST_UNUSED("resctrl-skx");
|
|
|
|
DO_TEST_UNUSED("resctrl-skx-twocaches");
|
|
|
|
|
2021-05-16 16:14:53 +00:00
|
|
|
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
2017-11-11 08:13:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
VIR_TEST_MAIN(mymain)
|