~ubuntu-branches/ubuntu/maverick/libvirt/maverick

« back to all changes in this revision

Viewing changes to tests/qemuargv2xmltest.c

Tags: upstream-0.6.4
Import upstream version 0.6.4

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <config.h>
 
2
 
 
3
#include <stdio.h>
 
4
#include <stdlib.h>
 
5
#include <unistd.h>
 
6
#include <string.h>
 
7
 
 
8
#include <sys/types.h>
 
9
#include <fcntl.h>
 
10
 
 
11
#ifdef WITH_QEMU
 
12
 
 
13
#include "internal.h"
 
14
#include "testutils.h"
 
15
#include "qemu_conf.h"
 
16
 
 
17
#include "testutilsqemu.h"
 
18
 
 
19
static char *progname;
 
20
static char *abs_srcdir;
 
21
static struct qemud_driver driver;
 
22
 
 
23
#define MAX_FILE 4096
 
24
 
 
25
static int blankProblemElements(char *data)
 
26
{
 
27
    if (virtTestClearLineRegex("<name>[[:alnum:]]+</name>", data) < 0 ||
 
28
        virtTestClearLineRegex("<uuid>([[:alnum:]]|-)+</uuid>", data) < 0 ||
 
29
        virtTestClearLineRegex("<memory>[[:digit:]]+</memory>", data) < 0 ||
 
30
        virtTestClearLineRegex("<currentMemory>[[:digit:]]+</currentMemory>", data) < 0 ||
 
31
        virtTestClearLineRegex("<readonly/>", data) < 0 ||
 
32
        virtTestClearLineRegex("<sharable/>", data) < 0)
 
33
        return -1;
 
34
    return 0;
 
35
}
 
36
 
 
37
static int testCompareXMLToArgvFiles(const char *xml,
 
38
                                     const char *cmdfile) {
 
39
    char xmlData[MAX_FILE];
 
40
    char cmdData[MAX_FILE];
 
41
    char *expectxml = &(xmlData[0]);
 
42
    char *actualxml = NULL;
 
43
    char *cmd = &(cmdData[0]);
 
44
    int ret = -1;
 
45
    virDomainDefPtr vmdef = NULL;
 
46
 
 
47
    if (virtTestLoadFile(cmdfile, &cmd, MAX_FILE) < 0)
 
48
        goto fail;
 
49
    if (virtTestLoadFile(xml, &expectxml, MAX_FILE) < 0)
 
50
        goto fail;
 
51
 
 
52
    if (!(vmdef = qemuParseCommandLineString(NULL, driver.caps, cmd)))
 
53
        goto fail;
 
54
 
 
55
    if (!(actualxml = virDomainDefFormat(NULL, vmdef, 0)))
 
56
        goto fail;
 
57
 
 
58
    if (blankProblemElements(expectxml) < 0 ||
 
59
        blankProblemElements(actualxml) < 0)
 
60
        goto fail;
 
61
 
 
62
    if (STRNEQ(expectxml, actualxml)) {
 
63
        virtTestDifference(stderr, expectxml, actualxml);
 
64
        goto fail;
 
65
    }
 
66
 
 
67
    ret = 0;
 
68
 
 
69
 fail:
 
70
    free(actualxml);
 
71
    virDomainDefFree(vmdef);
 
72
    return ret;
 
73
}
 
74
 
 
75
 
 
76
struct testInfo {
 
77
    const char *name;
 
78
    int extraFlags;
 
79
    const char *migrateFrom;
 
80
};
 
81
 
 
82
static int testCompareXMLToArgvHelper(const void *data) {
 
83
    const struct testInfo *info = data;
 
84
    char xml[PATH_MAX];
 
85
    char args[PATH_MAX];
 
86
    snprintf(xml, PATH_MAX, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
 
87
             abs_srcdir, info->name);
 
88
    snprintf(args, PATH_MAX, "%s/qemuxml2argvdata/qemuxml2argv-%s.args",
 
89
             abs_srcdir, info->name);
 
90
    return testCompareXMLToArgvFiles(xml, args);
 
91
}
 
92
 
 
93
 
 
94
 
 
95
static int
 
96
mymain(int argc, char **argv)
 
