--- tests/Makefile.am | 12 +- tests/cputest.c | 610 ++++++++++++++++++++ tests/cputestdata/x86-baseline-1-result.xml | 5 + tests/cputestdata/x86-baseline-1.xml | 20 + tests/cputestdata/x86-baseline-2-result.xml | 4 + tests/cputestdata/x86-baseline-2.xml | 22 + .../x86-baseline-incompatible-vendors.xml | 14 + .../cputestdata/x86-baseline-no-vendor-result.xml | 5 + tests/cputestdata/x86-baseline-no-vendor.xml | 12 + .../x86-baseline-some-vendors-result.xml | 3 + tests/cputestdata/x86-baseline-some-vendors.xml | 13 + tests/cputestdata/x86-bogus-feature.xml | 4 + tests/cputestdata/x86-bogus-model.xml | 3 + tests/cputestdata/x86-bogus-vendor.xml | 4 + tests/cputestdata/x86-exact-disable-extra.xml | 4 + tests/cputestdata/x86-exact-disable.xml | 4 + tests/cputestdata/x86-exact-disable2.xml | 5 + tests/cputestdata/x86-exact-forbid-extra.xml | 4 + tests/cputestdata/x86-exact-forbid.xml | 4 + tests/cputestdata/x86-exact-force.xml | 4 + tests/cputestdata/x86-exact-require-extra.xml | 4 + tests/cputestdata/x86-exact-require.xml | 4 + tests/cputestdata/x86-exact.xml | 3 + tests/cputestdata/x86-guest.xml | 18 + .../cputestdata/x86-host+guest,model486-result.xml | 37 ++ .../x86-host+guest,models,Penryn-result.xml | 13 + .../x86-host+guest,models,qemu64-result.xml | 14 + tests/cputestdata/x86-host+guest,models-result.xml | 13 + tests/cputestdata/x86-host+guest-result.xml | 11 + tests/cputestdata/x86-host+guest.xml | 17 + tests/cputestdata/x86-host+min.xml | 17 + .../cputestdata/x86-host+nehalem-force-result.xml | 4 + tests/cputestdata/x86-host+pentium3.xml | 27 + .../x86-host+strict-force-extra-result.xml | 19 + tests/cputestdata/x86-host-amd-fake.xml | 20 + tests/cputestdata/x86-host-amd.xml | 18 + .../x86-host-better+pentium3,core2duo-result.xml | 21 + .../x86-host-better+pentium3,pentium3-result.xml | 30 + .../x86-host-better+pentium3-result.xml | 18 + tests/cputestdata/x86-host-better.xml | 20 + tests/cputestdata/x86-host-incomp-arch.xml | 6 + tests/cputestdata/x86-host-no-vendor.xml | 19 + tests/cputestdata/x86-host-worse+guest-result.xml | 9 + tests/cputestdata/x86-host-worse.xml | 6 + tests/cputestdata/x86-host.xml | 20 + tests/cputestdata/x86-min.xml | 3 + tests/cputestdata/x86-nehalem-force.xml | 6 + tests/cputestdata/x86-pentium3-amd.xml | 4 + tests/cputestdata/x86-pentium3.xml | 3 + tests/cputestdata/x86-strict-disable.xml | 18 + tests/cputestdata/x86-strict-force-extra.xml | 18 + tests/cputestdata/x86-strict-full.xml | 17 + tests/cputestdata/x86-strict.xml | 3 + 53 files changed, 1215 insertions(+), 1 deletions(-) create mode 100644 tests/cputest.c create mode 100644 tests/cputestdata/x86-baseline-1-result.xml create mode 100644 tests/cputestdata/x86-baseline-1.xml create mode 100644 tests/cputestdata/x86-baseline-2-result.xml create mode 100644 tests/cputestdata/x86-baseline-2.xml create mode 100644 tests/cputestdata/x86-baseline-incompatible-vendors.xml create mode 100644 tests/cputestdata/x86-baseline-no-vendor-result.xml create mode 100644 tests/cputestdata/x86-baseline-no-vendor.xml create mode 100644 tests/cputestdata/x86-baseline-some-vendors-result.xml create mode 100644 tests/cputestdata/x86-baseline-some-vendors.xml create mode 100644 tests/cputestdata/x86-bogus-feature.xml create mode 100644 tests/cputestdata/x86-bogus-model.xml create mode 100644 tests/cputestdata/x86-bogus-vendor.xml create mode 100644 tests/cputestdata/x86-exact-disable-extra.xml create mode 100644 tests/cputestdata/x86-exact-disable.xml create mode 100644 tests/cputestdata/x86-exact-disable2.xml create mode 100644 tests/cputestdata/x86-exact-forbid-extra.xml create mode 100644 tests/cputestdata/x86-exact-forbid.xml create mode 100644 tests/cputestdata/x86-exact-force.xml create mode 100644 tests/cputestdata/x86-exact-require-extra.xml create mode 100644 tests/cputestdata/x86-exact-require.xml create mode 100644 tests/cputestdata/x86-exact.xml create mode 100644 tests/cputestdata/x86-guest.xml create mode 100644 tests/cputestdata/x86-host+guest,model486-result.xml create mode 100644 tests/cputestdata/x86-host+guest,models,Penryn-result.xml create mode 100644 tests/cputestdata/x86-host+guest,models,qemu64-result.xml create mode 100644 tests/cputestdata/x86-host+guest,models-result.xml create mode 100644 tests/cputestdata/x86-host+guest-result.xml create mode 100644 tests/cputestdata/x86-host+guest.xml create mode 100644 tests/cputestdata/x86-host+min.xml create mode 100644 tests/cputestdata/x86-host+nehalem-force-result.xml create mode 100644 tests/cputestdata/x86-host+pentium3.xml create mode 100644 tests/cputestdata/x86-host+strict-force-extra-result.xml create mode 100644 tests/cputestdata/x86-host-amd-fake.xml create mode 100644 tests/cputestdata/x86-host-amd.xml create mode 100644 tests/cputestdata/x86-host-better+pentium3,core2duo-result.xml create mode 100644 tests/cputestdata/x86-host-better+pentium3,pentium3-result.xml create mode 100644 tests/cputestdata/x86-host-better+pentium3-result.xml create mode 100644 tests/cputestdata/x86-host-better.xml create mode 100644 tests/cputestdata/x86-host-incomp-arch.xml create mode 100644 tests/cputestdata/x86-host-no-vendor.xml create mode 100644 tests/cputestdata/x86-host-worse+guest-result.xml create mode 100644 tests/cputestdata/x86-host-worse.xml create mode 100644 tests/cputestdata/x86-host.xml create mode 100644 tests/cputestdata/x86-min.xml create mode 100644 tests/cputestdata/x86-nehalem-force.xml create mode 100644 tests/cputestdata/x86-pentium3-amd.xml create mode 100644 tests/cputestdata/x86-pentium3.xml create mode 100644 tests/cputestdata/x86-strict-disable.xml create mode 100644 tests/cputestdata/x86-strict-force-extra.xml create mode 100644 tests/cputestdata/x86-strict-full.xml create mode 100644 tests/cputestdata/x86-strict.xml diff --git a/tests/Makefile.am b/tests/Makefile.am index 77b6fb9..021670e 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -69,7 +69,8 @@ EXTRA_DIST = \ domainsnapshotschematest \ domainsnapshotxml2xmlout \ domainsnapshotxml2xmlin \ - qemuhelpdata + qemuhelpdata \ + cputestdata check_PROGRAMS = virshtest conftest sockettest \ nodeinfotest qparamtest virbuftest @@ -111,6 +112,8 @@ check_PROGRAMS += nodedevxml2xmltest check_PROGRAMS += interfacexml2xmltest +check_PROGRAMS += cputest + test_scripts = \ capabilityschematest \ interfaceschematest \ @@ -196,6 +199,8 @@ TESTS += nodedevxml2xmltest TESTS += interfacexml2xmltest +TESTS += cputest + path_add = $$abs_top_builddir/src$(PATH_SEPARATOR)$$abs_top_builddir/daemon$(PATH_SEPARATOR)$$abs_top_builddir/tools # NB, automake < 1.10 does not provide the real @@ -326,6 +331,11 @@ interfacexml2xmltest_SOURCES = \ testutils.c testutils.h interfacexml2xmltest_LDADD = $(LDADDS) +cputest_SOURCES = \ + cputest.c \ + testutils.c testutils.h +cputest_LDADD = $(LDADDS) + virshtest_SOURCES = \ virshtest.c \ testutils.c testutils.h diff --git a/tests/cputest.c b/tests/cputest.c new file mode 100644 index 0000000..d9e6dad --- /dev/null +++ b/tests/cputest.c @@ -0,0 +1,610 @@ +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> + +#include <sys/types.h> +#include <fcntl.h> + +#include "internal.h" +#include "xml.h" +#include "memory.h" +#include "buf.h" +#include "testutils.h" +#include "cpu_conf.h" +#include "cpu/cpu.h" +#include "cpu/cpu_map.h" + +static const char *progname; +static const char *abs_srcdir; +static const char *abs_top_srcdir; + +#define VIR_FROM_THIS VIR_FROM_CPU +#define MAX_FILE 4096 + +enum compResultShadow { + ERROR = VIR_CPU_COMPARE_ERROR, + INCOMPATIBLE = VIR_CPU_COMPARE_INCOMPATIBLE, + IDENTICAL = VIR_CPU_COMPARE_IDENTICAL, + SUPERSET = VIR_CPU_COMPARE_SUPERSET +}; + +enum cpuTestBoolWithError { + FAIL = -1, + NO = 0, + YES = 1 +}; + +enum api { + API_COMPARE, + API_GUEST_DATA, + API_BASELINE, + API_UPDATE, + API_HAS_FEATURE +}; + +static const char *apis[] = { + "compare", + "guest data", + "baseline", + "update", + "has feature" +}; + +struct data { + const char *arch; + enum api api; + const char *host; + const char *name; + const char **models; + const char *modelsName; + unsigned int nmodels; + const char *preferred; + int result; +}; + + +static virCPUDefPtr +cpuTestLoadXML(const char *arch, const char *name) +{ + char xml[PATH_MAX]; + xmlDocPtr doc = NULL; + xmlXPathContextPtr ctxt = NULL; + virCPUDefPtr cpu = NULL; + + snprintf(xml, PATH_MAX, + "%s/cputestdata/%s-%s.xml", + abs_srcdir, arch, name); + + if (!(doc = virXMLParseFile(xml)) || + !(ctxt = xmlXPathNewContext(doc))) + goto cleanup; + + ctxt->node = xmlDocGetRootElement(doc); + cpu = virCPUDefParseXML(ctxt->node, ctxt, VIR_CPU_TYPE_AUTO); + +cleanup: + xmlXPathFreeContext(ctxt); + xmlFreeDoc(doc); + return cpu; +} + + +static virCPUDefPtr * +cpuTestLoadMultiXML(const char *arch, + const char *name, + unsigned int *count) +{ + char xml[PATH_MAX]; + xmlDocPtr doc = NULL; + xmlXPathContextPtr ctxt = NULL; + xmlNodePtr *nodes = NULL; + virCPUDefPtr *cpus = NULL; + int n; + int i; + + snprintf(xml, PATH_MAX, + "%s/cputestdata/%s-%s.xml", + abs_srcdir, arch, name); + + if (!(doc = virXMLParseFile(xml)) || + !(ctxt = xmlXPathNewContext(doc))) + goto error; + + ctxt->node = xmlDocGetRootElement(doc); + + n = virXPathNodeSet("/cpuTest/cpu", ctxt, &nodes); + if (n <= 0 || !(cpus = calloc(n, sizeof(virCPUDefPtr)))) + goto error; + + for (i = 0; i < n; i++) { + ctxt->node = nodes[i]; + cpus[i] = virCPUDefParseXML(nodes[i], ctxt, VIR_CPU_TYPE_HOST); + if (!cpus[i]) + goto error; + } + + *count = n; + +cleanup: + free(nodes); + xmlXPathFreeContext(ctxt); + xmlFreeDoc(doc); + return cpus; + +error: + if (cpus) { + for (i = 0; i < n; i++) + virCPUDefFree(cpus[i]); + free(cpus); + cpus = NULL; + } + goto cleanup; +} + + +static int +cpuTestCompareXML(const char *arch, + const virCPUDefPtr cpu, + const char *name) +{ + char xml[PATH_MAX]; + char expected[MAX_FILE]; + char *expectedPtr = &(expected[0]); + char *actual = NULL; + int ret = -1; + + snprintf(xml, PATH_MAX, + "%s/cputestdata/%s-%s.xml", + abs_srcdir, arch, name); + + if (virtTestLoadFile(xml, &expectedPtr, MAX_FILE) < 0) + goto cleanup; + + if (!(actual = virCPUDefFormat(cpu, NULL, 0))) + goto cleanup; + + if (STRNEQ(expected, actual)) { + virtTestDifference(stderr, expected, actual); + goto cleanup; + } + + ret = 0; + +cleanup: + free(actual); + return ret; +} + + +static const char * +cpuTestCompResStr(virCPUCompareResult result) +{ + switch (result) { + case VIR_CPU_COMPARE_ERROR: return "ERROR"; + case VIR_CPU_COMPARE_INCOMPATIBLE: return "INCOMPATIBLE"; + case VIR_CPU_COMPARE_IDENTICAL: return "IDENTICAL"; + case VIR_CPU_COMPARE_SUPERSET: return "SUPERSET"; + } + + return "unknown"; +} + + +static const char * +cpuTestBoolWithErrorStr(enum cpuTestBoolWithError result) +{ + switch (result) { + case FAIL: return "FAIL"; + case NO: return "NO"; + case YES: return "YES"; + } + + return "unknown"; +} + + +static int +cpuTestCompare(const void *arg) +{ + const struct data *data = arg; + int ret = -1; + virCPUDefPtr host = NULL; + virCPUDefPtr cpu = NULL; + virCPUCompareResult result; + + if (!(host = cpuTestLoadXML(data->arch, data->host)) || + !(cpu = cpuTestLoadXML(data->arch, data->name))) + goto cleanup; + + result = cpuCompare(host, cpu); + if (data->result == VIR_CPU_COMPARE_ERROR) + virResetLastError(); + + if (data->result != result) { + if (virTestGetVerbose()) { + fprintf(stderr, "\nExpected result %s, got %s\n", + cpuTestCompResStr(data->result), + cpuTestCompResStr(result)); + /* Pad to line up with test name ... in virTestRun */ + fprintf(stderr, "%74s", "... "); + } + goto cleanup; + } + + ret = 0; + +cleanup: + virCPUDefFree(host); + virCPUDefFree(cpu); + return ret; +} + + +static int +cpuTestGuestData(const void *arg) +{ + const struct data *data = arg; + int ret = -1; + virCPUDefPtr host = NULL; + virCPUDefPtr cpu = NULL; + virCPUDefPtr guest = NULL; + union cpuData *guestData = NULL; + virCPUCompareResult cmpResult; + virBuffer buf = VIR_BUFFER_INITIALIZER; + char *result = NULL; + + if (!(host = cpuTestLoadXML(data->arch, data->host)) || + !(cpu = cpuTestLoadXML(data->arch, data->name))) + goto cleanup; + + cmpResult = cpuGuestData(host, cpu, &guestData); + if (cmpResult == VIR_CPU_COMPARE_ERROR || + cmpResult == VIR_CPU_COMPARE_INCOMPATIBLE) + goto cleanup; + + if (VIR_ALLOC(guest) < 0 || !(guest->arch = strdup(host->arch))) + goto cleanup; + + guest->type = VIR_CPU_TYPE_GUEST; + guest->match = VIR_CPU_MATCH_EXACT; + if (cpuDecode(guest, guestData, data->models, + data->nmodels, data->preferred) < 0) { + if (data->result < 0) { + virResetLastError(); + ret = 0; + } + goto cleanup; + } + + virBufferVSprintf(&buf, "%s+%s", data->host, data->name); + if (data->nmodels) + virBufferVSprintf(&buf, ",%s", data->modelsName); + if (data->preferred) + virBufferVSprintf(&buf, ",%s", data->preferred); + virBufferAddLit(&buf, "-result"); + + if (virBufferError(&buf)) { + virBufferFreeAndReset(&buf); + goto cleanup; + } + result = virBufferContentAndReset(&buf); + + ret = cpuTestCompareXML(data->arch, guest, result); + +cleanup: + VIR_FREE(result); + cpuDataFree(host->arch, guestData); + virCPUDefFree(host); + virCPUDefFree(cpu); + virCPUDefFree(guest); + return ret; +} + + +static int +cpuTestBaseline(const void *arg) +{ + const struct data *data = arg; + int ret = -1; + virCPUDefPtr *cpus = NULL; + virCPUDefPtr baseline = NULL; + unsigned int ncpus = 0; + char result[PATH_MAX]; + unsigned int i; + + if (!(cpus = cpuTestLoadMultiXML(data->arch, data->name, &ncpus))) + goto cleanup; + + baseline = cpuBaseline(cpus, ncpus, NULL, 0); + if (data->result < 0) { + virResetLastError(); + if (!baseline) + ret = 0; + else if (virTestGetVerbose()) { + fprintf(stderr, "\n%-70s... ", + "cpuBaseline was expected to fail but it succeeded"); + } + goto cleanup; + } + if (!baseline) + goto cleanup; + + snprintf(result, PATH_MAX, "%s-result", data->name); + if (cpuTestCompareXML(data->arch, baseline, result) < 0) + goto cleanup; + + for (i = 0; i < ncpus; i++) { + virCPUCompareResult cmp; + + cmp = cpuCompare(cpus[i], baseline); + if (cmp != VIR_CPU_COMPARE_SUPERSET && + cmp != VIR_CPU_COMPARE_IDENTICAL) { + if (virTestGetVerbose()) { + fprintf(stderr, + "\nbaseline CPU is incompatible with CPU %u\n", i); + fprintf(stderr, "%74s", "... "); + } + ret = -1; + goto cleanup; + } + } + + ret = 0; + +cleanup: + if (cpus) { + for (i = 0; i < ncpus; i++) + virCPUDefFree(cpus[i]); + free(cpus); + } + virCPUDefFree(baseline); + return ret; +} + + +static int +cpuTestUpdate(const void *arg) +{ + const struct data *data = arg; + int ret = -1; + virCPUDefPtr host = NULL; + virCPUDefPtr cpu = NULL; + char result[PATH_MAX]; + + if (!(host = cpuTestLoadXML(data->arch, data->host)) || + !(cpu = cpuTestLoadXML(data->arch, data->name))) + goto cleanup; + + if (cpuUpdate(cpu, host) < 0) + goto cleanup; + + snprintf(result, PATH_MAX, "%s+%s", data->host, data->name); + ret = cpuTestCompareXML(data->arch, cpu, result); + +cleanup: + virCPUDefFree(host); + virCPUDefFree(cpu); + return ret; +} + + +static int +cpuTestHasFeature(const void *arg) +{ + const struct data *data = arg; + int ret = -1; + virCPUDefPtr host = NULL; + union cpuData *hostData = NULL; + int result; + + if (!(host = cpuTestLoadXML(data->arch, data->host))) + goto cleanup; + + if (cpuEncode(host->arch, host, NULL, &hostData, + NULL, NULL, NULL, NULL) < 0) + goto cleanup; + + result = cpuHasFeature(host->arch, hostData, data->name); + if (data->result == -1) + virResetLastError(); + + if (data->result != result) { + if (virTestGetVerbose()) { + fprintf(stderr, "\nExpected result %s, got %s\n", + cpuTestBoolWithErrorStr(data->result), + cpuTestBoolWithErrorStr(result)); + /* Pad to line up with test name ... in virTestRun */ + fprintf(stderr, "%74s", "... "); + } + goto cleanup; + } + + ret = 0; + +cleanup: + if (host) + cpuDataFree(host->arch, hostData); + virCPUDefFree(host); + return ret; +} + + +static int (*cpuTest[])(const void *) = { + cpuTestCompare, + cpuTestGuestData, + cpuTestBaseline, + cpuTestUpdate, + cpuTestHasFeature +}; + + +static int +cpuTestRun(const char *name, const struct data *data) +{ + char label[PATH_MAX]; + + snprintf(label, PATH_MAX, "CPU %s(%s): %s", + apis[data->api], data->arch, name); + + free(virtTestLogContentAndReset()); + + if (virtTestRun(label, 1, cpuTest[data->api], data) < 0) { + if (virTestGetDebug()) { + char *log; + if ((log = virtTestLogContentAndReset()) && + strlen(log) > 0) + fprintf(stderr, "\n%s\n", log); + free(log); + } + return -1; + } + + return 0; +} + + +static const char *model486[] = { "486" }; +static const char *nomodel[] = { "nomodel" }; +static const char *models[] = { "qemu64", "core2duo", "Nehalem" }; + +static int +mymain(int argc, char **argv) +{ + int ret = 0; + char cwd[PATH_MAX]; + char map[PATH_MAX]; + + progname = argv[0]; + + if (argc > 1) { + fprintf(stderr, "Usage: %s\n", progname); + return EXIT_FAILURE; + } + + abs_srcdir = getenv("abs_srcdir"); + if (!abs_srcdir) + abs_srcdir = getcwd(cwd, sizeof(cwd)); + + abs_top_srcdir = getenv("abs_top_srcdir"); + if (!abs_top_srcdir) + abs_top_srcdir = ".."; + + snprintf(map, PATH_MAX, "%s/src/cpu/cpu_map.xml", abs_top_srcdir); + if (cpuMapOverride(map) < 0) + return EXIT_FAILURE; + +#define DO_TEST(arch, api, name, host, cpu, \ + models, nmodels, preferred, result) \ + do { \ + struct data data = { \ + arch, api, host, cpu, models, \ + models == NULL ? NULL : #models, \ + nmodels, preferred, result \ + }; \ + if (cpuTestRun(name, &data) < 0) \ + ret = -1; \ + } while (0) + +#define DO_TEST_COMPARE(arch, host, cpu, result) \ + DO_TEST(arch, API_COMPARE, \ + host "/" cpu " (" #result ")", \ + host, cpu, NULL, 0, NULL, result) + +#define DO_TEST_UPDATE(arch, host, cpu, result) \ + do { \ + DO_TEST(arch, API_UPDATE, \ + cpu " on " host, \ + host, cpu, NULL, 0, NULL, 0); \ + DO_TEST_COMPARE(arch, host, host "+" cpu, result); \ + } while (0) + +#define DO_TEST_BASELINE(arch, name, result) \ + DO_TEST(arch, API_BASELINE, name, NULL, "baseline-" name, \ + NULL, 0, NULL, result) + +#define DO_TEST_HASFEATURE(arch, host, feature, result) \ + DO_TEST(arch, API_HAS_FEATURE, \ + host "/" feature " (" #result ")", \ + host, feature, NULL, 0, NULL, result) + +#define DO_TEST_GUESTDATA(arch, host, cpu, models, preferred, result) \ + DO_TEST(arch, API_GUEST_DATA, \ + host "/" cpu " (" #models ", pref=" #preferred ")", \ + host, cpu, models, \ + models == NULL ? 0 : sizeof(models) / sizeof(char *), \ + preferred, result) + + /* host to host comparison */ + DO_TEST_COMPARE("x86", "host", "host", IDENTICAL); + DO_TEST_COMPARE("x86", "host", "host-better", INCOMPATIBLE); + DO_TEST_COMPARE("x86", "host", "host-worse", SUPERSET); + DO_TEST_COMPARE("x86", "host", "host-amd-fake", INCOMPATIBLE); + DO_TEST_COMPARE("x86", "host", "host-incomp-arch", INCOMPATIBLE); + DO_TEST_COMPARE("x86", "host", "host-no-vendor", IDENTICAL); + DO_TEST_COMPARE("x86", "host-no-vendor", "host", INCOMPATIBLE); + + /* guest to host comparison */ + DO_TEST_COMPARE("x86", "host", "bogus-model", ERROR); + DO_TEST_COMPARE("x86", "host", "bogus-feature", ERROR); + DO_TEST_COMPARE("x86", "host", "min", SUPERSET); + DO_TEST_COMPARE("x86", "host", "pentium3", SUPERSET); + DO_TEST_COMPARE("x86", "host", "exact", SUPERSET); + DO_TEST_COMPARE("x86", "host", "exact-forbid", INCOMPATIBLE); + DO_TEST_COMPARE("x86", "host", "exact-forbid-extra", SUPERSET); + DO_TEST_COMPARE("x86", "host", "exact-disable", SUPERSET); + DO_TEST_COMPARE("x86", "host", "exact-disable2", SUPERSET); + DO_TEST_COMPARE("x86", "host", "exact-disable-extra", SUPERSET); + DO_TEST_COMPARE("x86", "host", "exact-require", SUPERSET); + DO_TEST_COMPARE("x86", "host", "exact-require-extra", INCOMPATIBLE); + DO_TEST_COMPARE("x86", "host", "exact-force", SUPERSET); + DO_TEST_COMPARE("x86", "host", "strict", INCOMPATIBLE); + DO_TEST_COMPARE("x86", "host", "strict-full", IDENTICAL); + DO_TEST_COMPARE("x86", "host", "strict-disable", IDENTICAL); + DO_TEST_COMPARE("x86", "host", "strict-force-extra", IDENTICAL); + DO_TEST_COMPARE("x86", "host", "guest", SUPERSET); + DO_TEST_COMPARE("x86", "host", "pentium3-amd", INCOMPATIBLE); + DO_TEST_COMPARE("x86", "host-amd", "pentium3-amd", SUPERSET); + DO_TEST_COMPARE("x86", "host-worse", "nehalem-force", IDENTICAL); + + /* guest updates for migration + * automatically compares host CPU with the result */ + DO_TEST_UPDATE("x86", "host", "min", IDENTICAL); + DO_TEST_UPDATE("x86", "host", "pentium3", IDENTICAL); + DO_TEST_UPDATE("x86", "host", "guest", SUPERSET); + + /* computing baseline CPUs */ + DO_TEST_BASELINE("x86", "incompatible-vendors", -1); + DO_TEST_BASELINE("x86", "no-vendor", 0); + DO_TEST_BASELINE("x86", "some-vendors", 0); + DO_TEST_BASELINE("x86", "1", 0); + DO_TEST_BASELINE("x86", "2", 0); + + /* CPU features */ + DO_TEST_HASFEATURE("x86", "host", "vmx", YES); + DO_TEST_HASFEATURE("x86", "host", "lm", YES); + DO_TEST_HASFEATURE("x86", "host", "sse4.1", YES); + DO_TEST_HASFEATURE("x86", "host", "3dnowext", NO); + DO_TEST_HASFEATURE("x86", "host", "skinit", NO); + DO_TEST_HASFEATURE("x86", "host", "foo", FAIL); + + /* computing guest data and decoding the data into a guest CPU XML */ + DO_TEST_GUESTDATA("x86", "host", "guest", NULL, NULL, 0); + DO_TEST_GUESTDATA("x86", "host-better", "pentium3", NULL, NULL, 0); + DO_TEST_GUESTDATA("x86", "host-better", "pentium3", NULL, "pentium3", 0); + DO_TEST_GUESTDATA("x86", "host-better", "pentium3", NULL, "core2duo", 0); + DO_TEST_GUESTDATA("x86", "host-worse", "guest", NULL, NULL, 0); + DO_TEST_GUESTDATA("x86", "host", "strict-force-extra", NULL, NULL, 0); + DO_TEST_GUESTDATA("x86", "host", "nehalem-force", NULL, NULL, 0); + DO_TEST_GUESTDATA("x86", "host", "guest", model486, NULL, 0); + DO_TEST_GUESTDATA("x86", "host", "guest", models, NULL, 0); + DO_TEST_GUESTDATA("x86", "host", "guest", models, "Penryn", 0); + DO_TEST_GUESTDATA("x86", "host", "guest", models, "qemu64", 0); + DO_TEST_GUESTDATA("x86", "host", "guest", nomodel, NULL, -1); + + return (ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE); +} + +VIRT_TEST_MAIN(mymain) diff --git a/tests/cputestdata/x86-baseline-1-result.xml b/tests/cputestdata/x86-baseline-1-result.xml new file mode 100644 index 0000000..e376f74 --- /dev/null +++ b/tests/cputestdata/x86-baseline-1-result.xml @@ -0,0 +1,5 @@ +<cpu match='exact'> + <model>Conroe</model> + <vendor>Intel</vendor> + <feature policy='disable' name='lahf_lm'/> +</cpu> diff --git a/tests/cputestdata/x86-baseline-1.xml b/tests/cputestdata/x86-baseline-1.xml new file mode 100644 index 0000000..509e6a8 --- /dev/null +++ b/tests/cputestdata/x86-baseline-1.xml @@ -0,0 +1,20 @@ +<cpuTest> +<cpu> + <arch>x86_64</arch> + <model>Penryn</model> + <vendor>Intel</vendor> + <topology sockets='2' cores='4' threads='1'/> +</cpu> +<cpu> + <arch>x86_64</arch> + <model>Conroe</model> + <vendor>Intel</vendor> + <topology sockets='1' cores='1' threads='1'/> +</cpu> +<cpu> + <arch>x86_64</arch> + <model>core2duo</model> + <vendor>Intel</vendor> + <topology sockets='1' cores='1' threads='1'/> +</cpu> +</cpuTest> diff --git a/tests/cputestdata/x86-baseline-2-result.xml b/tests/cputestdata/x86-baseline-2-result.xml new file mode 100644 index 0000000..3fd0551 --- /dev/null +++ b/tests/cputestdata/x86-baseline-2-result.xml @@ -0,0 +1,4 @@ +<cpu match='exact'> + <model>core2duo</model> + <feature policy='disable' name='nx'/> +</cpu> diff --git a/tests/cputestdata/x86-baseline-2.xml b/tests/cputestdata/x86-baseline-2.xml new file mode 100644 index 0000000..055223f --- /dev/null +++ b/tests/cputestdata/x86-baseline-2.xml @@ -0,0 +1,22 @@ +<cpuTest> +<cpu> + <arch>x86_64</arch> + <model>core2duo</model> + <topology sockets='1' cores='2' threads='1'/> +</cpu> +<cpu> + <arch>x86_64</arch> + <model>pentiumpro</model> + <topology sockets='1' cores='2' threads='1'/> + <feature name='mtrr'/> + <feature name='clflush'/> + <feature name='mca'/> + <feature name='vme'/> + <feature name='pse36'/> + <feature name='pni'/> + <feature name='monitor'/> + <feature name='ssse3'/> + <feature name='lm'/> + <feature name='syscall'/> +</cpu> +</cpuTest> diff --git a/tests/cputestdata/x86-baseline-incompatible-vendors.xml b/tests/cputestdata/x86-baseline-incompatible-vendors.xml new file mode 100644 index 0000000..ead1fbf --- /dev/null +++ b/tests/cputestdata/x86-baseline-incompatible-vendors.xml @@ -0,0 +1,14 @@ +<cpuTest> +<cpu> + <arch>x86_64</arch> + <model>Penryn</model> + <vendor>Intel</vendor> + <topology sockets='2' cores='4' threads='1'/> +</cpu> +<cpu> + <arch>x86_64</arch> + <model>Opteron_G3</model> + <vendor>AMD</vendor> + <topology sockets='1' cores='1' threads='1'/> +</cpu> +</cpuTest> diff --git a/tests/cputestdata/x86-baseline-no-vendor-result.xml b/tests/cputestdata/x86-baseline-no-vendor-result.xml new file mode 100644 index 0000000..0fc0892 --- /dev/null +++ b/tests/cputestdata/x86-baseline-no-vendor-result.xml @@ -0,0 +1,5 @@ +<cpu match='exact'> + <model>Opteron_G2</model> + <feature policy='disable' name='svm'/> + <feature policy='disable' name='rdtscp'/> +</cpu> diff --git a/tests/cputestdata/x86-baseline-no-vendor.xml b/tests/cputestdata/x86-baseline-no-vendor.xml new file mode 100644 index 0000000..84605a4 --- /dev/null +++ b/tests/cputestdata/x86-baseline-no-vendor.xml @@ -0,0 +1,12 @@ +<cpuTest> +<cpu> + <arch>x86_64</arch> + <model>Penryn</model> + <topology sockets='2' cores='4' threads='1'/> +</cpu> +<cpu> + <arch>x86_64</arch> + <model>Opteron_G3</model> + <topology sockets='1' cores='1' threads='1'/> +</cpu> +</cpuTest> diff --git a/tests/cputestdata/x86-baseline-some-vendors-result.xml b/tests/cputestdata/x86-baseline-some-vendors-result.xml new file mode 100644 index 0000000..2ddfcc5 --- /dev/null +++ b/tests/cputestdata/x86-baseline-some-vendors-result.xml @@ -0,0 +1,3 @@ +<cpu match='exact'> + <model>Opteron_G1</model> +</cpu> diff --git a/tests/cputestdata/x86-baseline-some-vendors.xml b/tests/cputestdata/x86-baseline-some-vendors.xml new file mode 100644 index 0000000..816ed6b --- /dev/null +++ b/tests/cputestdata/x86-baseline-some-vendors.xml @@ -0,0 +1,13 @@ +<cpuTest> +<cpu> + <arch>x86_64</arch> + <model>Opteron_G1</model> + <topology sockets='2' cores='4' threads='1'/> +</cpu> +<cpu> + <arch>x86_64</arch> + <model>Opteron_G3</model> + <vendor>AMD</vendor> + <topology sockets='1' cores='1' threads='1'/> +</cpu> +</cpuTest> diff --git a/tests/cputestdata/x86-bogus-feature.xml b/tests/cputestdata/x86-bogus-feature.xml new file mode 100644 index 0000000..5a11814 --- /dev/null +++ b/tests/cputestdata/x86-bogus-feature.xml @@ -0,0 +1,4 @@ +<cpu match='minimum'> + <model>Penryn</model> + <feature name='bogus' policy='optional'/> +</cpu> diff --git a/tests/cputestdata/x86-bogus-model.xml b/tests/cputestdata/x86-bogus-model.xml new file mode 100644 index 0000000..f39392f --- /dev/null +++ b/tests/cputestdata/x86-bogus-model.xml @@ -0,0 +1,3 @@ +<cpu match='minimum'> + <model>Bogus</model> +</cpu> diff --git a/tests/cputestdata/x86-bogus-vendor.xml b/tests/cputestdata/x86-bogus-vendor.xml new file mode 100644 index 0000000..2ffdefe --- /dev/null +++ b/tests/cputestdata/x86-bogus-vendor.xml @@ -0,0 +1,4 @@ +<cpu match='minimum'> + <model>Penryn</model> + <vendor>Bogus</vendor> +</cpu> diff --git a/tests/cputestdata/x86-exact-disable-extra.xml b/tests/cputestdata/x86-exact-disable-extra.xml new file mode 100644 index 0000000..c84bd5b --- /dev/null +++ b/tests/cputestdata/x86-exact-disable-extra.xml @@ -0,0 +1,4 @@ +<cpu match='exact'> + <model>Penryn</model> + <feature name='3dnowext' policy='disable'/> +</cpu> diff --git a/tests/cputestdata/x86-exact-disable.xml b/tests/cputestdata/x86-exact-disable.xml new file mode 100644 index 0000000..202eb27 --- /dev/null +++ b/tests/cputestdata/x86-exact-disable.xml @@ -0,0 +1,4 @@ +<cpu match='exact'> + <model>Penryn</model> + <feature name='vmx' policy='disable'/> +</cpu> diff --git a/tests/cputestdata/x86-exact-disable2.xml b/tests/cputestdata/x86-exact-disable2.xml new file mode 100644 index 0000000..9baa58b --- /dev/null +++ b/tests/cputestdata/x86-exact-disable2.xml @@ -0,0 +1,5 @@ +<cpu match='exact'> + <model>Nehalem</model> + <feature name='popcnt' policy='disable'/> + <feature name='sse4.2' policy='disable'/> +</cpu> diff --git a/tests/cputestdata/x86-exact-forbid-extra.xml b/tests/cputestdata/x86-exact-forbid-extra.xml new file mode 100644 index 0000000..0a261ad --- /dev/null +++ b/tests/cputestdata/x86-exact-forbid-extra.xml @@ -0,0 +1,4 @@ +<cpu match='exact'> + <model>Penryn</model> + <feature name='3dnowext' policy='forbid'/> +</cpu> diff --git a/tests/cputestdata/x86-exact-forbid.xml b/tests/cputestdata/x86-exact-forbid.xml new file mode 100644 index 0000000..d9660ca --- /dev/null +++ b/tests/cputestdata/x86-exact-forbid.xml @@ -0,0 +1,4 @@ +<cpu match='exact'> + <model>Penryn</model> + <feature name='vmx' policy='forbid'/> +</cpu> diff --git a/tests/cputestdata/x86-exact-force.xml b/tests/cputestdata/x86-exact-force.xml new file mode 100644 index 0000000..c0fa127 --- /dev/null +++ b/tests/cputestdata/x86-exact-force.xml @@ -0,0 +1,4 @@ +<cpu match='exact'> + <model>Penryn</model> + <feature name='3dnowext' policy='force'/> +</cpu> diff --git a/tests/cputestdata/x86-exact-require-extra.xml b/tests/cputestdata/x86-exact-require-extra.xml new file mode 100644 index 0000000..5e89cda --- /dev/null +++ b/tests/cputestdata/x86-exact-require-extra.xml @@ -0,0 +1,4 @@ +<cpu match='exact'> + <model>Penryn</model> + <feature name='3dnowext' policy='require'/> +</cpu> diff --git a/tests/cputestdata/x86-exact-require.xml b/tests/cputestdata/x86-exact-require.xml new file mode 100644 index 0000000..2d196df --- /dev/null +++ b/tests/cputestdata/x86-exact-require.xml @@ -0,0 +1,4 @@ +<cpu match='exact'> + <model>Penryn</model> + <feature name='sse4.1' policy='require'/> +</cpu> diff --git a/tests/cputestdata/x86-exact.xml b/tests/cputestdata/x86-exact.xml new file mode 100644 index 0000000..18b7ef4 --- /dev/null +++ b/tests/cputestdata/x86-exact.xml @@ -0,0 +1,3 @@ +<cpu match='exact'> + <model>Penryn</model> +</cpu> diff --git a/tests/cputestdata/x86-guest.xml b/tests/cputestdata/x86-guest.xml new file mode 100644 index 0000000..d8685e6 --- /dev/null +++ b/tests/cputestdata/x86-guest.xml @@ -0,0 +1,18 @@ +<cpu match='exact'> + <model>Penryn</model> + <topology sockets='2' cores='4' threads='1'/> + <!--feature name='sse4.1' policy='optional'/--> + <feature name='dca' policy='optional'/> + <feature name='xtpr' policy='optional'/> + <feature name='sse4.2' policy='optional'/> + <feature name='3dnow' policy='optional'/> + <feature name='ssse3' policy='optional'/> + <feature name='vmx' policy='disable'/> + <feature name='ds_cpl' policy='disable'/> + <feature name='sse' policy='disable'/> + <feature name='monitor' policy='force'/> + <feature name='pbe' policy='force'/> + <feature name='3dnowext' policy='force'/> + <feature name='svm' policy='force'/> + <feature name='popcnt' policy='forbid'/> +</cpu> diff --git a/tests/cputestdata/x86-host+guest,model486-result.xml b/tests/cputestdata/x86-host+guest,model486-result.xml new file mode 100644 index 0000000..fb1bb4b --- /dev/null +++ b/tests/cputestdata/x86-host+guest,model486-result.xml @@ -0,0 +1,37 @@ +<cpu match='exact'> + <arch>x86_64</arch> + <model>486</model> + <feature policy='require' name='svm'/> + <feature policy='require' name='lahf_lm'/> + <feature policy='require' name='3dnowext'/> + <feature policy='require' name='lm'/> + <feature policy='require' name='nx'/> + <feature policy='require' name='syscall'/> + <feature policy='require' name='sse4.1'/> + <feature policy='require' name='dca'/> + <feature policy='require' name='xtpr'/> + <feature policy='require' name='cx16'/> + <feature policy='require' name='ssse3'/> + <feature policy='require' name='monitor'/> + <feature policy='require' name='pni'/> + <feature policy='require' name='pbe'/> + <feature policy='require' name='sse2'/> + <feature policy='require' name='fxsr'/> + <feature policy='require' name='mmx'/> + <feature policy='require' name='clflush'/> + <feature policy='require' name='pse36'/> + <feature policy='require' name='pat'/> + <feature policy='require' name='cmov'/> + <feature policy='require' name='mca'/> + <feature policy='require' name='pge'/> + <feature policy='require' name='mtrr'/> + <feature policy='require' name='sep'/> + <feature policy='require' name='apic'/> + <feature policy='require' name='cx8'/> + <feature policy='require' name='mce'/> + <feature policy='require' name='pae'/> + <feature policy='require' name='msr'/> + <feature policy='require' name='tsc'/> + <feature policy='require' name='de'/> + <feature policy='disable' name='vme'/> +</cpu> diff --git a/tests/cputestdata/x86-host+guest,models,Penryn-result.xml b/tests/cputestdata/x86-host+guest,models,Penryn-result.xml new file mode 100644 index 0000000..9559465 --- /dev/null +++ b/tests/cputestdata/x86-host+guest,models,Penryn-result.xml @@ -0,0 +1,13 @@ +<cpu match='exact'> + <arch>x86_64</arch> + <model>Nehalem</model> + <feature policy='require' name='svm'/> + <feature policy='require' name='3dnowext'/> + <feature policy='require' name='dca'/> + <feature policy='require' name='xtpr'/> + <feature policy='require' name='monitor'/> + <feature policy='require' name='pbe'/> + <feature policy='disable' name='popcnt'/> + <feature policy='disable' name='sse4.2'/> + <feature policy='disable' name='sse'/> +</cpu> diff --git a/tests/cputestdata/x86-host+guest,models,qemu64-result.xml b/tests/cputestdata/x86-host+guest,models,qemu64-result.xml new file mode 100644 index 0000000..b41863e --- /dev/null +++ b/tests/cputestdata/x86-host+guest,models,qemu64-result.xml @@ -0,0 +1,14 @@ +<cpu match='exact'> + <arch>x86_64</arch> + <model>qemu64</model> + <feature policy='require' name='lahf_lm'/> + <feature policy='require' name='3dnowext'/> + <feature policy='require' name='sse4.1'/> + <feature policy='require' name='dca'/> + <feature policy='require' name='xtpr'/> + <feature policy='require' name='cx16'/> + <feature policy='require' name='ssse3'/> + <feature policy='require' name='monitor'/> + <feature policy='require' name='pbe'/> + <feature policy='disable' name='sse'/> +</cpu> diff --git a/tests/cputestdata/x86-host+guest,models-result.xml b/tests/cputestdata/x86-host+guest,models-result.xml new file mode 100644 index 0000000..9559465 --- /dev/null +++ b/tests/cputestdata/x86-host+guest,models-result.xml @@ -0,0 +1,13 @@ +<cpu match='exact'> + <arch>x86_64</arch> + <model>Nehalem</model> + <feature policy='require' name='svm'/> + <feature policy='require' name='3dnowext'/> + <feature policy='require' name='dca'/> + <feature policy='require' name='xtpr'/> + <feature policy='require' name='monitor'/> + <feature policy='require' name='pbe'/> + <feature policy='disable' name='popcnt'/> + <feature policy='disable' name='sse4.2'/> + <feature policy='disable' name='sse'/> +</cpu> diff --git a/tests/cputestdata/x86-host+guest-result.xml b/tests/cputestdata/x86-host+guest-result.xml new file mode 100644 index 0000000..544a388 --- /dev/null +++ b/tests/cputestdata/x86-host+guest-result.xml @@ -0,0 +1,11 @@ +<cpu match='exact'> + <arch>x86_64</arch> + <model>Penryn</model> + <feature policy='require' name='svm'/> + <feature policy='require' name='3dnowext'/> + <feature policy='require' name='dca'/> + <feature policy='require' name='xtpr'/> + <feature policy='require' name='monitor'/> + <feature policy='require' name='pbe'/> + <feature policy='disable' name='sse'/> +</cpu> diff --git a/tests/cputestdata/x86-host+guest.xml b/tests/cputestdata/x86-host+guest.xml new file mode 100644 index 0000000..c3fca87 --- /dev/null +++ b/tests/cputestdata/x86-host+guest.xml @@ -0,0 +1,17 @@ +<cpu match='exact'> + <model>Penryn</model> + <topology sockets='2' cores='4' threads='1'/> + <feature policy='require' name='dca'/> + <feature policy='require' name='xtpr'/> + <feature policy='disable' name='sse4.2'/> + <feature policy='disable' name='3dnow'/> + <feature policy='require' name='ssse3'/> + <feature policy='disable' name='vmx'/> + <feature policy='disable' name='ds_cpl'/> + <feature policy='disable' name='sse'/> + <feature policy='force' name='monitor'/> + <feature policy='force' name='pbe'/> + <feature policy='force' name='3dnowext'/> + <feature policy='force' name='svm'/> + <feature policy='forbid' name='popcnt'/> +</cpu> diff --git a/tests/cputestdata/x86-host+min.xml b/tests/cputestdata/x86-host+min.xml new file mode 100644 index 0000000..d22c7b6 --- /dev/null +++ b/tests/cputestdata/x86-host+min.xml @@ -0,0 +1,17 @@ +<cpu match='exact'> + <model>Penryn</model> + <feature policy='require' name='dca'/> + <feature policy='require' name='xtpr'/> + <feature policy='require' name='tm2'/> + <feature policy='require' name='est'/> + <feature policy='require' name='vmx'/> + <feature policy='require' name='ds_cpl'/> + <feature policy='require' name='monitor'/> + <feature policy='require' name='pbe'/> + <feature policy='require' name='tm'/> + <feature policy='require' name='ht'/> + <feature policy='require' name='ss'/> + <feature policy='require' name='acpi'/> + <feature policy='require' name='ds'/> + <feature policy='require' name='vme'/> +</cpu> diff --git a/tests/cputestdata/x86-host+nehalem-force-result.xml b/tests/cputestdata/x86-host+nehalem-force-result.xml new file mode 100644 index 0000000..162685f --- /dev/null +++ b/tests/cputestdata/x86-host+nehalem-force-result.xml @@ -0,0 +1,4 @@ +<cpu match='exact'> + <arch>x86_64</arch> + <model>Nehalem</model> +</cpu> diff --git a/tests/cputestdata/x86-host+pentium3.xml b/tests/cputestdata/x86-host+pentium3.xml new file mode 100644 index 0000000..d141d9e --- /dev/null +++ b/tests/cputestdata/x86-host+pentium3.xml @@ -0,0 +1,27 @@ +<cpu match='exact'> + <model>pentium3</model> + <feature policy='require' name='lahf_lm'/> + <feature policy='require' name='lm'/> + <feature policy='require' name='nx'/> + <feature policy='require' name='syscall'/> + <feature policy='require' name='sse4.1'/> + <feature policy='require' name='dca'/> + <feature policy='require' name='xtpr'/> + <feature policy='require' name='cx16'/> + <feature policy='require' name='ssse3'/> + <feature policy='require' name='tm2'/> + <feature policy='require' name='est'/> + <feature policy='require' name='vmx'/> + <feature policy='require' name='ds_cpl'/> + <feature policy='require' name='monitor'/> + <feature policy='require' name='pni'/> + <feature policy='require' name='pbe'/> + <feature policy='require' name='tm'/> + <feature policy='require' name='ht'/> + <feature policy='require' name='ss'/> + <feature policy='require' name='sse2'/> + <feature policy='require' name='acpi'/> + <feature policy='require' name='ds'/> + <feature policy='require' name='clflush'/> + <feature policy='require' name='apic'/> +</cpu> diff --git a/tests/cputestdata/x86-host+strict-force-extra-result.xml b/tests/cputestdata/x86-host+strict-force-extra-result.xml new file mode 100644 index 0000000..e47933c --- /dev/null +++ b/tests/cputestdata/x86-host+strict-force-extra-result.xml @@ -0,0 +1,19 @@ +<cpu match='exact'> + <arch>x86_64</arch> + <model>Penryn</model> + <feature policy='require' name='3dnow'/> + <feature policy='require' name='dca'/> + <feature policy='require' name='xtpr'/> + <feature policy='require' name='tm2'/> + <feature policy='require' name='est'/> + <feature policy='require' name='vmx'/> + <feature policy='require' name='ds_cpl'/> + <feature policy='require' name='monitor'/> + <feature policy='require' name='pbe'/> + <feature policy='require' name='tm'/> + <feature policy='require' name='ht'/> + <feature policy='require' name='ss'/> + <feature policy='require' name='acpi'/> + <feature policy='require' name='ds'/> + <feature policy='require' name='vme'/> +</cpu> diff --git a/tests/cputestdata/x86-host-amd-fake.xml b/tests/cputestdata/x86-host-amd-fake.xml new file mode 100644 index 0000000..c81990a --- /dev/null +++ b/tests/cputestdata/x86-host-amd-fake.xml @@ -0,0 +1,20 @@ +<cpu> + <arch>x86_64</arch> + <model>Penryn</model> + <vendor>AMD</vendor> + <topology sockets='1' cores='4' threads='1'/> + <feature name='dca'/> + <feature name='xtpr'/> + <feature name='tm2'/> + <feature name='est'/> + <feature name='vmx'/> + <feature name='ds_cpl'/> + <feature name='monitor'/> + <feature name='pbe'/> + <feature name='tm'/> + <feature name='ht'/> + <feature name='ss'/> + <feature name='acpi'/> + <feature name='ds'/> + <feature name='vme'/> +</cpu> diff --git a/tests/cputestdata/x86-host-amd.xml b/tests/cputestdata/x86-host-amd.xml new file mode 100644 index 0000000..e662829 --- /dev/null +++ b/tests/cputestdata/x86-host-amd.xml @@ -0,0 +1,18 @@ +<cpu> + <arch>x86_64</arch> + <model>Opteron_G3</model> + <vendor>AMD</vendor> + <topology sockets='8' cores='1' threads='1'/> + <feature name='osvw'/> + <feature name='3dnowprefetch'/> + <feature name='cr8legacy'/> + <feature name='extapic'/> + <feature name='cmp_legacy'/> + <feature name='3dnow'/> + <feature name='3dnowext'/> + <feature name='pdpe1gb'/> + <feature name='fxsr_opt'/> + <feature name='mmxext'/> + <feature name='ht'/> + <feature name='vme'/> +</cpu> diff --git a/tests/cputestdata/x86-host-better+pentium3,core2duo-result.xml b/tests/cputestdata/x86-host-better+pentium3,core2duo-result.xml new file mode 100644 index 0000000..c2d8ddd --- /dev/null +++ b/tests/cputestdata/x86-host-better+pentium3,core2duo-result.xml @@ -0,0 +1,21 @@ +<cpu match='exact'> + <arch>x86_64</arch> + <model>core2duo</model> + <feature policy='require' name='lahf_lm'/> + <feature policy='require' name='popcnt'/> + <feature policy='require' name='sse4.2'/> + <feature policy='require' name='sse4.1'/> + <feature policy='require' name='dca'/> + <feature policy='require' name='xtpr'/> + <feature policy='require' name='cx16'/> + <feature policy='require' name='tm2'/> + <feature policy='require' name='est'/> + <feature policy='require' name='vmx'/> + <feature policy='require' name='ds_cpl'/> + <feature policy='require' name='pbe'/> + <feature policy='require' name='tm'/> + <feature policy='require' name='ht'/> + <feature policy='require' name='ss'/> + <feature policy='require' name='acpi'/> + <feature policy='require' name='ds'/> +</cpu> diff --git a/tests/cputestdata/x86-host-better+pentium3,pentium3-result.xml b/tests/cputestdata/x86-host-better+pentium3,pentium3-result.xml new file mode 100644 index 0000000..6e246a8 --- /dev/null +++ b/tests/cputestdata/x86-host-better+pentium3,pentium3-result.xml @@ -0,0 +1,30 @@ +<cpu match='exact'> + <arch>x86_64</arch> + <model>pentium3</model> + <feature policy='require' name='lahf_lm'/> + <feature policy='require' name='lm'/> + <feature policy='require' name='nx'/> + <feature policy='require' name='syscall'/> + <feature policy='require' name='popcnt'/> + <feature policy='require' name='sse4.2'/> + <feature policy='require' name='sse4.1'/> + <feature policy='require' name='dca'/> + <feature policy='require' name='xtpr'/> + <feature policy='require' name='cx16'/> + <feature policy='require' name='ssse3'/> + <feature policy='require' name='tm2'/> + <feature policy='require' name='est'/> + <feature policy='require' name='vmx'/> + <feature policy='require' name='ds_cpl'/> + <feature policy='require' name='monitor'/> + <feature policy='require' name='pni'/> + <feature policy='require' name='pbe'/> + <feature policy='require' name='tm'/> + <feature policy='require' name='ht'/> + <feature policy='require' name='ss'/> + <feature policy='require' name='sse2'/> + <feature policy='require' name='acpi'/> + <feature policy='require' name='ds'/> + <feature policy='require' name='clflush'/> + <feature policy='require' name='apic'/> +</cpu> diff --git a/tests/cputestdata/x86-host-better+pentium3-result.xml b/tests/cputestdata/x86-host-better+pentium3-result.xml new file mode 100644 index 0000000..b918363 --- /dev/null +++ b/tests/cputestdata/x86-host-better+pentium3-result.xml @@ -0,0 +1,18 @@ +<cpu match='exact'> + <arch>x86_64</arch> + <model>Nehalem</model> + <feature policy='require' name='dca'/> + <feature policy='require' name='xtpr'/> + <feature policy='require' name='tm2'/> + <feature policy='require' name='est'/> + <feature policy='require' name='vmx'/> + <feature policy='require' name='ds_cpl'/> + <feature policy='require' name='monitor'/> + <feature policy='require' name='pbe'/> + <feature policy='require' name='tm'/> + <feature policy='require' name='ht'/> + <feature policy='require' name='ss'/> + <feature policy='require' name='acpi'/> + <feature policy='require' name='ds'/> + <feature policy='require' name='vme'/> +</cpu> diff --git a/tests/cputestdata/x86-host-better.xml b/tests/cputestdata/x86-host-better.xml new file mode 100644 index 0000000..8340f11 --- /dev/null +++ b/tests/cputestdata/x86-host-better.xml @@ -0,0 +1,20 @@ +<cpu> + <arch>x86_64</arch> + <model>Nehalem</model> + <vendor>Intel</vendor> + <topology sockets='2' cores='4' threads='1'/> + <feature name='dca'/> + <feature name='xtpr'/> + <feature name='tm2'/> + <feature name='est'/> + <feature name='vmx'/> + <feature name='ds_cpl'/> + <feature name='monitor'/> + <feature name='pbe'/> + <feature name='tm'/> + <feature name='ht'/> + <feature name='ss'/> + <feature name='acpi'/> + <feature name='ds'/> + <feature name='vme'/> +</cpu> diff --git a/tests/cputestdata/x86-host-incomp-arch.xml b/tests/cputestdata/x86-host-incomp-arch.xml new file mode 100644 index 0000000..f7c064e --- /dev/null +++ b/tests/cputestdata/x86-host-incomp-arch.xml @@ -0,0 +1,6 @@ +<cpu> + <arch>ia64</arch> + <model>Penryn</model> + <vendor>Intel</vendor> + <topology sockets='1' cores='4' threads='1'/> +</cpu> diff --git a/tests/cputestdata/x86-host-no-vendor.xml b/tests/cputestdata/x86-host-no-vendor.xml new file mode 100644 index 0000000..efb0a44 --- /dev/null +++ b/tests/cputestdata/x86-host-no-vendor.xml @@ -0,0 +1,19 @@ +<cpu> + <arch>x86_64</arch> + <model>Penryn</model> + <topology sockets='2' cores='4' threads='1'/> + <feature name='dca'/> + <feature name='xtpr'/> + <feature name='tm2'/> + <feature name='est'/> + <feature name='vmx'/> + <feature name='ds_cpl'/> + <feature name='monitor'/> + <feature name='pbe'/> + <feature name='tm'/> + <feature name='ht'/> + <feature name='ss'/> + <feature name='acpi'/> + <feature name='ds'/> + <feature name='vme'/> +</cpu> diff --git a/tests/cputestdata/x86-host-worse+guest-result.xml b/tests/cputestdata/x86-host-worse+guest-result.xml new file mode 100644 index 0000000..036177a --- /dev/null +++ b/tests/cputestdata/x86-host-worse+guest-result.xml @@ -0,0 +1,9 @@ +<cpu match='exact'> + <arch>x86_64</arch> + <model>Penryn</model> + <feature policy='require' name='svm'/> + <feature policy='require' name='3dnowext'/> + <feature policy='require' name='monitor'/> + <feature policy='require' name='pbe'/> + <feature policy='disable' name='sse'/> +</cpu> diff --git a/tests/cputestdata/x86-host-worse.xml b/tests/cputestdata/x86-host-worse.xml new file mode 100644 index 0000000..dcf4670 --- /dev/null +++ b/tests/cputestdata/x86-host-worse.xml @@ -0,0 +1,6 @@ +<cpu> + <arch>x86_64</arch> + <model>Penryn</model> + <vendor>Intel</vendor> + <topology sockets='2' cores='4' threads='1'/> +</cpu> diff --git a/tests/cputestdata/x86-host.xml b/tests/cputestdata/x86-host.xml new file mode 100644 index 0000000..f1c163d --- /dev/null +++ b/tests/cputestdata/x86-host.xml @@ -0,0 +1,20 @@ +<cpu> + <arch>x86_64</arch> + <model>Penryn</model> + <vendor>Intel</vendor> + <topology sockets='2' cores='4' threads='1'/> + <feature name='dca'/> + <feature name='xtpr'/> + <feature name='tm2'/> + <feature name='est'/> + <feature name='vmx'/> + <feature name='ds_cpl'/> + <feature name='monitor'/> + <feature name='pbe'/> + <feature name='tm'/> + <feature name='ht'/> + <feature name='ss'/> + <feature name='acpi'/> + <feature name='ds'/> + <feature name='vme'/> +</cpu> diff --git a/tests/cputestdata/x86-min.xml b/tests/cputestdata/x86-min.xml new file mode 100644 index 0000000..795645d --- /dev/null +++ b/tests/cputestdata/x86-min.xml @@ -0,0 +1,3 @@ +<cpu match='minimum'> + <model>Penryn</model> +</cpu> diff --git a/tests/cputestdata/x86-nehalem-force.xml b/tests/cputestdata/x86-nehalem-force.xml new file mode 100644 index 0000000..4084b87 --- /dev/null +++ b/tests/cputestdata/x86-nehalem-force.xml @@ -0,0 +1,6 @@ +<cpu match='exact'> + <model>Penryn</model> + <feature name='popcnt' policy='force'/> + <feature name='sse4.2' policy='force'/> +</cpu> + diff --git a/tests/cputestdata/x86-pentium3-amd.xml b/tests/cputestdata/x86-pentium3-amd.xml new file mode 100644 index 0000000..5fd73e4 --- /dev/null +++ b/tests/cputestdata/x86-pentium3-amd.xml @@ -0,0 +1,4 @@ +<cpu match='exact'> + <model>pentium3</model> + <vendor>AMD</vendor> +</cpu> diff --git a/tests/cputestdata/x86-pentium3.xml b/tests/cputestdata/x86-pentium3.xml new file mode 100644 index 0000000..187e83d --- /dev/null +++ b/tests/cputestdata/x86-pentium3.xml @@ -0,0 +1,3 @@ +<cpu match='minimum'> + <model>pentium3</model> +</cpu> diff --git a/tests/cputestdata/x86-strict-disable.xml b/tests/cputestdata/x86-strict-disable.xml new file mode 100644 index 0000000..f2bac1a --- /dev/null +++ b/tests/cputestdata/x86-strict-disable.xml @@ -0,0 +1,18 @@ +<cpu match='strict'> + <model>Penryn</model> + <feature name='dca' policy='require'/> + <feature name='xtpr' policy='require'/> + <feature name='tm2' policy='require'/> + <feature name='est' policy='require'/> + <feature name='vmx' policy='require'/> + <feature name='ds_cpl' policy='require'/> + <feature name='monitor' policy='disable'/> + <feature name='pbe' policy='require'/> + <feature name='tm' policy='require'/> + <feature name='ht' policy='require'/> + <feature name='ss' policy='disable'/> + <feature name='acpi' policy='require'/> + <feature name='ds' policy='require'/> + <feature name='vme' policy='require'/> + <feature name='3dnow' policy='disable'/> +</cpu> diff --git a/tests/cputestdata/x86-strict-force-extra.xml b/tests/cputestdata/x86-strict-force-extra.xml new file mode 100644 index 0000000..dbae38c --- /dev/null +++ b/tests/cputestdata/x86-strict-force-extra.xml @@ -0,0 +1,18 @@ +<cpu match='strict'> + <model>Penryn</model> + <feature name='dca' policy='require'/> + <feature name='xtpr' policy='require'/> + <feature name='tm2' policy='require'/> + <feature name='est' policy='require'/> + <feature name='vmx' policy='require'/> + <feature name='ds_cpl' policy='require'/> + <feature name='monitor' policy='require'/> + <feature name='pbe' policy='require'/> + <feature name='tm' policy='require'/> + <feature name='ht' policy='require'/> + <feature name='ss' policy='require'/> + <feature name='acpi' policy='require'/> + <feature name='ds' policy='require'/> + <feature name='vme' policy='require'/> + <feature name='3dnow' policy='force'/> +</cpu> diff --git a/tests/cputestdata/x86-strict-full.xml b/tests/cputestdata/x86-strict-full.xml new file mode 100644 index 0000000..2dbe250 --- /dev/null +++ b/tests/cputestdata/x86-strict-full.xml @@ -0,0 +1,17 @@ +<cpu match='strict'> + <model>Penryn</model> + <feature name='dca' policy='require'/> + <feature name='xtpr' policy='require'/> + <feature name='tm2' policy='require'/> + <feature name='est' policy='require'/> + <feature name='vmx' policy='require'/> + <feature name='ds_cpl' policy='require'/> + <feature name='monitor' policy='require'/> + <feature name='pbe' policy='require'/> + <feature name='tm' policy='require'/> + <feature name='ht' policy='require'/> + <feature name='ss' policy='require'/> + <feature name='acpi' policy='require'/> + <feature name='ds' policy='require'/> + <feature name='vme' policy='require'/> +</cpu> diff --git a/tests/cputestdata/x86-strict.xml b/tests/cputestdata/x86-strict.xml new file mode 100644 index 0000000..a64c262 --- /dev/null +++ b/tests/cputestdata/x86-strict.xml @@ -0,0 +1,3 @@ +<cpu match='strict'> + <model>Penryn</model> +</cpu> -- 1.7.3.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list