From ad589e1f52b3406ac7554e0b974d67a87e8d2689 Mon Sep 17 00:00:00 2001 From: Martin Kletzander Date: Fri, 24 Mar 2017 19:37:50 +0100 Subject: [PATCH] tests: Enhance vircaps2xml test Instead of generating all of the capabilities, let's test more of our code by probing sysfs data. This test needs quite some mocking for now, but it paves the road for more future enhancements (hugepages probing, for example). Signed-off-by: Martin Kletzander --- .../vircaps2xmldata/vircaps-aarch64-basic.xml | 64 +++++++++ .../vircaps2xmldata/vircaps-basic-4-4-2G.xml | 74 ---------- .../vircaps2xmldata/vircaps-x86_64-basic.xml | 62 ++++++++ .../vircaps2xmldata/vircaps-x86_64-caches.xml | 33 +++++ tests/vircaps2xmltest.c | 133 +++++++----------- 5 files changed, 209 insertions(+), 157 deletions(-) create mode 100644 tests/vircaps2xmldata/vircaps-aarch64-basic.xml delete mode 100644 tests/vircaps2xmldata/vircaps-basic-4-4-2G.xml create mode 100644 tests/vircaps2xmldata/vircaps-x86_64-basic.xml create mode 100644 tests/vircaps2xmldata/vircaps-x86_64-caches.xml diff --git a/tests/vircaps2xmldata/vircaps-aarch64-basic.xml b/tests/vircaps2xmldata/vircaps-aarch64-basic.xml new file mode 100644 index 0000000000..ce156a364e --- /dev/null +++ b/tests/vircaps2xmldata/vircaps-aarch64-basic.xml @@ -0,0 +1,64 @@ + + + + + aarch64 + + + + + + + + 1048576 + 2048 + 4096 + 6144 + + + + + + + + + 2097152 + 4096 + 6144 + 8192 + + + + + + + + + 3145728 + 6144 + 8192 + 10240 + + + + + + + + + 4194304 + 8192 + 10240 + 12288 + + + + + + + + + + + + diff --git a/tests/vircaps2xmldata/vircaps-basic-4-4-2G.xml b/tests/vircaps2xmldata/vircaps-basic-4-4-2G.xml deleted file mode 100644 index 8694f87d1f..0000000000 --- a/tests/vircaps2xmldata/vircaps-basic-4-4-2G.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - x86_64 - - - - - - 2097152 - - - - - - - - - - - - - - - 2097152 - - - - - - - - - - - - - - - 2097152 - - - - - - - - - - - - - - - 2097152 - - - - - - - - - - - - - - - - - - diff --git a/tests/vircaps2xmldata/vircaps-x86_64-basic.xml b/tests/vircaps2xmldata/vircaps-x86_64-basic.xml new file mode 100644 index 0000000000..1f2c6659a5 --- /dev/null +++ b/tests/vircaps2xmldata/vircaps-x86_64-basic.xml @@ -0,0 +1,62 @@ + + + + + x86_64 + + + + + + 1048576 + 2048 + 4096 + 6144 + + + + + + + + + 2097152 + 4096 + 6144 + 8192 + + + + + + + + + 3145728 + 6144 + 8192 + 10240 + + + + + + + + + 4194304 + 8192 + 10240 + 12288 + + + + + + + + + + + + diff --git a/tests/vircaps2xmldata/vircaps-x86_64-caches.xml b/tests/vircaps2xmldata/vircaps-x86_64-caches.xml new file mode 100644 index 0000000000..88f2ec6227 --- /dev/null +++ b/tests/vircaps2xmldata/vircaps-x86_64-caches.xml @@ -0,0 +1,33 @@ + + + + + x86_64 + + + + + + + + + 1048576 + 2048 + 4096 + 6144 + + + + + + + + + + + + + + + + diff --git a/tests/vircaps2xmltest.c b/tests/vircaps2xmltest.c index 3e9e06bc09..4dccd452cc 100644 --- a/tests/vircaps2xmltest.c +++ b/tests/vircaps2xmltest.c @@ -25,99 +25,51 @@ #include "testutils.h" #include "capabilities.h" #include "virbitmap.h" +#include "virsysfspriv.h" #define VIR_FROM_THIS VIR_FROM_NONE -static virCapsPtr -buildVirCapabilities(int max_cells, - int max_cpus_in_cell, - int max_mem_in_cell) -{ - virCapsPtr caps; - virCapsHostNUMACellCPUPtr cell_cpus = NULL; - virCapsHostNUMACellSiblingInfoPtr siblings = NULL; - int core_id, cell_id, nsiblings; - int id; - size_t i; +#ifdef __linux__ - if ((caps = virCapabilitiesNew(VIR_ARCH_X86_64, false, false)) == NULL) - goto error; - - id = 0; - for (cell_id = 0; cell_id < max_cells; cell_id++) { - if (VIR_ALLOC_N(cell_cpus, max_cpus_in_cell) < 0) - goto error; - - for (core_id = 0; core_id < max_cpus_in_cell; core_id++) { - cell_cpus[core_id].id = id; - cell_cpus[core_id].socket_id = cell_id; - cell_cpus[core_id].core_id = id + core_id; - if (!(cell_cpus[core_id].siblings = - virBitmapNew(max_cpus_in_cell))) - goto error; - ignore_value(virBitmapSetBit(cell_cpus[core_id].siblings, id)); - } - id++; - - if (VIR_ALLOC_N(siblings, max_cells) < 0) - goto error; - nsiblings = max_cells; - - for (i = 0; i < nsiblings; i++) { - siblings[i].node = i; - /* Some magical constants, see virNumaGetDistances() - * for their description. */ - siblings[i].distance = cell_id == i ? 10 : 20; - } - - if (virCapabilitiesAddHostNUMACell(caps, cell_id, - max_mem_in_cell, - max_cpus_in_cell, cell_cpus, - nsiblings, siblings, - 0, NULL) < 0) - goto error; - - cell_cpus = NULL; - siblings = NULL; - } - - return caps; - - error: - virCapabilitiesClearHostNUMACellCPUTopology(cell_cpus, max_cpus_in_cell); - VIR_FREE(cell_cpus); - VIR_FREE(siblings); - virObjectUnref(caps); - return NULL; -} - - -struct virCapabilitiesFormatData { +struct virCapabilitiesData { const char *filename; - int max_cells; - int max_cpus_in_cell; - int max_mem_in_cell; + virArch arch; + bool offlineMigrate; + bool liveMigrate; }; static int -test_virCapabilitiesFormat(const void *opaque) +test_virCapabilities(const void *opaque) { - struct virCapabilitiesFormatData *data = (struct virCapabilitiesFormatData *) opaque; + struct virCapabilitiesData *data = (struct virCapabilitiesData *) opaque; + const char *archStr = virArchToString(data->arch); virCapsPtr caps = NULL; char *capsXML = NULL; char *path = NULL; + char *dir = NULL; int ret = -1; - if (!(caps = buildVirCapabilities(data->max_cells, data->max_cpus_in_cell, - data->max_mem_in_cell))) + if (virAsprintf(&dir, "%s/vircaps2xmldata/linux-%s", + abs_srcdir, data->filename) < 0) goto cleanup; + virSysfsSetSystemPath(dir); + caps = virCapabilitiesNew(data->arch, data->offlineMigrate, data->liveMigrate); + + if (!caps) + goto cleanup; + + if (virCapabilitiesInitNUMA(caps) < 0) + goto cleanup; + + virSysfsSetSystemPath(NULL); + if (!(capsXML = virCapabilitiesFormatXML(caps))) goto cleanup; - if (virAsprintf(&path, "%s/vircaps2xmldata/vircaps-%s.xml", - abs_srcdir, data->filename) < 0) + if (virAsprintf(&path, "%s/vircaps2xmldata/vircaps-%s-%s.xml", + abs_srcdir, archStr, data->filename) < 0) goto cleanup; if (virTestCompareToFile(capsXML, path) < 0) @@ -126,6 +78,7 @@ test_virCapabilitiesFormat(const void *opaque) ret = 0; cleanup: + VIR_FREE(dir); VIR_FREE(path); VIR_FREE(capsXML); virObjectUnref(caps); @@ -137,19 +90,33 @@ mymain(void) { int ret = 0; -#define DO_TEST(filename, max_cells, \ - max_cpus_in_cell, max_mem_in_cell) \ - do { \ - struct virCapabilitiesFormatData data = {filename, max_cells, \ - max_cpus_in_cell, \ - max_mem_in_cell}; \ - if (virTestRun(filename, test_virCapabilitiesFormat, &data) < 0) \ - ret = -1; \ +# define DO_TEST_FULL(filename, arch, offlineMigrate, liveMigrate) \ + do { \ + struct virCapabilitiesData data = {filename, arch, \ + offlineMigrate, \ + liveMigrate}; \ + if (virTestRun(filename, test_virCapabilities, &data) < 0) \ + ret = -1; \ } while (0) - DO_TEST("basic-4-4-2G", 4, 4, 2*1024*1024); +# define DO_TEST(filename, arch) DO_TEST_FULL(filename, arch, true, true) + + DO_TEST_FULL("basic", VIR_ARCH_X86_64, false, false); + DO_TEST_FULL("basic", VIR_ARCH_AARCH64, true, false); + + DO_TEST("caches", VIR_ARCH_X86_64); return ret; } -VIRT_TEST_MAIN(mymain) +VIRT_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/virnumamock.so") + +#else /* !__linux__ */ + +int +main(void) +{ + return EXIT_AM_SKIP; +} + +#endif /* !__linux__ */