97
{
 
98
    int ret = 0;
 
99
    char cwd[PATH_MAX];
 
100
 
 
101
    progname = argv[0];
 
102
 
 
103
    if (argc > 1) {
 
104
        fprintf(stderr, "Usage: %s\n", progname);
 
105
        return (EXIT_FAILURE);
 
106
    }
 
107
 
 
108
    abs_srcdir = getenv("abs_srcdir");
 
109
    if (!abs_srcdir)
 
110
        abs_srcdir = getcwd(cwd, sizeof(cwd));
 
111
 
 
112
    virRandomInitialize(0);
 
113
 
 
114
    if ((driver.caps = testQemuCapsInit()) == NULL)
 
115
        return EXIT_FAILURE;
 
116
    if((driver.stateDir = strdup("/nowhere")) == NULL)
 
117
        return EXIT_FAILURE;
 
118
 
 
119
#define DO_TEST_FULL(name, extraFlags, migrateFrom)                     \
 
120
    do {                                                                \
 
121
        const struct testInfo info = { name, extraFlags, migrateFrom }; \
 
122
        if (virtTestRun("QEMU ARGV-2-XML " name,                        \
 
123
                        1, testCompareXMLToArgvHelper, &info) < 0)      \
 
124
            ret = -1;                                                   \
 
125
    } while (0)
 
126
 
 
127
#define DO_TEST(name, extraFlags)                       \
 
128
        DO_TEST_FULL(name, extraFlags, NULL)
 
129
 
 
130
    setenv("PATH", "/bin", 1);
 
131
    setenv("USER", "test", 1);
 
132
    setenv("LOGNAME", "test", 1);
 
133
    setenv("HOME", "/home/test", 1);
 
134
    unsetenv("TMPDIR");
 
135
    unsetenv("LD_PRELOAD");
 
136
    unsetenv("LD_LIBRARY_PATH");
 
137
 
 
138
    /* Can't roundtrip vcpu  cpuset attribute */
 
139
    /*DO_TEST("minimal", QEMUD_CMD_FLAG_NAME);*/
 
140
    DO_TEST("boot-cdrom", 0);
 
141
    DO_TEST("boot-network", 0);
 
142
    DO_TEST("boot-floppy", 0);
 
143
    /* Can't roundtrip xenner arch */
 
144
    /*DO_TEST("bootloader", 0);*/
 
145
    DO_TEST("clock-utc", 0);
 
146
    DO_TEST("clock-localtime", 0);
 
147
    DO_TEST("disk-cdrom", 0);
 
148
    DO_TEST("disk-cdrom-empty", QEMUD_CMD_FLAG_DRIVE);
 
149
    DO_TEST("disk-floppy", 0);
 
150
    DO_TEST("disk-many", 0);
 
151
    DO_TEST("disk-virtio", QEMUD_CMD_FLAG_DRIVE |
 
152
            QEMUD_CMD_FLAG_DRIVE_BOOT);
 
153
    DO_TEST("disk-xenvbd", QEMUD_CMD_FLAG_DRIVE |
 
154
            QEMUD_CMD_FLAG_DRIVE_BOOT);
 
155
    DO_TEST("disk-drive-boot-disk", QEMUD_CMD_FLAG_DRIVE |
 
156
            QEMUD_CMD_FLAG_DRIVE_BOOT);
 
157
    DO_TEST("disk-drive-boot-cdrom", QEMUD_CMD_FLAG_DRIVE |
 
158
            QEMUD_CMD_FLAG_DRIVE_BOOT);
 
159
    DO_TEST("disk-drive-fmt-qcow", QEMUD_CMD_FLAG_DRIVE |
 
160
            QEMUD_CMD_FLAG_DRIVE_BOOT);
 
161
    /* Can't roundtrip  shareable+cache mode option */
 
162
    /*DO_TEST("disk-drive-shared", QEMUD_CMD_FLAG_DRIVE);*/
 
163
    /* Can't roundtrip v1 writethrough option */
 
164
    /*DO_TEST("disk-drive-cache-v1-wt", QEMUD_CMD_FLAG_DRIVE);*/
 
165
    DO_TEST("disk-drive-cache-v1-wb", QEMUD_CMD_FLAG_DRIVE);
 
166
    DO_TEST("disk-drive-cache-v1-none", QEMUD_CMD_FLAG_DRIVE);
 
167
    DO_TEST("disk-drive-cache-v2-wt", QEMUD_CMD_FLAG_DRIVE |
 
168
            QEMUD_CMD_FLAG_DRIVE_CACHE_V2);
 
169
    DO_TEST("disk-drive-cache-v2-wb", QEMUD_CMD_FLAG_DRIVE |
 
170
            QEMUD_CMD_FLAG_DRIVE_CACHE_V2);
 
171
    DO_TEST("disk-drive-cache-v2-none", QEMUD_CMD_FLAG_DRIVE |
 
172
            QEMUD_CMD_FLAG_DRIVE_CACHE_V2);
 
173
    DO_TEST("disk-usb", 0);
 
174
    DO_TEST("graphics-vnc", 0);
 
175
 
 
176
    driver.vncSASL = 1;
 
177
    driver.vncSASLdir = strdup("/root/.sasl2");
 
178
    DO_TEST("graphics-vnc-sasl", 0);
 
179
    driver.vncTLS = 1;
 
180
    driver.vncTLSx509verify = 1;
 
181
    driver.vncTLSx509certdir = strdup("/etc/pki/tls/qemu");
 
182
    DO_TEST("graphics-vnc-tls", 0);
 
183
    driver.vncSASL = driver.vncTLSx509verify = driver.vncTLS = 0;
 
184
    free(driver.vncSASLdir);
 
185
    free(driver.vncTLSx509certdir);
 
186
    driver.vncSASLdir = driver.vncTLSx509certdir = NULL;
 
187
 
 
188
    DO_TEST("graphics-sdl", 0);
 
189
    DO_TEST("graphics-sdl-fullscreen", 0);
 
190
    DO_TEST("input-usbmouse", 0);
 
191
    DO_TEST("input-usbtablet", 0);
 
192
    /* Can't rountrip xenner arch */
 
193
    /*DO_TEST("input-xen", 0);*/
 
194
    DO_TEST("misc-acpi", 0);
 
195
    DO_TEST("misc-no-reboot", 0);
 
196
    DO_TEST("misc-uuid", QEMUD_CMD_FLAG_NAME |
 
197
        QEMUD_CMD_FLAG_UUID | QEMUD_CMD_FLAG_DOMID);
 
198
    DO_TEST("net-user", 0);
 
199
    DO_TEST("net-virtio", 0);
 
200
    DO_TEST("net-eth", 0);
 
201
    DO_TEST("net-eth-ifname", 0);
 
202
 
 
203
    DO_TEST("serial-vc", 0);
 
204
    DO_TEST("serial-pty", 0);
 
205
    DO_TEST("serial-dev", 0);
 
206
    DO_TEST("serial-file", 0);
 
207
    DO_TEST("serial-unix", 0);
 
208
    DO_TEST("serial-tcp", 0);
 
209
    DO_TEST("serial-udp", 0);
 
210
    DO_TEST("serial-tcp-telnet", 0);
 
211
    DO_TEST("serial-many", 0);
 
212
    DO_TEST("parallel-tcp", 0);
 
213
    DO_TEST("console-compat", 0);
 
214
    DO_TEST("sound", 0);
 
215
 
 
216
    DO_TEST("hostdev-usb-product", 0);
 
217
    DO_TEST("hostdev-usb-address", 0);
 
218
 
 
219
    DO_TEST("hostdev-pci-address", 0);
 
220
 
 
221
    DO_TEST_FULL("restore-v1", QEMUD_CMD_FLAG_MIGRATE_KVM_STDIO, "stdio");
 
222
    DO_TEST_FULL("restore-v2", QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC, "stdio");
 
223
    DO_TEST_FULL("restore-v2", QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC, "exec:cat");
 
224
    DO_TEST_FULL("migrate", QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP, "tcp:10.0.0.1:5000");
 
225
 
 
226
    virCapabilitiesFree(driver.caps);
 
227
 
 
228
    return(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
 
229
}
 
230
 
 
231
VIRT_TEST_MAIN(mymain)
 
232
 
 
233
#else
 
234
 
 
235
int main (void) { return (77); /* means 'test skipped' for automake */ }
 
236
 
 
237
#endif /* WITH_QEMU */