libvirt/tests/lxcconf2xmltest.c
Julio Faracco daf4e2abca tests: Adding test case to include multiple network definitions.
This commit includes a test case for multiple network definitions. It is
useful right now, but it will be more useful when the index used by LXC
version 3.X is implemented to support this new settings. The version 3.X
is using indexes to specify each network settings.

Signed-off-by: Julio Faracco <jcfaracco@gmail.com>
ACKed-by: Michal Privoznik <mprivozn@redhat.com>
2018-12-11 15:03:08 -05:00

190 lines
4.4 KiB
C

#include <config.h>
#include "testutils.h"
#ifdef WITH_LXC
# include "lxc/lxc_native.h"
# include "lxc/lxc_conf.h"
# include "testutilslxc.h"
# define VIR_FROM_THIS VIR_FROM_NONE
static virCapsPtr caps;
static virDomainXMLOptionPtr xmlopt;
static int testSanitizeDef(virDomainDefPtr vmdef)
{
/* Remove UUID randomness */
if (virUUIDParse("c7a5fdbd-edaf-9455-926a-d65c16db1809", vmdef->uuid) < 0)
return -1;
return 0;
}
static int
testCompareXMLToConfigFiles(const char *xmlfile,
const char *configfile,
bool expectError)
{
int ret = -1;
char *config = NULL;
char *actualxml = NULL;
virDomainDefPtr vmdef = NULL;
if (virTestLoadFile(configfile, &config) < 0)
goto fail;
vmdef = lxcParseConfigString(config, caps, xmlopt);
if ((vmdef && expectError) || (!vmdef && !expectError))
goto fail;
if (vmdef) {
if (testSanitizeDef(vmdef) < 0)
goto fail;
if (!(actualxml = virDomainDefFormat(vmdef, caps, 0)))
goto fail;
if (virTestCompareToFile(actualxml, xmlfile) < 0)
goto fail;
}
ret = 0;
fail:
VIR_FREE(actualxml);
VIR_FREE(config);
virDomainDefFree(vmdef);
return ret;
}
struct testInfo {
const char *name;
bool expectError;
};
static int
testCompareXMLToConfigHelperLegacy(const void *data)
{
int result = -1;
const struct testInfo *info = data;
char *xml = NULL;
char *config = NULL;
if (virAsprintf(&xml, "%s/lxcconf2xmldata/lxcconf2xml-%s.xml",
abs_srcdir, info->name) < 0 ||
virAsprintf(&config, "%s/lxcconf2xmldata/lxcconf2xml-%s.config",
abs_srcdir, info->name) < 0)
goto cleanup;
result = testCompareXMLToConfigFiles(xml, config, info->expectError);
cleanup:
VIR_FREE(xml);
VIR_FREE(config);
return result;
}
static int
testCompareXMLToConfigHelperV3(const void *data)
{
int result = -1;
const struct testInfo *info = data;
char *xml = NULL;
char *config = NULL;
if (virAsprintf(&xml, "%s/lxcconf2xmldata/lxcconf2xml-%s.xml",
abs_srcdir, info->name) < 0 ||
virAsprintf(&config, "%s/lxcconf2xmldata/lxcconf2xml-%s-v3.config",
abs_srcdir, info->name) < 0)
goto cleanup;
result = testCompareXMLToConfigFiles(xml, config, info->expectError);
cleanup:
VIR_FREE(xml);
VIR_FREE(config);
return result;
}
static int
mymain(void)
{
int ret = EXIT_SUCCESS;
if (!(caps = testLXCCapsInit()))
return EXIT_FAILURE;
if (!(xmlopt = lxcDomainXMLConfInit())) {
virObjectUnref(caps);
return EXIT_FAILURE;
}
# define DO_TEST(name, expectError) \
do { \
const struct testInfo info = { name, expectError }; \
if (virTestRun("LXC Native-2-XML " name, \
testCompareXMLToConfigHelperLegacy, \
&info) < 0) \
ret = EXIT_FAILURE; \
} while (0)
DO_TEST("simple", false);
DO_TEST("fstab", true);
DO_TEST("nonetwork", false);
DO_TEST("nonenetwork", false);
DO_TEST("physnetwork", false);
DO_TEST("macvlannetwork", false);
DO_TEST("vlannetwork", false);
DO_TEST("miscnetwork", false);
DO_TEST("idmap", false);
DO_TEST("memtune", false);
DO_TEST("cputune", false);
DO_TEST("cpusettune", false);
DO_TEST("blkiotune", false);
DO_TEST("ethernet", false);
/* Tests for LXC 3.0 and higher */
# define DO_TEST3(name, expectError) \
do { \
const struct testInfo info = { name, expectError }; \
if (virTestRun("LXC Native-3-XML " name, \
testCompareXMLToConfigHelperV3, \
&info) < 0) \
ret = EXIT_FAILURE; \
} while (0)
DO_TEST3("simple", false);
DO_TEST3("fstab", true);
DO_TEST3("nonetwork", false);
DO_TEST3("nonenetwork", false);
DO_TEST3("physnetwork", false);
DO_TEST3("macvlannetwork", false);
DO_TEST3("vlannetwork", false);
DO_TEST3("miscnetwork", false);
DO_TEST3("idmap", false);
DO_TEST3("memtune", false);
DO_TEST3("cputune", false);
DO_TEST3("cpusettune", false);
DO_TEST3("blkiotune", false);
DO_TEST3("ethernet", false);
virObjectUnref(xmlopt);
virObjectUnref(caps);
return ret;
}
VIR_TEST_MAIN(mymain)
#else
int
main(void)
{
return EXIT_AM_SKIP;
}
#endif /* WITH_LXC */