xml2vmxtest.c 6.7 KB
Newer Older
1 2 3 4
#include <config.h>

#ifdef WITH_ESX

5 6 7
# include <stdio.h>
# include <string.h>
# include <unistd.h>
8

9 10 11 12
# include "internal.h"
# include "memory.h"
# include "testutils.h"
# include "esx/esx_vmx.h"
13 14 15 16 17

static char *progname = NULL;
static char *abs_srcdir = NULL;
static virCapsPtr caps = NULL;

18
# define MAX_FILE 4096
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

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
68 69
testCompareFiles(const char *xml, const char *vmx,
                 esxVI_ProductVersion productVersion)
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
{
    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;
    }

87
    def = virDomainDefParseString(caps, xmlData, VIR_DOMAIN_XML_INACTIVE);
88 89 90 91 92

    if (def == NULL) {
        goto failure;
    }

93
    formatted = esxVMX_FormatConfig(NULL, def, productVersion);
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115

    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;
116
    esxVI_ProductVersion version;
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
};

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;
    }

158
# define DO_TEST(_in, _out, _version)                                      \
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
        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;
    }

174 175
    DO_TEST("minimal", "minimal", esxVI_ProductVersion_ESX35);
    DO_TEST("minimal-64bit", "minimal-64bit", esxVI_ProductVersion_ESX35);
176

177
    DO_TEST("graphics-vnc", "graphics-vnc", esxVI_ProductVersion_ESX35);
M
Matthias Bolte 已提交
178

179 180
    DO_TEST("scsi-driver", "scsi-driver", esxVI_ProductVersion_ESX35);
    DO_TEST("scsi-writethrough", "scsi-writethrough", esxVI_ProductVersion_ESX35);
181

182 183
    DO_TEST("harddisk-scsi-file", "harddisk-scsi-file", esxVI_ProductVersion_ESX35);
    DO_TEST("harddisk-ide-file", "harddisk-ide-file", esxVI_ProductVersion_ESX35);
184

185 186 187 188
    DO_TEST("cdrom-scsi-file", "cdrom-scsi-file", esxVI_ProductVersion_ESX35);
    DO_TEST("cdrom-scsi-device", "cdrom-scsi-device", esxVI_ProductVersion_ESX35);
    DO_TEST("cdrom-ide-file", "cdrom-ide-file", esxVI_ProductVersion_ESX35);
    DO_TEST("cdrom-ide-device", "cdrom-ide-device", esxVI_ProductVersion_ESX35);
189

190 191
    DO_TEST("floppy-file", "floppy-file", esxVI_ProductVersion_ESX35);
    DO_TEST("floppy-device", "floppy-device", esxVI_ProductVersion_ESX35);
192

193 194
    DO_TEST("ethernet-e1000", "ethernet-e1000", esxVI_ProductVersion_ESX35);
    DO_TEST("ethernet-vmxnet2", "ethernet-vmxnet2", esxVI_ProductVersion_ESX35);
195

196 197
    DO_TEST("ethernet-custom", "ethernet-custom", esxVI_ProductVersion_ESX35);
    DO_TEST("ethernet-bridged", "ethernet-bridged", esxVI_ProductVersion_ESX35);
198

199 200 201 202
    DO_TEST("ethernet-generated", "ethernet-generated", esxVI_ProductVersion_ESX35);
    DO_TEST("ethernet-static", "ethernet-static", esxVI_ProductVersion_ESX35);
    DO_TEST("ethernet-vpx", "ethernet-vpx", esxVI_ProductVersion_ESX35);
    DO_TEST("ethernet-other", "ethernet-other", esxVI_ProductVersion_ESX35);
203

204 205 206
    DO_TEST("serial-file", "serial-file", esxVI_ProductVersion_ESX35);
    DO_TEST("serial-device", "serial-device", esxVI_ProductVersion_ESX35);
    DO_TEST("serial-pipe", "serial-pipe", esxVI_ProductVersion_ESX35);
207

208 209
    DO_TEST("parallel-file", "parallel-file", esxVI_ProductVersion_ESX35);
    DO_TEST("parallel-device", "parallel-device", esxVI_ProductVersion_ESX35);
210

211 212 213 214
    DO_TEST("esx-in-the-wild-1", "esx-in-the-wild-1", esxVI_ProductVersion_ESX35);
    DO_TEST("esx-in-the-wild-2", "esx-in-the-wild-2", esxVI_ProductVersion_ESX35);
    DO_TEST("esx-in-the-wild-3", "esx-in-the-wild-3", esxVI_ProductVersion_ESX35);
    DO_TEST("esx-in-the-wild-4", "esx-in-the-wild-4", esxVI_ProductVersion_ESX35);
215

216 217 218 219
    DO_TEST("gsx-in-the-wild-1", "gsx-in-the-wild-1", esxVI_ProductVersion_ESX35);
    DO_TEST("gsx-in-the-wild-2", "gsx-in-the-wild-2", esxVI_ProductVersion_ESX35);
    DO_TEST("gsx-in-the-wild-3", "gsx-in-the-wild-3", esxVI_ProductVersion_ESX35);
    DO_TEST("gsx-in-the-wild-4", "gsx-in-the-wild-4", esxVI_ProductVersion_ESX35);
220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235

    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 */