14
#include "testutils.h"
15
#include "qemu_conf.h"
17
#include "testutilsqemu.h"
19
static char *progname;
20
static char *abs_srcdir;
21
static struct qemud_driver driver;
25
static int blankProblemElements(char *data)
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)
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]);
45
virDomainDefPtr vmdef = NULL;
47
if (virtTestLoadFile(cmdfile, &cmd, MAX_FILE) < 0)
49
if (virtTestLoadFile(xml, &expectxml, MAX_FILE) < 0)
52
if (!(vmdef = qemuParseCommandLineString(NULL, driver.caps, cmd)))
55
if (!(actualxml = virDomainDefFormat(NULL, vmdef, 0)))
58
if (blankProblemElements(expectxml) < 0 ||
59
blankProblemElements(actualxml) < 0)
62
if (STRNEQ(expectxml, actualxml)) {
63
virtTestDifference(stderr, expectxml, actualxml);
71
virDomainDefFree(vmdef);
79
const char *migrateFrom;
82
static int testCompareXMLToArgvHelper(const void *data) {
83
const struct testInfo *info = data;
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);
96
mymain(int argc, char **argv)
104
fprintf(stderr, "Usage: %s\n", progname);
105
return (EXIT_FAILURE);
108
abs_srcdir = getenv("abs_srcdir");
110
abs_srcdir = getcwd(cwd, sizeof(cwd));
112
virRandomInitialize(0);
114
if ((driver.caps = testQemuCapsInit()) == NULL)
116
if((driver.stateDir = strdup("/nowhere")) == NULL)
119
#define DO_TEST_FULL(name, extraFlags, migrateFrom) \
121
const struct testInfo info = { name, extraFlags, migrateFrom }; \
122
if (virtTestRun("QEMU ARGV-2-XML " name, \
123
1, testCompareXMLToArgvHelper, &info) < 0) \
127
#define DO_TEST(name, extraFlags) \
128
DO_TEST_FULL(name, extraFlags, NULL)
130
setenv("PATH", "/bin", 1);
131
setenv("USER", "test", 1);
132
setenv("LOGNAME", "test", 1);
133
setenv("HOME", "/home/test", 1);
135
unsetenv("LD_PRELOAD");
136
unsetenv("LD_LIBRARY_PATH");
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);
177
driver.vncSASLdir = strdup("/root/.sasl2");
178
DO_TEST("graphics-vnc-sasl", 0);
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;
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);
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);
216
DO_TEST("hostdev-usb-product", 0);
217
DO_TEST("hostdev-usb-address", 0);
219
DO_TEST("hostdev-pci-address", 0);
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");
226
virCapabilitiesFree(driver.caps);
228
return(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
231
VIRT_TEST_MAIN(mymain)
235
int main (void) { return (77); /* means 'test skipped' for automake */ }
237
#endif /* WITH_QEMU */