libvirt/tests/vmx2xmltest.c
Martin Kletzander 9c9fc39ded tests: Fix vmx/xml filenames
Commit 70768cda97 added a functionality that was previously (in an unsubmitted
version of the commit) represented differently in the XML, but the filenames
kept the old name.  Fix the name so they are not misleading.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Reviewed-by: Ján Tomko <jtomko@redhat.com>
2022-08-18 08:34:30 +02:00

303 lines
7.6 KiB
C

#include <config.h>
#include "testutils.h"
#ifdef WITH_VMX
# include <unistd.h>
# include "internal.h"
# include "vmx/vmx.h"
# define VIR_FROM_THIS VIR_FROM_VMWARE
static virCaps *caps;
static virDomainXMLOption *xmlopt;
static virVMXContext ctx;
static void
testCapsInit(void)
{
virCapsGuest *guest = NULL;
caps = virCapabilitiesNew(VIR_ARCH_I686, true, true);
if (caps == NULL)
return;
virCapabilitiesAddHostMigrateTransport(caps, "vpxmigr");
/* i686 guest */
guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM,
VIR_ARCH_I686,
NULL, NULL, 0, NULL);
virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_VMWARE,
NULL, NULL, 0, NULL);
/* x86_64 guest */
guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM,
VIR_ARCH_X86_64,
NULL, NULL, 0, NULL);
virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_VMWARE,
NULL, NULL, 0, NULL);
}
static int
testCompareFiles(const char *vmx, const char *xml, bool should_fail_parse)
{
g_autofree char *vmxData = NULL;
g_autofree char *formatted = NULL;
g_autoptr(virDomainDef) def = NULL;
if (virTestLoadFile(vmx, &vmxData) < 0)
return -1;
def = virVMXParseConfig(&ctx, xmlopt, caps, vmxData);
if (should_fail_parse) {
if (!def)
return 0;
VIR_TEST_DEBUG("passed instead of expected failure");
return -1;
}
if (!def)
return -1;
if (!virDomainDefCheckABIStability(def, def, xmlopt)) {
fprintf(stderr, "ABI stability check failed on %s", vmx);
return -1;
}
if (!(formatted = virDomainDefFormat(def, xmlopt,
VIR_DOMAIN_DEF_FORMAT_SECURE)))
return -1;
if (virTestCompareToFile(formatted, xml) < 0)
return -1;
return 0;
}
struct testInfo {
const char *file;
bool should_fail;
};
static int
testCompareHelper(const void *data)
{
int ret = -1;
const struct testInfo *info = data;
g_autofree char *vmx = NULL;
g_autofree char *xml = NULL;
vmx = g_strdup_printf("%s/vmx2xmldata/%s.vmx", abs_srcdir,
info->file);
xml = g_strdup_printf("%s/vmx2xmldata/%s.xml", abs_srcdir,
info->file);
ret = testCompareFiles(vmx, xml, info->should_fail);
return ret;
}
static int
testParseVMXFileName(const char *fileName,
void *opaque G_GNUC_UNUSED,
char **src,
bool allow_missing)
{
g_autofree char *copyOfFileName = NULL;
char *tmp = NULL;
char *saveptr = NULL;
char *datastoreName = NULL;
char *directoryAndFileName = NULL;
*src = NULL;
if (STRPREFIX(fileName, "/vmfs/volumes/")) {
/* Found absolute path referencing a file inside a datastore */
copyOfFileName = g_strdup(fileName);
/* Expected format: '/vmfs/volumes/<datastore>/<path>' */
if ((tmp = STRSKIP(copyOfFileName, "/vmfs/volumes/")) == NULL ||
(datastoreName = strtok_r(tmp, "/", &saveptr)) == NULL ||
(directoryAndFileName = strtok_r(NULL, "", &saveptr)) == NULL) {
return -1;
}
if (STREQ(datastoreName, "missing") ||
STRPREFIX(directoryAndFileName, "missing")) {
if (allow_missing)
return 0;
virReportError(VIR_ERR_INTERNAL_ERROR,
"Referenced missing file '%s'", fileName);
return -1;
}
*src = g_strdup_printf("[%s] %s", datastoreName, directoryAndFileName);
} else if (STRPREFIX(fileName, "/")) {
/* Found absolute path referencing a file outside a datastore */
*src = g_strdup(fileName);
} else if (strchr(fileName, '/') != NULL) {
/* Found relative path, this is not supported */
return -1;
} else {
/* Found single file name referencing a file inside a datastore */
*src = g_strdup_printf("[datastore] directory/%s", fileName);
}
return 0;
}
static int
mymain(void)
{
int ret = 0;
# define DO_TEST_FULL(file, should_fail) \
do { \
struct testInfo info = { file, should_fail }; \
virResetLastError(); \
if (virTestRun("VMware VMX-2-XML " file, \
testCompareHelper, &info) < 0) { \
ret = -1; \
} \
} while (0)
# define DO_TEST(file) DO_TEST_FULL(file, false)
# define DO_TEST_FAIL(file) DO_TEST_FULL(file, true)
testCapsInit();
if (caps == NULL)
return EXIT_FAILURE;
if (!(xmlopt = virVMXDomainXMLConfInit(caps)))
return EXIT_FAILURE;
ctx.opaque = NULL;
ctx.parseFileName = testParseVMXFileName;
ctx.formatFileName = NULL;
ctx.autodetectSCSIControllerModel = NULL;
ctx.datacenterPath = NULL;
DO_TEST("case-insensitive-1");
DO_TEST("case-insensitive-2");
DO_TEST("minimal");
DO_TEST("minimal-64bit");
DO_TEST("graphics-vnc");
DO_TEST("scsi-driver");
DO_TEST("scsi-writethrough");
DO_TEST("harddisk-scsi-file");
DO_TEST("harddisk-ide-file");
DO_TEST("harddisk-transient");
DO_TEST("cdrom-scsi-file");
DO_TEST("cdrom-scsi-empty");
DO_TEST("cdrom-scsi-device");
DO_TEST("cdrom-scsi-raw-device");
DO_TEST("cdrom-scsi-raw-auto-detect");
DO_TEST("cdrom-scsi-passthru");
DO_TEST("cdrom-ide-file");
DO_TEST("cdrom-ide-empty");
DO_TEST("cdrom-ide-empty-2");
DO_TEST("cdrom-ide-device");
DO_TEST("cdrom-ide-raw-device");
DO_TEST("cdrom-ide-raw-auto-detect");
DO_TEST("cdrom-ide-file-missing-datastore");
DO_TEST("cdrom-ide-file-missing-file");
DO_TEST_FAIL("harddisk-ide-file-missing-datastore");
DO_TEST_FAIL("harddisk-scsi-file-missing-file");
DO_TEST("floppy-file");
DO_TEST("floppy-device");
DO_TEST("sharedfolder");
DO_TEST("ethernet-e1000");
DO_TEST("ethernet-vmxnet2");
DO_TEST("ethernet-custom");
DO_TEST("ethernet-bridged");
DO_TEST("ethernet-nat");
DO_TEST("ethernet-generated");
DO_TEST("ethernet-static");
DO_TEST("ethernet-vpx");
DO_TEST("ethernet-other");
DO_TEST("ethernet-dummy");
DO_TEST("serial-file");
DO_TEST("serial-device");
DO_TEST("serial-pipe-client-app");
DO_TEST("serial-pipe-client-vm");
DO_TEST("serial-pipe-server-app");
DO_TEST("serial-pipe-server-vm");
DO_TEST("serial-network-server");
DO_TEST("serial-network-client");
DO_TEST("parallel-file");
DO_TEST("parallel-device");
DO_TEST("esx-in-the-wild-1");
DO_TEST("esx-in-the-wild-2");
DO_TEST("esx-in-the-wild-3");
DO_TEST("esx-in-the-wild-4");
DO_TEST("esx-in-the-wild-5");
DO_TEST("esx-in-the-wild-6");
DO_TEST("esx-in-the-wild-7");
DO_TEST("esx-in-the-wild-8");
DO_TEST("esx-in-the-wild-9");
DO_TEST("esx-in-the-wild-10");
DO_TEST("esx-in-the-wild-11");
DO_TEST("gsx-in-the-wild-1");
DO_TEST("gsx-in-the-wild-2");
DO_TEST("gsx-in-the-wild-3");
DO_TEST("gsx-in-the-wild-4");
DO_TEST("ws-in-the-wild-1");
DO_TEST("ws-in-the-wild-2");
DO_TEST("fusion-in-the-wild-1");
DO_TEST("annotation");
DO_TEST("smbios");
DO_TEST("svga");
DO_TEST("firmware-efi");
ctx.datacenterPath = "folder1/folder2/datacenter1";
DO_TEST("datacenterpath");
virObjectUnref(caps);
virObjectUnref(xmlopt);
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
VIR_TEST_MAIN(mymain)
#else
int main(void)
{
return EXIT_AM_SKIP;
}
#endif /* WITH_VMX */