aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Bolte <matthias.bolte@googlemail.com>2009-09-23 14:25:52 +0200
committerDaniel Veillard <veillard@redhat.com>2009-09-23 15:00:54 +0200
commitaf4c893eb77e030eb9ed0bb4ddc769275078c62c (patch)
tree9d57164d3460b44241403e57db4eabef8d6e4587 /tests/xml2vmxtest.c
parentESX Add esxDomainXMLToNative() (diff)
downloadlibvirt-af4c893eb77e030eb9ed0bb4ddc769275078c62c.tar.gz
libvirt-af4c893eb77e030eb9ed0bb4ddc769275078c62c.tar.bz2
libvirt-af4c893eb77e030eb9ed0bb4ddc769275078c62c.zip
ESX add tests for the VMX to/from domain XML mapping
* tests/.gitignore: ignore new test binaries * tests/Makefile.am: add new tests * tests/esxutilstest.c: test esxVMX_IndexToDiskName() * tests/vmx2xmldata/*: config files for the VMX to domain XML test * tests/vmx2xmltest.c: test the VMX to domain XML mapping * tests/xml2vmxdata/*: config files for the domain XML to VMX test * tests/xml2vmxtest.c: test the domain XML to VMX mapping
Diffstat (limited to 'tests/xml2vmxtest.c')
-rw-r--r--tests/xml2vmxtest.c226
1 files changed, 226 insertions, 0 deletions
diff --git a/tests/xml2vmxtest.c b/tests/xml2vmxtest.c
new file mode 100644
index 000000000..df0a4a6b8
--- /dev/null
+++ b/tests/xml2vmxtest.c
@@ -0,0 +1,226 @@
+#include <config.h>
+
+#ifdef WITH_ESX
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "internal.h"
+#include "memory.h"
+#include "testutils.h"
+#include "esx/esx_vmx.h"
+
+static char *progname = NULL;
+static char *abs_srcdir = NULL;
+static virCapsPtr caps = NULL;
+
+#define MAX_FILE 4096
+
+static void
+testESXCapsInit(void)
+{
+ virCapsGuestPtr guest = NULL;
+
+ caps = virCapabilitiesNew("i686", 1, 1);
+
+ if (caps == NULL) {
+ return;
+ }
+
+ virCapabilitiesSetMacPrefix(caps, (unsigned char[]){ 0x00, 0x50, 0x56 });
+ virCapabilitiesAddHostMigrateTransport(caps, "esx");
+
+ /* i686 guest */
+ guest =
+ virCapabilitiesAddGuest(caps, "hvm", "i686", 32, NULL, NULL, 0, NULL);
+
+ if (guest == NULL) {
+ goto failure;
+ }
+
+ if (virCapabilitiesAddGuestDomain(guest, "vmware", NULL, NULL, 0,
+ NULL) == NULL) {
+ goto failure;
+ }
+
+ /* x86_64 guest */
+ guest =
+ virCapabilitiesAddGuest(caps, "hvm", "x86_64", 64, NULL, NULL, 0, NULL);
+
+ if (guest == NULL) {
+ goto failure;
+ }
+
+ if (virCapabilitiesAddGuestDomain(guest, "vmware", NULL, NULL, 0,
+ NULL) == NULL) {
+ goto failure;
+ }
+
+ return;
+
+ failure:
+ virCapabilitiesFree(caps);
+ caps = NULL;
+}
+
+static int
+testCompareFiles(const char *xml, const char *vmx, esxVI_APIVersion apiVersion)
+{
+ int result = -1;
+ char xmlData[MAX_FILE];
+ char vmxData[MAX_FILE];
+ char *formatted = NULL;
+ char *xmlPtr = &(xmlData[0]);
+ char *vmxPtr = &(vmxData[0]);
+ virDomainDefPtr def = NULL;
+
+ if (virtTestLoadFile(xml, &xmlPtr, MAX_FILE) < 0) {
+ goto failure;
+ }
+
+ if (virtTestLoadFile(vmx, &vmxPtr, MAX_FILE) < 0) {
+ goto failure;
+ }
+
+ def = virDomainDefParseString(NULL, caps, xmlData, VIR_DOMAIN_XML_INACTIVE);
+
+ if (def == NULL) {
+ goto failure;
+ }
+
+ formatted = esxVMX_FormatConfig(NULL, def, apiVersion);
+
+ if (formatted == NULL) {
+ goto failure;
+ }
+
+ if (STRNEQ(vmxData, formatted)) {
+ virtTestDifference(stderr, vmxData, formatted);
+ goto failure;
+ }
+
+ result = 0;
+
+ failure:
+ VIR_FREE(formatted);
+ virDomainDefFree(def);
+
+ return result;
+}
+
+struct testInfo {
+ const char *input;
+ const char *output;
+ esxVI_APIVersion version;
+};
+
+static int
+testCompareHelper(const void *data)
+{
+ const struct testInfo *info = data;
+ char xml[PATH_MAX];
+ char vmx[PATH_MAX];
+
+ snprintf(xml, PATH_MAX, "%s/xml2vmxdata/xml2vmx-%s.xml", abs_srcdir,
+ info->input);
+ snprintf(vmx, PATH_MAX, "%s/xml2vmxdata/xml2vmx-%s.vmx", abs_srcdir,
+ info->output);
+
+ return testCompareFiles(xml, vmx, info->version);
+}
+
+static int
+mymain(int argc, char **argv)
+{
+ int result = 0;
+ char cwd[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 == NULL) {
+ abs_srcdir = getcwd(cwd, sizeof(cwd));
+ }
+
+ if (argc > 1) {
+ fprintf(stderr, "Usage: %s\n", progname);
+ return EXIT_FAILURE;
+ }
+
+ #define DO_TEST(_in, _out, _version) \
+ do { \
+ struct testInfo info = { _in, _out, _version }; \
+ virResetLastError(); \
+ if (virtTestRun("VMware XML-2-VMX "_in" -> "_out, 1, \
+ testCompareHelper, &info) < 0) { \
+ result = -1; \
+ } \
+ } while (0)
+
+ testESXCapsInit();
+
+ if (caps == NULL) {
+ return EXIT_FAILURE;
+ }
+
+ DO_TEST("minimal", "minimal", esxVI_APIVersion_25);
+ DO_TEST("minimal-64bit", "minimal-64bit", esxVI_APIVersion_25);
+
+ DO_TEST("scsi-buslogic", "scsi-buslogic", esxVI_APIVersion_25);
+ DO_TEST("scsi-writethrough", "scsi-writethrough", esxVI_APIVersion_25);
+
+ DO_TEST("harddisk-scsi-file", "harddisk-scsi-file", esxVI_APIVersion_25);
+ DO_TEST("harddisk-ide-file", "harddisk-ide-file", esxVI_APIVersion_25);
+
+ DO_TEST("cdrom-scsi-file", "cdrom-scsi-file", esxVI_APIVersion_25);
+ DO_TEST("cdrom-scsi-device", "cdrom-scsi-device", esxVI_APIVersion_25);
+ DO_TEST("cdrom-ide-file", "cdrom-ide-file", esxVI_APIVersion_25);
+ DO_TEST("cdrom-ide-device", "cdrom-ide-device", esxVI_APIVersion_25);
+
+ DO_TEST("floppy-file", "floppy-file", esxVI_APIVersion_25);
+ DO_TEST("floppy-device", "floppy-device", esxVI_APIVersion_25);
+
+ DO_TEST("ethernet-e1000", "ethernet-e1000", esxVI_APIVersion_25);
+
+ DO_TEST("ethernet-custom", "ethernet-custom", esxVI_APIVersion_25);
+ DO_TEST("ethernet-bridged", "ethernet-bridged", esxVI_APIVersion_25);
+
+ DO_TEST("serial-file", "serial-file", esxVI_APIVersion_25);
+ DO_TEST("serial-device", "serial-device", esxVI_APIVersion_25);
+ DO_TEST("serial-pipe", "serial-pipe", esxVI_APIVersion_25);
+
+ DO_TEST("parallel-file", "parallel-file", esxVI_APIVersion_25);
+ DO_TEST("parallel-device", "parallel-device", esxVI_APIVersion_25);
+
+ DO_TEST("esx-in-the-wild-1", "esx-in-the-wild-1", esxVI_APIVersion_25);
+ DO_TEST("esx-in-the-wild-2", "esx-in-the-wild-2", esxVI_APIVersion_25);
+ DO_TEST("esx-in-the-wild-3", "esx-in-the-wild-3", esxVI_APIVersion_25);
+ DO_TEST("esx-in-the-wild-4", "esx-in-the-wild-4", esxVI_APIVersion_25);
+
+ DO_TEST("gsx-in-the-wild-1", "gsx-in-the-wild-1", esxVI_APIVersion_25);
+ DO_TEST("gsx-in-the-wild-2", "gsx-in-the-wild-2", esxVI_APIVersion_25);
+ DO_TEST("gsx-in-the-wild-3", "gsx-in-the-wild-3", esxVI_APIVersion_25);
+ DO_TEST("gsx-in-the-wild-4", "gsx-in-the-wild-4", esxVI_APIVersion_25);
+
+ virCapabilitiesFree(caps);
+
+ return result == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
+VIRT_TEST_MAIN(mymain)
+
+#else
+
+int main (void)
+{
+ return 77; /* means 'test skipped' for automake */
+}
+
+#endif /* WITH_ESX */