Files
libvirt/tests/nodeinfotest.c
T

152 lines
3.5 KiB
C
Raw Normal View History

#include <config.h>
2007-07-25 23:16:30 +00:00
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
2007-07-25 23:16:30 +00:00
#include "testutils.h"
#include "internal.h"
#include "nodeinfo.h"
2011-07-19 12:32:58 -06:00
#include "virfile.h"
#include "virstring.h"
2007-07-25 23:16:30 +00:00
#if ! (defined __linux__ && (defined(__x86_64__) || \
defined(__amd64__) || \
defined(__i386__) || \
defined(__powerpc__) || \
defined(__powerpc64__)))
2011-07-28 17:48:12 +02:00
int
main(void)
{
2011-07-28 17:48:12 +02:00
return EXIT_AM_SKIP;
}
#else
extern int linuxNodeInfoCPUPopulate(FILE *cpuinfo,
char *sysfs_dir,
virNodeInfoPtr nodeinfo);
2007-07-25 23:16:30 +00:00
2011-04-25 00:25:10 +02:00
static int
linuxTestCompareFiles(const char *cpuinfofile,
char *sysfs_dir,
const char *outputfile)
2011-04-25 00:25:10 +02:00
{
int ret = -1;
char *actualData = NULL;
char *expectData = NULL;
2007-07-25 23:16:30 +00:00
virNodeInfo nodeinfo;
FILE *cpuinfo;
2007-07-25 23:16:30 +00:00
2011-04-25 00:25:10 +02:00
if (virtTestLoadFile(outputfile, &expectData) < 0)
goto fail;
2007-07-25 23:16:30 +00:00
cpuinfo = fopen(cpuinfofile, "r");
if (!cpuinfo)
2011-04-25 00:25:10 +02:00
goto fail;
memset(&nodeinfo, 0, sizeof(nodeinfo));
if (linuxNodeInfoCPUPopulate(cpuinfo, sysfs_dir, &nodeinfo) < 0) {
if (virTestGetDebug()) {
virErrorPtr error = virSaveLastError();
if (error && error->code != VIR_ERR_OK)
fprintf(stderr, "\n%s\n", error->message);
virFreeError(error);
}
VIR_FORCE_FCLOSE(cpuinfo);
2011-04-25 00:25:10 +02:00
goto fail;
2007-07-25 23:16:30 +00:00
}
VIR_FORCE_FCLOSE(cpuinfo);
2007-07-25 23:16:30 +00:00
2012-05-14 17:11:47 -06:00
if (virAsprintf(&actualData,
"CPUs: %u/%u, MHz: %u, Nodes: %u, Sockets: %u, "
"Cores: %u, Threads: %u\n",
nodeinfo.cpus, VIR_NODEINFO_MAXCPUS(nodeinfo),
nodeinfo.mhz, nodeinfo.nodes, nodeinfo.sockets,
nodeinfo.cores, nodeinfo.threads) < 0)
2011-04-25 00:25:10 +02:00
goto fail;
2007-07-25 23:16:30 +00:00
if (STRNEQ(actualData, expectData)) {
virtTestDifference(stderr, expectData, actualData);
2011-04-25 00:25:10 +02:00
goto fail;
2007-07-25 23:16:30 +00:00
}
2011-04-25 00:25:10 +02:00
ret = 0;
fail:
2012-02-02 16:16:43 -07:00
VIR_FREE(expectData);
VIR_FREE(actualData);
2011-04-25 00:25:10 +02:00
return ret;
2007-07-25 23:16:30 +00:00
}
2011-04-25 00:25:10 +02:00
static int
linuxTestNodeInfo(const void *data)
{
int result = -1;
char *cpuinfo = NULL;
char *sysfs_dir = NULL;
2011-04-25 00:25:10 +02:00
char *output = NULL;
const char *test = data;
const char *arch = "x86";
2011-04-25 00:25:10 +02:00
# if defined(__powerpc__) || \
defined(__powerpc64__)
arch = "ppc";
# endif
if (virAsprintf(&sysfs_dir, "%s/nodeinfodata/linux-%s",
abs_srcdir, test) < 0 ||
virAsprintf(&cpuinfo, "%s/nodeinfodata/linux-%s-%s.cpuinfo",
abs_srcdir, arch, test) < 0 ||
virAsprintf(&output, "%s/nodeinfodata/linux-%s-%s.expected",
abs_srcdir, arch, test) < 0) {
2011-04-25 00:25:10 +02:00
goto cleanup;
}
result = linuxTestCompareFiles(cpuinfo, sysfs_dir, output);
2011-04-25 00:25:10 +02:00
cleanup:
2012-02-02 16:16:43 -07:00
VIR_FREE(cpuinfo);
VIR_FREE(output);
VIR_FREE(sysfs_dir);
2011-04-25 00:25:10 +02:00
return result;
2007-07-25 23:16:30 +00:00
}
static int
2011-04-29 10:21:20 -06:00
mymain(void)
2007-07-25 23:16:30 +00:00
{
int ret = 0;
int i;
const char *nodeData[] = {
"test1",
2012-05-11 14:30:05 -06:00
# if !(defined(__powerpc__) || \
defined(__powerpc64__))
"test2",
"test3",
"test4",
"test5",
"test6",
"test7",
"test8",
2012-05-11 14:30:05 -06:00
# endif
2007-07-25 23:16:30 +00:00
};
2010-05-18 12:32:39 +02:00
if (virInitialize() < 0)
return EXIT_FAILURE;
2007-07-25 23:16:30 +00:00
2013-05-21 15:53:48 +08:00
for (i = 0; i < ARRAY_CARDINALITY(nodeData); i++)
2007-07-25 23:16:30 +00:00
if (virtTestRun(nodeData[i], 1, linuxTestNodeInfo, nodeData[i]) != 0)
ret = -1;
2007-07-25 23:16:30 +00:00
return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
2007-07-25 23:16:30 +00:00
}
VIRT_TEST_MAIN(mymain)
2011-07-28 17:48:12 +02:00
#endif /* __linux__ */