mirror of
https://github.com/libvirt/libvirt.git
synced 2026-10-02 12:20:06 -05:00
Inside of tests/meson.build there is a section that builds QEMU related tests conditionally (for instance qemudomaincheckpointxml2xmltest). It makes no sense to have the same check inside source file. Or even provide alternative implementation for cases when building without QEMU (EXIT_AM_SKIP). When building without QEMU driver the test is not even compiled, so EXIT_AM_SKIP is dead code. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Laine Stump <laine@redhat.com>
190 lines
6.1 KiB
C
190 lines
6.1 KiB
C
#include <config.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <sys/types.h>
|
|
#include <fcntl.h>
|
|
|
|
#include "testutils.h"
|
|
#include "internal.h"
|
|
#include "qemu/qemu_conf.h"
|
|
#include "testutilsqemu.h"
|
|
|
|
#define VIR_FROM_THIS VIR_FROM_NONE
|
|
|
|
static virQEMUDriver driver;
|
|
|
|
enum {
|
|
TEST_INTERNAL = 1 << 0, /* Test use of INTERNAL parse/format flag */
|
|
TEST_REDEFINE = 1 << 1, /* Test use of REDEFINE parse flag */
|
|
TEST_RUNNING = 1 << 2, /* Set snapshot state to running after parse */
|
|
};
|
|
|
|
static int
|
|
testCompareXMLToXMLFiles(const char *inxml,
|
|
const char *outxml,
|
|
const char *uuid,
|
|
unsigned int flags)
|
|
{
|
|
g_autofree char *inXmlData = NULL;
|
|
g_autofree char *actual = NULL;
|
|
unsigned int parseflags = 0;
|
|
unsigned int formatflags = VIR_DOMAIN_SNAPSHOT_FORMAT_SECURE;
|
|
bool cur = false;
|
|
g_autoptr(virDomainSnapshotDef) def = NULL;
|
|
|
|
if (flags & TEST_INTERNAL) {
|
|
parseflags |= VIR_DOMAIN_SNAPSHOT_PARSE_INTERNAL;
|
|
formatflags |= VIR_DOMAIN_SNAPSHOT_FORMAT_INTERNAL;
|
|
}
|
|
|
|
if (flags & TEST_REDEFINE)
|
|
parseflags |= VIR_DOMAIN_SNAPSHOT_PARSE_REDEFINE;
|
|
|
|
if (virTestLoadFile(inxml, &inXmlData) < 0)
|
|
return -1;
|
|
|
|
if (!(def = virDomainSnapshotDefParseString(inXmlData,
|
|
driver.xmlopt, NULL, &cur,
|
|
parseflags)))
|
|
return -1;
|
|
if (cur) {
|
|
if (!(flags & TEST_INTERNAL))
|
|
return -1;
|
|
formatflags |= VIR_DOMAIN_SNAPSHOT_FORMAT_CURRENT;
|
|
}
|
|
if (flags & TEST_RUNNING) {
|
|
if (def->state)
|
|
return -1;
|
|
def->state = VIR_DOMAIN_RUNNING;
|
|
}
|
|
|
|
if (!(actual = virDomainSnapshotDefFormat(uuid, def,
|
|
driver.xmlopt,
|
|
formatflags)))
|
|
return -1;
|
|
|
|
if (virTestCompareToFile(actual, outxml) < 0)
|
|
return -1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
struct testInfo {
|
|
const char *inxml;
|
|
const char *outxml;
|
|
const char *uuid;
|
|
long long creationTime;
|
|
unsigned int flags;
|
|
};
|
|
static long long mocktime;
|
|
|
|
static int
|
|
testSnapshotPostParse(virDomainMomentDef *def)
|
|
{
|
|
if (!mocktime)
|
|
return 0;
|
|
if (def->creationTime)
|
|
return -1;
|
|
def->creationTime = mocktime;
|
|
if (!def->name)
|
|
def->name = g_strdup_printf("%lld", def->creationTime);
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
testCompareXMLToXMLHelper(const void *data)
|
|
{
|
|
const struct testInfo *info = data;
|
|
|
|
mocktime = info->creationTime;
|
|
return testCompareXMLToXMLFiles(info->inxml, info->outxml, info->uuid,
|
|
info->flags);
|
|
}
|
|
|
|
|
|
static int
|
|
mymain(void)
|
|
{
|
|
g_autoptr(GHashTable) capslatest = testQemuGetLatestCaps();
|
|
g_autoptr(GHashTable) capscache = virHashNew(virObjectUnref);
|
|
int ret = 0;
|
|
|
|
if (qemuTestDriverInit(&driver) < 0)
|
|
return EXIT_FAILURE;
|
|
|
|
if (testQemuInsertRealCaps(driver.qemuCapsCache, "x86_64", "latest", "",
|
|
capslatest, capscache, NULL, NULL) < 0)
|
|
return EXIT_FAILURE;
|
|
|
|
virDomainXMLOptionSetMomentPostParse(driver.xmlopt,
|
|
testSnapshotPostParse);
|
|
|
|
#define DO_TEST(prefix, name, inpath, outpath, uuid, time, flags) \
|
|
do { \
|
|
const struct testInfo info = {abs_srcdir "/" inpath "/" name ".xml", \
|
|
abs_srcdir "/" outpath "/" name ".xml", \
|
|
uuid, time, flags}; \
|
|
if (virTestRun("SNAPSHOT XML-2-XML " prefix " " name, \
|
|
testCompareXMLToXMLHelper, &info) < 0) \
|
|
ret = -1; \
|
|
} while (0)
|
|
|
|
#define DO_TEST_IN(name, uuid) DO_TEST("in->in", name, \
|
|
"qemudomainsnapshotxml2xmlin", \
|
|
"qemudomainsnapshotxml2xmlin", \
|
|
uuid, 0, 0)
|
|
|
|
#define DO_TEST_OUT(name, uuid, internal) \
|
|
DO_TEST("out->out", name, "qemudomainsnapshotxml2xmlout", \
|
|
"qemudomainsnapshotxml2xmlout", uuid, 0, internal | TEST_REDEFINE)
|
|
|
|
#define DO_TEST_INOUT(name, uuid, time, flags) \
|
|
DO_TEST("in->out", name, \
|
|
"qemudomainsnapshotxml2xmlin",\
|
|
"qemudomainsnapshotxml2xmlout",\
|
|
uuid, time, flags)
|
|
|
|
/* Unset or set all envvars here that are copied in qemudBuildCommandLine
|
|
* using ADD_ENV_COPY, otherwise these tests may fail due to unexpected
|
|
* values for these envvars */
|
|
g_setenv("PATH", "/bin", TRUE);
|
|
|
|
DO_TEST_OUT("all_parameters", "9d37b878-a7cc-9f9a-b78f-49b3abad25a8",
|
|
TEST_INTERNAL);
|
|
DO_TEST_OUT("disk_snapshot_redefine", "c7a5fdbd-edaf-9455-926a-d65c16db1809",
|
|
TEST_INTERNAL);
|
|
DO_TEST_OUT("full_domain", "c7a5fdbd-edaf-9455-926a-d65c16db1809",
|
|
TEST_INTERNAL);
|
|
DO_TEST_OUT("noparent_nodescription_noactive", NULL, 0);
|
|
DO_TEST_OUT("noparent_nodescription", NULL, TEST_INTERNAL);
|
|
DO_TEST_OUT("noparent", "9d37b878-a7cc-9f9a-b78f-49b3abad25a8", 0);
|
|
DO_TEST_OUT("metadata", "c7a5fdbd-edaf-9455-926a-d65c16db1809", 0);
|
|
DO_TEST_OUT("external_vm_redefine", "c7a5fdbd-edaf-9455-926a-d65c16db1809",
|
|
0);
|
|
|
|
DO_TEST_OUT("memory-snapshot-inactivedomain", "14beef2c-8cae-4ea8-bf55-e48fe0cd4b73", 0);
|
|
|
|
DO_TEST_INOUT("empty", "9d37b878-a7cc-9f9a-b78f-49b3abad25a8",
|
|
1386166249, 0);
|
|
DO_TEST_INOUT("noparent", "9d37b878-a7cc-9f9a-b78f-49b3abad25a8",
|
|
1272917631, TEST_RUNNING);
|
|
DO_TEST_INOUT("external_vm", NULL, 1555419243, 0);
|
|
DO_TEST_INOUT("disk_snapshot", NULL, 1555419243, 0);
|
|
DO_TEST_INOUT("disk_driver_name_null", NULL, 1555419243, 0);
|
|
DO_TEST_INOUT("disk-seclabel", "9d37b878-a7cc-9f9a-b78f-49b3abad25a8", 581484660, 0);
|
|
|
|
DO_TEST_IN("name_and_description", NULL);
|
|
DO_TEST_IN("description_only", NULL);
|
|
DO_TEST_IN("name_only", NULL);
|
|
|
|
DO_TEST_INOUT("qcow2-metadata-cache", "9d37b878-a7cc-9f9a-b78f-49b3abad25a8",
|
|
1386166249, 0);
|
|
|
|
qemuTestDriverFree(&driver);
|
|
|
|
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
|
}
|
|
|
|
VIR_TEST_MAIN(mymain)
|