static int mymain(void) { int ret = 0; virQEMUDriver driver; testQemuData data; #if !WITH_YAJL fputs("libvirt not compiled with yajl, skipping this test\n", stderr); return EXIT_AM_SKIP; #endif if (virThreadInitialize() < 0 || qemuTestDriverInit(&driver) < 0) return EXIT_FAILURE; virEventRegisterDefaultImpl(); data.xmlopt = driver.xmlopt; #define DO_TEST(arch, name) \ do { \ data.archName = arch; \ data.base = name; \ if (virTestRun(name "(" arch ")", testQemuCaps, &data) < 0) \ ret = -1; \ } while (0) DO_TEST("x86_64", "caps_1.2.2"); DO_TEST("x86_64", "caps_1.3.1"); DO_TEST("x86_64", "caps_1.4.2"); DO_TEST("x86_64", "caps_1.5.3"); DO_TEST("x86_64", "caps_1.6.0"); DO_TEST("x86_64", "caps_1.7.0"); DO_TEST("x86_64", "caps_2.1.1"); DO_TEST("x86_64", "caps_2.4.0"); DO_TEST("x86_64", "caps_2.5.0"); DO_TEST("x86_64", "caps_2.6.0"); DO_TEST("aarch64", "caps_2.6.0-gicv2"); DO_TEST("aarch64", "caps_2.6.0-gicv3"); DO_TEST("ppc64le", "caps_2.6.0"); /* * Run "tests/qemucapsprobe /path/to/qemu/binary >foo.replies" * to generate updated or new *.replies data files. */ qemuTestDriverFree(&driver); return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE; }
int qemuTestDriverInit(virQEMUDriver *driver) { virSecurityManagerPtr mgr = NULL; memset(driver, 0, sizeof(*driver)); if (virMutexInit(&driver->lock) < 0) return -1; driver->config = virQEMUDriverConfigNew(false); if (!driver->config) goto error; /* Overwrite some default paths so it's consistent for tests. */ VIR_FREE(driver->config->libDir); VIR_FREE(driver->config->channelTargetDir); if (VIR_STRDUP(driver->config->libDir, "/tmp/lib") < 0 || VIR_STRDUP(driver->config->channelTargetDir, "/tmp/channel") < 0) goto error; driver->caps = testQemuCapsInit(); if (!driver->caps) goto error; /* Using /dev/null for libDir and cacheDir automatically produces errors * upon attempt to use any of them */ driver->qemuCapsCache = virQEMUCapsCacheNew("/dev/null", "/dev/null", 0, 0); if (!driver->qemuCapsCache) goto error; driver->xmlopt = virQEMUDriverCreateXMLConf(driver); if (!driver->xmlopt) goto error; if (qemuTestCapsCacheInsert(driver->qemuCapsCache, "empty", NULL) < 0) goto error; if (!(mgr = virSecurityManagerNew("none", "qemu", VIR_SECURITY_MANAGER_PRIVILEGED))) goto error; if (!(driver->securityManager = virSecurityManagerNewStack(mgr))) goto error; return 0; error: virObjectUnref(mgr); qemuTestDriverFree(driver); return -1; }
static int mymain(void) { int ret = 0; int rc = testUserXattrEnabled(); if (rc < 0) return EXIT_FAILURE; if (!rc) return EXIT_AM_SKIP; if (!(mgr = virSecurityManagerNew("selinux", "QEMU", VIR_SECURITY_MANAGER_DEFAULT_CONFINED | VIR_SECURITY_MANAGER_PRIVILEGED))) { virErrorPtr err = virGetLastError(); VIR_TEST_VERBOSE("Unable to initialize security driver: %s\n", err->message); return EXIT_FAILURE; } if ((caps = testQemuCapsInit()) == NULL) return EXIT_FAILURE; if (qemuTestDriverInit(&driver) < 0) return EXIT_FAILURE; #define DO_TEST_LABELING(name) \ if (virtTestRun("Labelling " # name, testSELinuxLabeling, name) < 0) \ ret = -1; setcon((security_context_t)"system_r:system_u:libvirtd_t:s0:c0.c1023"); DO_TEST_LABELING("disks"); DO_TEST_LABELING("kernel"); DO_TEST_LABELING("chardev"); DO_TEST_LABELING("nfs"); qemuTestDriverFree(&driver); return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE; }
static int mymain(void) { int ret = 0; virQEMUDriver driver; testQemuData data; #if !WITH_YAJL fputs("libvirt not compiled with yajl, skipping this test\n", stderr); return EXIT_AM_SKIP; #endif if (virThreadInitialize() < 0 || qemuTestDriverInit(&driver) < 0) return EXIT_FAILURE; virEventRegisterDefaultImpl(); data.xmlopt = driver.xmlopt; #define DO_TEST(name) \ do { \ data.base = name; \ if (virtTestRun(name, testQemuCaps, &data) < 0) \ ret = -1; \ } while (0) DO_TEST("caps_1.2.2-1"); DO_TEST("caps_1.3.1-1"); DO_TEST("caps_1.4.2-1"); DO_TEST("caps_1.5.3-1"); DO_TEST("caps_1.6.0-1"); DO_TEST("caps_1.6.50-1"); DO_TEST("caps_2.1.1-1"); DO_TEST("caps_2.4.0-1"); DO_TEST("caps_2.5.0-1"); qemuTestDriverFree(&driver); return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE; }
static int mymain(void) { int ret = 0; struct qemuHotplugTestData data = {0}; virSecurityManagerPtr mgr; #if !WITH_YAJL fputs("libvirt not compiled with yajl, skipping this test\n", stderr); return EXIT_AM_SKIP; #endif if (virThreadInitialize() < 0 || qemuTestDriverInit(&driver) < 0) return EXIT_FAILURE; virEventRegisterDefaultImpl(); VIR_FREE(driver.config->spiceListen); VIR_FREE(driver.config->vncListen); /* some dummy values from 'config file' */ if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0) return EXIT_FAILURE; if (!(driver.domainEventState = virObjectEventStateNew())) return EXIT_FAILURE; driver.lockManager = virLockManagerPluginNew("nop", "qemu", driver.config->configBaseDir, 0); if (!driver.lockManager) return EXIT_FAILURE; if (!(mgr = virSecurityManagerNew("none", "qemu", VIR_SECURITY_MANAGER_PRIVILEGED))) return EXIT_FAILURE; if (!(driver.securityManager = virSecurityManagerNewStack(mgr))) return EXIT_FAILURE; /* wait only 100ms for DEVICE_DELETED event */ qemuDomainRemoveDeviceWaitTime = 100; #define DO_TEST(file, ACTION, dev, event, fial, kep, ...) \ do { \ const char *my_mon[] = { __VA_ARGS__, NULL}; \ const char *name = file " " #ACTION " " dev; \ data.action = ACTION; \ data.domain_filename = file; \ data.device_filename = dev; \ data.fail = fial; \ data.mon = my_mon; \ data.keep = kep; \ data.deviceDeletedEvent = event; \ if (virtTestRun(name, testQemuHotplug, &data) < 0) \ ret = -1; \ } while (0) #define DO_TEST_ATTACH(file, dev, fial, kep, ...) \ DO_TEST(file, ATTACH, dev, false, fial, kep, __VA_ARGS__) #define DO_TEST_DETACH(file, dev, fial, kep, ...) \ DO_TEST(file, DETACH, dev, false, fial, kep, __VA_ARGS__) #define DO_TEST_ATTACH_EVENT(file, dev, fial, kep, ...) \ DO_TEST(file, ATTACH, dev, true, fial, kep, __VA_ARGS__) #define DO_TEST_DETACH_EVENT(file, dev, fial, kep, ...) \ DO_TEST(file, DETACH, dev, true, fial, kep, __VA_ARGS__) #define DO_TEST_UPDATE(file, dev, fial, kep, ...) \ DO_TEST(file, UPDATE, dev, false, fial, kep, __VA_ARGS__) #define QMP_OK "{\"return\": {}}" #define HMP(msg) "{\"return\": \"" msg "\"}" #define QMP_DEVICE_DELETED(dev) \ "{" \ " \"timestamp\": {" \ " \"seconds\": 1374137171," \ " \"microseconds\": 2659" \ " }," \ " \"event\": \"DEVICE_DELETED\"," \ " \"data\": {" \ " \"device\": \"" dev "\"," \ " \"path\": \"/machine/peripheral/" dev "\"" \ " }" \ "}\r\n" DO_TEST_UPDATE("graphics-spice", "graphics-spice-nochange", false, false, NULL); DO_TEST_UPDATE("graphics-spice-timeout", "graphics-spice-timeout-nochange", false, false, "set_password", QMP_OK, "expire_password", QMP_OK); DO_TEST_UPDATE("graphics-spice-timeout", "graphics-spice-timeout-password", false, false, "set_password", QMP_OK, "expire_password", QMP_OK); DO_TEST_UPDATE("graphics-spice", "graphics-spice-listen", true, false, NULL); DO_TEST_UPDATE("graphics-spice-listen-network", "graphics-spice-listen-network", false, false, "set_password", QMP_OK, "expire_password", QMP_OK); /* Strange huh? Currently, only graphics can be updated :-P */ DO_TEST_UPDATE("disk-cdrom", "disk-cdrom-nochange", true, false, NULL); DO_TEST_ATTACH("console-compat-2", "console-virtio", false, true, "chardev-add", "{\"return\": {\"pty\": \"/dev/pts/26\"}}", "device_add", QMP_OK); DO_TEST_DETACH("console-compat-2", "console-virtio", false, false, "device_del", QMP_OK, "chardev-remove", QMP_OK); DO_TEST_ATTACH("hotplug-base", "disk-virtio", false, true, "human-monitor-command", HMP("OK\\r\\n"), "device_add", QMP_OK); DO_TEST_DETACH("hotplug-base", "disk-virtio", false, false, "device_del", QMP_OK, "human-monitor-command", HMP("")); DO_TEST_ATTACH_EVENT("hotplug-base", "disk-virtio", false, true, "human-monitor-command", HMP("OK\\r\\n"), "device_add", QMP_OK); DO_TEST_DETACH("hotplug-base", "disk-virtio", true, true, "device_del", QMP_OK, "human-monitor-command", HMP("")); DO_TEST_DETACH("hotplug-base", "disk-virtio", false, false, "device_del", QMP_DEVICE_DELETED("virtio-disk4") QMP_OK, "human-monitor-command", HMP("")); DO_TEST_ATTACH("hotplug-base", "disk-usb", false, true, "human-monitor-command", HMP("OK\\r\\n"), "device_add", QMP_OK); DO_TEST_DETACH("hotplug-base", "disk-usb", false, false, "device_del", QMP_OK, "human-monitor-command", HMP("")); DO_TEST_ATTACH_EVENT("hotplug-base", "disk-usb", false, true, "human-monitor-command", HMP("OK\\r\\n"), "device_add", QMP_OK); DO_TEST_DETACH("hotplug-base", "disk-usb", true, true, "device_del", QMP_OK, "human-monitor-command", HMP("")); DO_TEST_DETACH("hotplug-base", "disk-usb", false, false, "device_del", QMP_DEVICE_DELETED("usb-disk16") QMP_OK, "human-monitor-command", HMP("")); DO_TEST_ATTACH("hotplug-base", "disk-scsi", false, true, "human-monitor-command", HMP("OK\\r\\n"), "device_add", QMP_OK); DO_TEST_DETACH("hotplug-base", "disk-scsi", false, false, "device_del", QMP_OK, "human-monitor-command", HMP("")); DO_TEST_ATTACH_EVENT("hotplug-base", "disk-scsi", false, true, "human-monitor-command", HMP("OK\\r\\n"), "device_add", QMP_OK); DO_TEST_DETACH("hotplug-base", "disk-scsi", true, true, "device_del", QMP_OK, "human-monitor-command", HMP("")); DO_TEST_DETACH("hotplug-base", "disk-scsi", false, false, "device_del", QMP_DEVICE_DELETED("scsi0-0-0-5") QMP_OK, "human-monitor-command", HMP("")); qemuTestDriverFree(&driver); return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE; }
static int mymain(void) { int ret = 0; if (qemuTestDriverInit(&driver) < 0) return EXIT_FAILURE; /* TODO: test with format probing disabled too */ driver.config->allowDiskFormatProbing = true; if (VIR_ALLOC(testSnapshotXMLVariableLineRegex) < 0) goto cleanup; if (regcomp(testSnapshotXMLVariableLineRegex, testSnapshotXMLVariableLineRegexStr, REG_EXTENDED | REG_NOSUB) != 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", "failed to compile test regex"); goto cleanup; } # define DO_TEST(prefix, name, inpath, outpath, uuid, internal, redefine) \ do { \ const struct testInfo info = {abs_srcdir "/" inpath "/" name ".xml", \ abs_srcdir "/" outpath "/" name ".xml", \ uuid, internal, redefine}; \ if (virtTestRun("SNAPSHOT XML-2-XML " prefix " " name, \ testCompareXMLToXMLHelper, &info) < 0) \ ret = -1; \ } while (0) # define DO_TEST_IN(name, uuid) DO_TEST("in->in", name,\ "domainsnapshotxml2xmlin",\ "domainsnapshotxml2xmlin",\ uuid, false, false) # define DO_TEST_OUT(name, uuid, internal) DO_TEST("out->out", name,\ "domainsnapshotxml2xmlout",\ "domainsnapshotxml2xmlout",\ uuid, internal, true) # define DO_TEST_INOUT(name, uuid, internal, redefine) \ DO_TEST("in->out", name,\ "domainsnapshotxml2xmlin",\ "domainsnapshotxml2xmlout",\ uuid, internal, redefine) /* Unset or set all envvars here that are copied in qemudBuildCommandLine * using ADD_ENV_COPY, otherwise these tests may fail due to unexpected * values for these envvars */ setenv("PATH", "/bin", 1); DO_TEST_OUT("all_parameters", "9d37b878-a7cc-9f9a-b78f-49b3abad25a8", true); DO_TEST_OUT("disk_snapshot_redefine", "c7a5fdbd-edaf-9455-926a-d65c16db1809", true); DO_TEST_OUT("full_domain", "c7a5fdbd-edaf-9455-926a-d65c16db1809", true); DO_TEST_OUT("noparent_nodescription_noactive", NULL, false); DO_TEST_OUT("noparent_nodescription", NULL, true); DO_TEST_OUT("noparent", "9d37b878-a7cc-9f9a-b78f-49b3abad25a8", false); DO_TEST_OUT("metadata", "c7a5fdbd-edaf-9455-926a-d65c16db1809", false); DO_TEST_OUT("external_vm_redefine", "c7a5fdbd-edaf-9455-926a-d65c16db1809", false); DO_TEST_INOUT("empty", "9d37b878-a7cc-9f9a-b78f-49b3abad25a8", false, false); DO_TEST_INOUT("noparent", "9d37b878-a7cc-9f9a-b78f-49b3abad25a8", false, false); DO_TEST_INOUT("external_vm", NULL, false, false); DO_TEST_INOUT("noparent", "9d37b878-a7cc-9f9a-b78f-49b3abad25a8", false, false); DO_TEST_INOUT("disk_snapshot", NULL, false, false); DO_TEST_INOUT("disk_driver_name_null", NULL, false, false); DO_TEST_IN("name_and_description", NULL); DO_TEST_IN("description_only", NULL); DO_TEST_IN("name_only", NULL); cleanup: if (testSnapshotXMLVariableLineRegex) regfree(testSnapshotXMLVariableLineRegex); VIR_FREE(testSnapshotXMLVariableLineRegex); qemuTestDriverFree(&driver); return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; }
static int mymain(void) { int ret = 0; if (qemuTestDriverInit(&driver) < 0) return EXIT_FAILURE; # define DO_TEST_FULL(name, flags) \ do { \ const struct testInfo info = { name, (flags) }; \ if (virtTestRun("QEMU ARGV-2-XML " name, \ testCompareXMLToArgvHelper, &info) < 0) \ ret = -1; \ } while (0) # define DO_TEST(name) \ DO_TEST_FULL(name, 0) setenv("PATH", "/bin", 1); setenv("USER", "test", 1); setenv("LOGNAME", "test", 1); setenv("HOME", "/home/test", 1); unsetenv("TMPDIR"); unsetenv("LD_PRELOAD"); unsetenv("LD_LIBRARY_PATH"); /* Can't roundtrip vcpu cpuset attribute */ /*DO_TEST("minimal", QEMU_CAPS_NAME);*/ DO_TEST("machine-core-on"); DO_TEST("machine-core-off"); DO_TEST("boot-cdrom"); DO_TEST("boot-network"); DO_TEST("boot-floppy"); DO_TEST("kvmclock"); /* This needs <emulator>./qemu.sh</emulator> which doesn't work here. */ /*DO_TEST("cpu-kvmclock");*/ DO_TEST("reboot-timeout-enabled"); DO_TEST("reboot-timeout-disabled"); DO_TEST("clock-utc"); DO_TEST("clock-localtime"); DO_TEST("disk-cdrom"); DO_TEST("disk-cdrom-empty"); DO_TEST("disk-floppy"); DO_TEST("disk-many"); DO_TEST("disk-virtio"); DO_TEST("disk-drive-boot-disk"); DO_TEST("disk-drive-boot-cdrom"); DO_TEST("disk-drive-fmt-qcow"); DO_TEST("disk-drive-error-policy-stop"); DO_TEST("disk-drive-error-policy-enospace"); DO_TEST("disk-drive-error-policy-wreport-rignore"); DO_TEST("disk-drive-cache-v2-wt"); DO_TEST("disk-drive-cache-v2-wb"); DO_TEST("disk-drive-cache-v2-none"); DO_TEST("disk-drive-cache-directsync"); DO_TEST("disk-drive-cache-unsafe"); DO_TEST("disk-drive-network-nbd"); DO_TEST("disk-drive-network-nbd-export"); DO_TEST("disk-drive-network-nbd-ipv6"); DO_TEST("disk-drive-network-nbd-ipv6-export"); DO_TEST("disk-drive-network-nbd-unix"); DO_TEST("disk-drive-network-iscsi"); DO_TEST("disk-drive-network-iscsi-auth"); DO_TEST("disk-drive-network-gluster"); DO_TEST("disk-drive-network-rbd"); DO_TEST("disk-drive-network-rbd-auth"); DO_TEST("disk-drive-network-rbd-ipv6"); /* older format using CEPH_ARGS env var */ DO_TEST("disk-drive-network-rbd-ceph-env"); DO_TEST("disk-drive-network-sheepdog"); DO_TEST("disk-usb"); DO_TEST("graphics-vnc"); DO_TEST("graphics-vnc-socket"); DO_TEST("graphics-vnc-websocket"); DO_TEST("graphics-vnc-policy"); DO_TEST("graphics-vnc-sasl"); DO_TEST("graphics-vnc-tls"); DO_TEST("graphics-sdl"); DO_TEST("graphics-sdl-fullscreen"); DO_TEST("nographics-vga"); DO_TEST("input-usbmouse"); DO_TEST("input-usbtablet"); DO_TEST("misc-acpi"); DO_TEST("misc-disable-s3"); DO_TEST("misc-disable-suspends"); DO_TEST("misc-enable-s4"); DO_TEST("misc-no-reboot"); DO_TEST("misc-uuid"); DO_TEST("net-user"); DO_TEST("net-virtio"); DO_TEST("net-eth"); DO_TEST("net-eth-ifname"); DO_TEST("serial-vc"); DO_TEST("serial-pty"); DO_TEST("serial-dev"); DO_TEST("serial-file"); DO_TEST("serial-unix"); DO_TEST("serial-tcp"); DO_TEST("serial-udp"); DO_TEST("serial-tcp-telnet"); DO_TEST("serial-many"); DO_TEST("parallel-tcp"); DO_TEST("console-compat"); DO_TEST("sound"); DO_TEST("watchdog"); DO_TEST("hostdev-usb-address"); DO_TEST("hostdev-pci-address"); DO_TEST("mem-scale"); DO_TEST("smp"); DO_TEST("hyperv"); DO_TEST("hyperv-panic"); DO_TEST("kvm-features"); DO_TEST("pseries-nvram"); DO_TEST("pseries-disk"); DO_TEST("nosharepages"); DO_TEST("restore-v2"); DO_TEST("migrate"); DO_TEST_FULL("qemu-ns-no-env", FLAG_EXPECT_WARNING); DO_TEST("machine-aeskeywrap-on-argv"); DO_TEST("machine-aeskeywrap-off-argv"); DO_TEST("machine-deakeywrap-on-argv"); DO_TEST("machine-deakeywrap-off-argv"); DO_TEST("machine-keywrap-none-argv"); qemuTestDriverFree(&driver); return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; }
int qemuTestDriverInit(virQEMUDriver *driver) { virSecurityManagerPtr mgr = NULL; char statedir[] = STATEDIRTEMPLATE; char configdir[] = CONFIGDIRTEMPLATE; memset(driver, 0, sizeof(*driver)); if (virMutexInit(&driver->lock) < 0) return -1; driver->config = virQEMUDriverConfigNew(false); if (!driver->config) goto error; /* Do this early so that qemuTestDriverFree() doesn't see (unlink) the real * dirs. */ VIR_FREE(driver->config->stateDir); VIR_FREE(driver->config->configDir); /* Overwrite some default paths so it's consistent for tests. */ VIR_FREE(driver->config->libDir); VIR_FREE(driver->config->channelTargetDir); if (VIR_STRDUP(driver->config->libDir, "/tmp/lib") < 0 || VIR_STRDUP(driver->config->channelTargetDir, "/tmp/channel") < 0) goto error; if (!mkdtemp(statedir)) { virFilePrintf(stderr, "Cannot create fake stateDir"); goto error; } if (VIR_STRDUP(driver->config->stateDir, statedir) < 0) { rmdir(statedir); goto error; } if (!mkdtemp(configdir)) { virFilePrintf(stderr, "Cannot create fake configDir"); goto error; } if (VIR_STRDUP(driver->config->configDir, configdir) < 0) { rmdir(configdir); goto error; } driver->caps = testQemuCapsInit(); if (!driver->caps) goto error; /* Using /dev/null for libDir and cacheDir automatically produces errors * upon attempt to use any of them */ driver->qemuCapsCache = virQEMUCapsCacheNew("/dev/null", "/dev/null", 0, 0); if (!driver->qemuCapsCache) goto error; driver->xmlopt = virQEMUDriverCreateXMLConf(driver); if (!driver->xmlopt) goto error; if (qemuTestCapsCacheInsert(driver->qemuCapsCache, NULL) < 0) goto error; if (!(mgr = virSecurityManagerNew("none", "qemu", VIR_SECURITY_MANAGER_PRIVILEGED))) goto error; if (!(driver->securityManager = virSecurityManagerNewStack(mgr))) goto error; return 0; error: virObjectUnref(mgr); qemuTestDriverFree(driver); return -1; }
static int mymain(void) { int ret = 0; struct testInfo info; if (qemuTestDriverInit(&driver) < 0) return EXIT_FAILURE; /* TODO: test with format probing disabled too */ driver.config->allowDiskFormatProbing = true; # define DO_TEST_FULL(name, is_different, when) \ do { \ if (testInfoSet(&info, name, is_different, when) < 0) { \ fprintf(stderr, "Failed to generate test data for '%s'", name); \ return -1; \ } \ \ if (info.outInactiveName) { \ if (virtTestRun("QEMU XML-2-XML-inactive " name, \ testXML2XMLInactive, &info) < 0) \ ret = -1; \ } \ \ if (info.outActiveName) { \ if (virtTestRun("QEMU XML-2-XML-active " name, \ testXML2XMLActive, &info) < 0) \ ret = -1; \ \ if (virtTestRun("QEMU XML-2-XML-status " name, \ testCompareStatusXMLToXMLFiles, &info) < 0) \ ret = -1; \ } \ testInfoFree(&info); \ } while (0) # define DO_TEST(name) \ DO_TEST_FULL(name, false, WHEN_BOTH) # define DO_TEST_DIFFERENT(name) \ DO_TEST_FULL(name, true, WHEN_BOTH) /* Unset or set all envvars here that are copied in qemudBuildCommandLine * using ADD_ENV_COPY, otherwise these tests may fail due to unexpected * values for these envvars */ setenv("PATH", "/bin", 1); DO_TEST("minimal"); DO_TEST("machine-core-on"); DO_TEST("machine-core-off"); DO_TEST_DIFFERENT("default-kvm-host-arch"); DO_TEST_DIFFERENT("default-qemu-host-arch"); DO_TEST("boot-cdrom"); DO_TEST("boot-network"); DO_TEST("boot-floppy"); DO_TEST("boot-multi"); DO_TEST("boot-menu-enable-with-timeout"); DO_TEST("boot-menu-disable"); DO_TEST_DIFFERENT("boot-menu-disable-with-timeout"); DO_TEST("boot-order"); DO_TEST("reboot-timeout-enabled"); DO_TEST("reboot-timeout-disabled"); DO_TEST("clock-utc"); DO_TEST("clock-localtime"); DO_TEST_DIFFERENT("cpu-empty"); DO_TEST("cpu-kvmclock"); DO_TEST("cpu-host-kvmclock"); DO_TEST("cpu-host-passthrough-features"); DO_TEST("cpu-host-model-features"); DO_TEST("clock-catchup"); DO_TEST("kvmclock"); DO_TEST("clock-timer-hyperv-rtc"); DO_TEST("cpu-eoi-disabled"); DO_TEST("cpu-eoi-enabled"); DO_TEST("eoi-disabled"); DO_TEST("eoi-enabled"); DO_TEST("pv-spinlock-disabled"); DO_TEST("pv-spinlock-enabled"); DO_TEST("hyperv"); DO_TEST("hyperv-off"); DO_TEST("hyperv-panic"); DO_TEST("kvm-features"); DO_TEST("kvm-features-off"); DO_TEST_DIFFERENT("pmu-feature"); DO_TEST("pmu-feature-off"); DO_TEST("hugepages"); DO_TEST("hugepages-pages"); DO_TEST("hugepages-pages2"); DO_TEST("hugepages-pages3"); DO_TEST("hugepages-shared"); DO_TEST("nosharepages"); DO_TEST("disk-aio"); DO_TEST("disk-cdrom"); DO_TEST("disk-floppy"); DO_TEST("disk-many"); DO_TEST("disk-xenvbd"); DO_TEST("disk-usb"); DO_TEST("disk-virtio"); DO_TEST("floppy-drive-fat"); DO_TEST("disk-drive-fat"); DO_TEST("disk-drive-fmt-qcow"); DO_TEST("disk-drive-copy-on-read"); DO_TEST("disk-drive-network-nbd"); DO_TEST("disk-drive-network-nbd-export"); DO_TEST("disk-drive-network-nbd-ipv6"); DO_TEST("disk-drive-network-nbd-ipv6-export"); DO_TEST("disk-drive-network-nbd-unix"); DO_TEST("disk-drive-network-iscsi"); DO_TEST("disk-drive-network-iscsi-auth"); DO_TEST("disk-scsi-device"); DO_TEST("disk-scsi-vscsi"); DO_TEST("disk-scsi-virtio-scsi"); DO_TEST("disk-virtio-scsi-num_queues"); DO_TEST("disk-virtio-scsi-cmd_per_lun"); DO_TEST("disk-virtio-scsi-max_sectors"); DO_TEST("disk-virtio-scsi-ioeventfd"); DO_TEST("disk-scsi-megasas"); DO_TEST_DIFFERENT("disk-mirror-old"); DO_TEST_FULL("disk-mirror", false, WHEN_ACTIVE); DO_TEST_FULL("disk-mirror", true, WHEN_INACTIVE); DO_TEST_FULL("disk-active-commit", false, WHEN_ACTIVE); DO_TEST("graphics-listen-network"); DO_TEST("graphics-vnc"); DO_TEST("graphics-vnc-websocket"); DO_TEST("graphics-vnc-sasl"); DO_TEST("graphics-vnc-tls"); DO_TEST("graphics-sdl"); DO_TEST("graphics-sdl-fullscreen"); DO_TEST("graphics-spice"); DO_TEST("graphics-spice-compression"); DO_TEST("graphics-spice-qxl-vga"); DO_TEST("input-usbmouse"); DO_TEST("input-usbtablet"); DO_TEST("misc-acpi"); DO_TEST("misc-disable-s3"); DO_TEST("misc-disable-suspends"); DO_TEST("misc-enable-s4"); DO_TEST("misc-no-reboot"); DO_TEST("net-vhostuser"); DO_TEST("net-user"); DO_TEST("net-virtio"); DO_TEST("net-virtio-device"); DO_TEST("net-virtio-disable-offloads"); DO_TEST("net-eth"); DO_TEST("net-eth-ifname"); DO_TEST("net-virtio-network-portgroup"); DO_TEST("net-hostdev"); DO_TEST("net-hostdev-vfio"); DO_TEST("net-midonet"); DO_TEST("net-openvswitch"); DO_TEST("sound"); DO_TEST("sound-device"); DO_TEST("net-bandwidth"); DO_TEST("net-bandwidth2"); DO_TEST("serial-vc"); DO_TEST("serial-pty"); DO_TEST("serial-dev"); DO_TEST("serial-file"); DO_TEST("serial-unix"); DO_TEST("serial-tcp"); DO_TEST("serial-udp"); DO_TEST("serial-tcp-telnet"); DO_TEST("serial-many"); DO_TEST("serial-spiceport"); DO_TEST("serial-spiceport-nospice"); DO_TEST("parallel-tcp"); DO_TEST("console-compat"); DO_TEST_DIFFERENT("console-compat2"); DO_TEST("console-virtio-many"); DO_TEST("channel-guestfwd"); DO_TEST("channel-virtio"); DO_TEST_DIFFERENT("channel-virtio-state"); DO_TEST("hostdev-usb-address"); DO_TEST("hostdev-pci-address"); DO_TEST("hostdev-vfio"); DO_TEST("pci-rom"); DO_TEST("pci-serial-dev-chardev"); DO_TEST("encrypted-disk"); DO_TEST_DIFFERENT("memtune"); DO_TEST_DIFFERENT("memtune-unlimited"); DO_TEST("blkiotune"); DO_TEST("blkiotune-device"); DO_TEST("cputune"); DO_TEST("cputune-zero-shares"); DO_TEST_DIFFERENT("cputune-iothreadsched"); DO_TEST("cputune-iothreadsched-zeropriority"); DO_TEST("cputune-numatune"); DO_TEST("vcpu-placement-static"); DO_TEST("smp"); DO_TEST("iothreads"); DO_TEST("iothreads-ids"); DO_TEST("iothreads-ids-partial"); DO_TEST_DIFFERENT("cputune-iothreads"); DO_TEST("iothreads-disk"); DO_TEST("iothreads-disk-virtio-ccw"); DO_TEST("lease"); DO_TEST("event_idx"); DO_TEST("vhost_queues"); DO_TEST("interface-driver"); DO_TEST("interface-server"); DO_TEST("virtio-lun"); DO_TEST("usb-redir"); DO_TEST_DIFFERENT("usb-redir-filter"); DO_TEST_DIFFERENT("usb-redir-filter-version"); DO_TEST("blkdeviotune"); DO_TEST_DIFFERENT("controller-usb-order"); DO_TEST_FULL("seclabel-dynamic-baselabel", false, WHEN_INACTIVE); DO_TEST_FULL("seclabel-dynamic-override", false, WHEN_INACTIVE); DO_TEST_FULL("seclabel-dynamic-labelskip", true, WHEN_INACTIVE); DO_TEST_FULL("seclabel-dynamic-relabel", true, WHEN_INACTIVE); DO_TEST("seclabel-static"); DO_TEST_FULL("seclabel-static-labelskip", false, WHEN_ACTIVE); DO_TEST_DIFFERENT("seclabel-none"); DO_TEST("seclabel-dac-none"); DO_TEST("seclabel-dynamic-none"); DO_TEST("seclabel-device-multiple"); DO_TEST_FULL("seclabel-dynamic-none-relabel", true, WHEN_INACTIVE); DO_TEST("numad-static-vcpu-no-numatune"); DO_TEST("disk-scsi-lun-passthrough-sgio"); DO_TEST("disk-scsi-disk-vpd"); DO_TEST_DIFFERENT("disk-source-pool"); DO_TEST("disk-source-pool-mode"); DO_TEST_DIFFERENT("disk-drive-discard"); DO_TEST("virtio-rng-random"); DO_TEST("virtio-rng-egd"); DO_TEST("pseries-nvram"); DO_TEST_DIFFERENT("pseries-panic-missing"); DO_TEST_DIFFERENT("pseries-panic-no-address"); /* These tests generate different XML */ DO_TEST_DIFFERENT("balloon-device-auto"); DO_TEST_DIFFERENT("balloon-device-period"); DO_TEST_DIFFERENT("channel-virtio-auto"); DO_TEST_DIFFERENT("console-compat-auto"); DO_TEST_DIFFERENT("disk-scsi-device-auto"); DO_TEST_DIFFERENT("console-virtio"); DO_TEST_DIFFERENT("serial-target-port-auto"); DO_TEST_DIFFERENT("graphics-listen-network2"); DO_TEST_DIFFERENT("graphics-spice-timeout"); DO_TEST_DIFFERENT("numad-auto-vcpu-no-numatune"); DO_TEST_DIFFERENT("numad-auto-memory-vcpu-no-cpuset-and-placement"); DO_TEST_DIFFERENT("numad-auto-memory-vcpu-cpuset"); DO_TEST_DIFFERENT("usb-ich9-ehci-addr"); DO_TEST_DIFFERENT("metadata"); DO_TEST_DIFFERENT("metadata-duplicate"); DO_TEST("tpm-passthrough"); DO_TEST("pci-bridge"); DO_TEST_DIFFERENT("pci-bridge-many-disks"); DO_TEST_DIFFERENT("pci-autoadd-addr"); DO_TEST_DIFFERENT("pci-autoadd-idx"); DO_TEST_DIFFERENT("pcie-root"); DO_TEST_DIFFERENT("q35"); DO_TEST("pcie-root-port"); DO_TEST("pcie-root-port-too-many"); DO_TEST("pcie-switch-upstream-port"); DO_TEST("pcie-switch-downstream-port"); DO_TEST("hostdev-scsi-lsi"); DO_TEST("hostdev-scsi-virtio-scsi"); DO_TEST("hostdev-scsi-readonly"); DO_TEST("disk-copy_on_read"); DO_TEST("hostdev-scsi-shareable"); DO_TEST("hostdev-scsi-sgio"); DO_TEST("hostdev-scsi-rawio"); DO_TEST_DIFFERENT("hostdev-scsi-autogen-address"); DO_TEST("hostdev-scsi-large-unit"); DO_TEST("hostdev-scsi-lsi-iscsi"); DO_TEST("hostdev-scsi-lsi-iscsi-auth"); DO_TEST("hostdev-scsi-virtio-iscsi"); DO_TEST("hostdev-scsi-virtio-iscsi-auth"); DO_TEST_DIFFERENT("s390-defaultconsole"); DO_TEST("pcihole64"); DO_TEST_DIFFERENT("pcihole64-gib"); DO_TEST("pcihole64-none"); DO_TEST("pcihole64-q35"); DO_TEST_DIFFERENT("panic"); DO_TEST("panic-isa"); DO_TEST("panic-pseries"); DO_TEST("panic-double"); DO_TEST("panic-no-address"); DO_TEST_DIFFERENT("disk-backing-chains"); DO_TEST("chardev-label"); DO_TEST_DIFFERENT("cpu-numa1"); DO_TEST_DIFFERENT("cpu-numa2"); DO_TEST_DIFFERENT("cpu-numa-no-memory-element"); DO_TEST_DIFFERENT("cpu-numa-disordered"); DO_TEST("cpu-numa-disjoint"); DO_TEST("cpu-numa-memshared"); DO_TEST_DIFFERENT("numatune-auto-prefer"); DO_TEST_DIFFERENT("numatune-memnode"); DO_TEST("numatune-memnode-no-memory"); DO_TEST("bios-nvram"); DO_TEST_DIFFERENT("bios-nvram-os-interleave"); DO_TEST("tap-vhost"); DO_TEST_DIFFERENT("tap-vhost-incorrect"); DO_TEST("shmem"); DO_TEST("smbios"); DO_TEST("smbios-multiple-type2"); DO_TEST("aarch64-aavmf-virtio-mmio"); DO_TEST("aarch64-gic"); DO_TEST("aarch64-gicv3"); DO_TEST("memory-hotplug"); DO_TEST("memory-hotplug-nonuma"); DO_TEST("memory-hotplug-dimm"); DO_TEST("net-udp"); DO_TEST("video-virtio-gpu-device"); DO_TEST("video-virtio-gpu-virgl"); DO_TEST("virtio-input"); DO_TEST("virtio-input-passthrough"); qemuTestDriverFree(&driver); return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; }
static int mymain(void) { int ret = 0; virQEMUDriver driver; struct testBackingXMLjsonXMLdata xmljsonxmldata; struct testQemuDiskXMLToJSONData diskxmljsondata; char *capslatest_x86_64 = NULL; virQEMUCapsPtr caps_x86_64 = NULL; if (qemuTestDriverInit(&driver) < 0) return EXIT_FAILURE; diskxmljsondata.driver = &driver; if (!(capslatest_x86_64 = testQemuGetLatestCapsForArch("x86_64", "xml"))) return EXIT_FAILURE; VIR_TEST_VERBOSE("\nlatest caps x86_64: %s\n", capslatest_x86_64); if (!(caps_x86_64 = qemuTestParseCapabilitiesArch(virArchFromString("x86_64"), capslatest_x86_64))) return EXIT_FAILURE; diskxmljsondata.qemuCaps = caps_x86_64; virTestCounterReset("qemu storage source xml->json->xml "); # define TEST_JSON_FORMAT(tpe, xmlstr) \ do { \ xmljsonxmldata.type = tpe; \ xmljsonxmldata.xml = xmlstr; \ if (virTestRun(virTestCounterNext(), testBackingXMLjsonXML, \ &xmljsonxmldata) < 0) \ ret = -1; \ } while (0) # define TEST_JSON_FORMAT_NET(xmlstr) \ TEST_JSON_FORMAT(VIR_STORAGE_TYPE_NETWORK, xmlstr) TEST_JSON_FORMAT(VIR_STORAGE_TYPE_FILE, "<source file='/path/to/file'/>\n"); /* type VIR_STORAGE_TYPE_BLOCK is not tested since it parses back to 'file' */ /* type VIR_STORAGE_TYPE_DIR it is a 'format' driver in qemu */ TEST_JSON_FORMAT_NET("<source protocol='http' name=''>\n" " <host name='example.com' port='80'/>\n" "</source>\n"); TEST_JSON_FORMAT_NET("<source protocol='http' name='file'>\n" " <host name='example.com' port='80'/>\n" "</source>\n"); TEST_JSON_FORMAT_NET("<source protocol='https' name='file'>\n" " <host name='example.com' port='432'/>\n" "</source>\n"); TEST_JSON_FORMAT_NET("<source protocol='gluster' name='vol/file'>\n" " <host name='example.com' port='24007'/>\n" "</source>\n"); TEST_JSON_FORMAT_NET("<source protocol='gluster' name='testvol/img.qcow2'>\n" " <host name='example.com' port='1234'/>\n" " <host transport='unix' socket='/path/socket'/>\n" " <host name='example.com' port='24007'/>\n" "</source>\n"); TEST_JSON_FORMAT_NET("<source protocol='nbd'>\n" " <host transport='unix' socket='/path/to/socket'/>\n" "</source>\n"); TEST_JSON_FORMAT_NET("<source protocol='nbd' name='blah'>\n" " <host name='example.org' port='6000'/>\n" "</source>\n"); TEST_JSON_FORMAT_NET("<source protocol='nbd'>\n" " <host name='example.org' port='6000'/>\n" "</source>\n"); TEST_JSON_FORMAT_NET("<source protocol='ssh' name='blah'>\n" " <host name='example.org' port='6000'/>\n" "</source>\n"); TEST_JSON_FORMAT_NET("<source protocol='rbd' name='libvirt/test'>\n" " <host name='example.com' port='1234'/>\n" " <host name='example2.com'/>\n" " <snapshot name='snapshotname'/>\n" " <config file='/path/to/conf'/>\n" "</source>\n"); TEST_JSON_FORMAT_NET("<source protocol='iscsi' name='iqn.2016-12.com.virttest:emulated-iscsi-noauth.target/0'>\n" " <host name='test.org' port='3260'/>\n" "</source>\n"); TEST_JSON_FORMAT_NET("<source protocol='iscsi' name='iqn.2016-12.com.virttest:emulated-iscsi-noauth.target/6'>\n" " <host name='test.org' port='1234'/>\n" "</source>\n"); TEST_JSON_FORMAT_NET("<source protocol='sheepdog' name='test'>\n" " <host name='example.com' port='321'/>\n" "</source>\n"); TEST_JSON_FORMAT_NET("<source protocol='vxhs' name='c6718f6b-0401-441d-a8c3-1f0064d75ee0'>\n" " <host name='example.com' port='9999'/>\n" "</source>\n"); # define TEST_DISK_TO_JSON_FULL(nme, fl) \ do { \ diskxmljsondata.name = nme; \ diskxmljsondata.props = NULL; \ diskxmljsondata.nprops = 0; \ diskxmljsondata.fail = fl; \ if (virTestRun("disk xml to props " nme, testQemuDiskXMLToProps, \ &diskxmljsondata) < 0) \ ret = -1; \ if (virTestRun("disk xml to props validate schema " nme, \ testQemuDiskXMLToPropsValidateSchema, &diskxmljsondata) < 0) \ ret = -1; \ if (virTestRun("disk xml to props validate file " nme, \ testQemuDiskXMLToPropsValidateFile, &diskxmljsondata) < 0) \ ret = -1; \ testQemuDiskXMLToPropsClear(&diskxmljsondata); \ } while (0) # define TEST_DISK_TO_JSON(nme) TEST_DISK_TO_JSON_FULL(nme, false) if (!(diskxmljsondata.schema = testQEMUSchemaLoad())) { ret = -1; goto cleanup; } if (virQEMUQAPISchemaPathGet("blockdev-add/arg-type", diskxmljsondata.schema, &diskxmljsondata.schemaroot) < 0 || !diskxmljsondata.schemaroot) { VIR_TEST_VERBOSE("failed to find schema entry for blockdev-add\n"); ret = -1; goto cleanup; } TEST_DISK_TO_JSON_FULL("nodename-long-format", true); TEST_DISK_TO_JSON_FULL("nodename-long-protocol", true); TEST_DISK_TO_JSON("file-raw-noopts"); TEST_DISK_TO_JSON("file-bochs-noopts"); TEST_DISK_TO_JSON("file-cloop-noopts"); TEST_DISK_TO_JSON("file-dmg-noopts"); TEST_DISK_TO_JSON("file-ploop-noopts"); TEST_DISK_TO_JSON("file-vdi-noopts"); TEST_DISK_TO_JSON("file-vhd-noopts"); TEST_DISK_TO_JSON("file-vpc-noopts"); TEST_DISK_TO_JSON("file-backing_basic-noopts"); TEST_DISK_TO_JSON("dir-fat-readonly"); TEST_DISK_TO_JSON("dir-fat-floppy"); TEST_DISK_TO_JSON("file-raw-aio_native"); TEST_DISK_TO_JSON("file-backing_basic-aio_threads"); TEST_DISK_TO_JSON("file-raw-luks"); TEST_DISK_TO_JSON("file-qcow2-backing-chain-noopts"); TEST_DISK_TO_JSON("file-qcow2-backing-chain-unterminated"); TEST_DISK_TO_JSON("file-qcow2-backing-chain-encryption"); TEST_DISK_TO_JSON("network-qcow2-backing-chain-encryption_auth"); TEST_DISK_TO_JSON("file-backing_basic-unmap"); TEST_DISK_TO_JSON("file-backing_basic-unmap-detect"); TEST_DISK_TO_JSON("file-backing_basic-unmap-ignore"); TEST_DISK_TO_JSON("file-backing_basic-detect"); TEST_DISK_TO_JSON("file-backing_basic-cache-none"); TEST_DISK_TO_JSON("file-backing_basic-cache-writethrough"); TEST_DISK_TO_JSON("file-backing_basic-cache-writeback"); TEST_DISK_TO_JSON("file-backing_basic-cache-directsync"); TEST_DISK_TO_JSON("file-backing_basic-cache-unsafe"); TEST_DISK_TO_JSON("network-qcow2-backing-chain-cache-unsafe"); TEST_DISK_TO_JSON("dir-fat-cache"); TEST_DISK_TO_JSON("network-nbd-tls"); TEST_DISK_TO_JSON("block-raw-noopts"); TEST_DISK_TO_JSON("block-raw-reservations"); cleanup: virHashFree(diskxmljsondata.schema); qemuTestDriverFree(&driver); VIR_FREE(capslatest_x86_64); virObjectUnref(caps_x86_64); return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; }
static int mymain(void) { int ret = 0; struct testInfo info; if (qemuTestDriverInit(&driver) < 0) return EXIT_FAILURE; /* TODO: test with format probing disabled too */ driver.config->allowDiskFormatProbing = true; # define DO_TEST_FULL(name, when, ...) \ do { \ if (testInfoSet(&info, name, when) < 0) { \ VIR_TEST_DEBUG("Failed to generate test data for '%s'", name); \ return -1; \ } \ virQEMUCapsSetList(info.qemuCaps, __VA_ARGS__, QEMU_CAPS_LAST); \ \ if (info.outInactiveName) { \ if (virtTestRun("QEMU XML-2-XML-inactive " name, \ testXML2XMLInactive, &info) < 0) \ ret = -1; \ } \ \ if (info.outActiveName) { \ if (virtTestRun("QEMU XML-2-XML-active " name, \ testXML2XMLActive, &info) < 0) \ ret = -1; \ \ if (virtTestRun("QEMU XML-2-XML-status " name, \ testCompareStatusXMLToXMLFiles, &info) < 0) \ ret = -1; \ } \ testInfoFree(&info); \ } while (0) # define NONE QEMU_CAPS_LAST # define DO_TEST(name) \ DO_TEST_FULL(name, WHEN_BOTH, NONE) /* Unset or set all envvars here that are copied in qemudBuildCommandLine * using ADD_ENV_COPY, otherwise these tests may fail due to unexpected * values for these envvars */ setenv("PATH", "/bin", 1); DO_TEST("minimal"); DO_TEST("machine-core-on"); DO_TEST("machine-core-off"); DO_TEST("default-kvm-host-arch"); DO_TEST("default-qemu-host-arch"); DO_TEST("boot-cdrom"); DO_TEST("boot-network"); DO_TEST("boot-floppy"); DO_TEST("boot-multi"); DO_TEST("boot-menu-enable-with-timeout"); DO_TEST("boot-menu-disable"); DO_TEST("boot-menu-disable-with-timeout"); DO_TEST("boot-order"); DO_TEST("reboot-timeout-enabled"); DO_TEST("reboot-timeout-disabled"); DO_TEST("clock-utc"); DO_TEST("clock-localtime"); DO_TEST("cpu-empty"); DO_TEST("cpu-kvmclock"); DO_TEST("cpu-host-kvmclock"); DO_TEST("cpu-host-passthrough-features"); DO_TEST("cpu-host-model-features"); DO_TEST("clock-catchup"); DO_TEST("kvmclock"); DO_TEST("clock-timer-hyperv-rtc"); DO_TEST("cpu-eoi-disabled"); DO_TEST("cpu-eoi-enabled"); DO_TEST("eoi-disabled"); DO_TEST("eoi-enabled"); DO_TEST("pv-spinlock-disabled"); DO_TEST("pv-spinlock-enabled"); DO_TEST("hyperv"); DO_TEST("hyperv-off"); DO_TEST("hyperv-panic"); DO_TEST("kvm-features"); DO_TEST("kvm-features-off"); DO_TEST("pmu-feature"); DO_TEST("pmu-feature-off"); DO_TEST("hugepages"); DO_TEST("hugepages-pages"); DO_TEST("hugepages-pages2"); DO_TEST("hugepages-pages3"); DO_TEST("hugepages-shared"); DO_TEST("nosharepages"); DO_TEST("restore-v2"); DO_TEST("migrate"); DO_TEST("qemu-ns-no-env"); DO_TEST("disk-aio"); DO_TEST("disk-cdrom"); DO_TEST("disk-cdrom-empty"); DO_TEST("disk-floppy"); DO_TEST("disk-many"); DO_TEST("disk-xenvbd"); DO_TEST("disk-usb-device"); DO_TEST("disk-virtio"); DO_TEST("floppy-drive-fat"); DO_TEST("disk-drive-boot-disk"); DO_TEST("disk-drive-boot-cdrom"); DO_TEST("disk-drive-error-policy-stop"); DO_TEST("disk-drive-error-policy-enospace"); DO_TEST("disk-drive-error-policy-wreport-rignore"); DO_TEST("disk-drive-fat"); DO_TEST("disk-drive-fmt-qcow"); DO_TEST("disk-drive-copy-on-read"); DO_TEST("disk-drive-cache-v2-wt"); DO_TEST("disk-drive-cache-v2-wb"); DO_TEST("disk-drive-cache-v2-none"); DO_TEST("disk-drive-cache-directsync"); DO_TEST("disk-drive-cache-unsafe"); DO_TEST("disk-drive-network-nbd"); DO_TEST("disk-drive-network-nbd-export"); DO_TEST("disk-drive-network-nbd-ipv6"); DO_TEST("disk-drive-network-nbd-ipv6-export"); DO_TEST("disk-drive-network-nbd-unix"); DO_TEST("disk-drive-network-iscsi"); DO_TEST("disk-drive-network-iscsi-auth"); DO_TEST("disk-drive-network-gluster"); DO_TEST("disk-drive-network-rbd"); DO_TEST("disk-drive-network-rbd-auth"); DO_TEST("disk-drive-network-rbd-ipv6"); DO_TEST("disk-drive-network-rbd-ceph-env"); DO_TEST("disk-drive-network-sheepdog"); DO_TEST_FULL("disk-scsi-device", WHEN_ACTIVE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_SCSI_LSI); DO_TEST("disk-scsi-vscsi"); DO_TEST_FULL("disk-scsi-virtio-scsi", WHEN_ACTIVE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_SCSI); DO_TEST_FULL("disk-virtio-scsi-num_queues", WHEN_ACTIVE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_SCSI); DO_TEST_FULL("disk-virtio-scsi-cmd_per_lun", WHEN_ACTIVE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_SCSI); DO_TEST_FULL("disk-virtio-scsi-max_sectors", WHEN_ACTIVE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_SCSI); DO_TEST_FULL("disk-virtio-scsi-ioeventfd", WHEN_ACTIVE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_SCSI); DO_TEST_FULL("disk-scsi-megasas", WHEN_ACTIVE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_SCSI_MEGASAS); DO_TEST_FULL("disk-scsi-mptsas1068", WHEN_ACTIVE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_SCSI_MPTSAS1068, QEMU_CAPS_SCSI_DISK_WWN); DO_TEST("disk-mirror-old"); DO_TEST_FULL("disk-mirror", WHEN_ACTIVE, NONE); DO_TEST_FULL("disk-mirror", WHEN_INACTIVE, NONE); DO_TEST_FULL("disk-active-commit", WHEN_ACTIVE, NONE); DO_TEST("graphics-listen-network"); DO_TEST("graphics-vnc"); DO_TEST("graphics-vnc-websocket"); DO_TEST("graphics-vnc-sasl"); DO_TEST("graphics-vnc-tls"); DO_TEST("graphics-sdl"); DO_TEST("graphics-sdl-fullscreen"); DO_TEST("graphics-spice"); DO_TEST("graphics-spice-compression"); DO_TEST("graphics-spice-qxl-vga"); DO_TEST("nographics-vga"); DO_TEST("input-usbmouse"); DO_TEST("input-usbtablet"); DO_TEST("misc-acpi"); DO_TEST("misc-disable-s3"); DO_TEST("misc-disable-suspends"); DO_TEST("misc-enable-s4"); DO_TEST("misc-no-reboot"); DO_TEST("misc-uuid"); DO_TEST("net-vhostuser"); DO_TEST("net-user"); DO_TEST("net-virtio"); DO_TEST("net-virtio-device"); DO_TEST("net-virtio-disable-offloads"); DO_TEST("net-eth"); DO_TEST("net-eth-ifname"); DO_TEST("net-virtio-network-portgroup"); DO_TEST("net-hostdev"); DO_TEST("net-hostdev-vfio"); DO_TEST("net-midonet"); DO_TEST("net-openvswitch"); DO_TEST("sound"); DO_TEST("sound-device"); DO_TEST("watchdog"); DO_TEST("net-bandwidth"); DO_TEST("net-bandwidth2"); DO_TEST("serial-vc"); DO_TEST("serial-pty"); DO_TEST("serial-dev"); DO_TEST("serial-file"); DO_TEST("serial-unix"); DO_TEST("serial-tcp"); DO_TEST("serial-udp"); DO_TEST("serial-tcp-telnet"); DO_TEST("serial-many"); DO_TEST("serial-spiceport"); DO_TEST("serial-spiceport-nospice"); DO_TEST("parallel-tcp"); DO_TEST("console-compat"); DO_TEST("console-compat2"); DO_TEST("console-virtio-many"); DO_TEST("channel-guestfwd"); DO_TEST("channel-virtio"); DO_TEST("channel-virtio-state"); DO_TEST("hostdev-usb-address"); DO_TEST("hostdev-pci-address"); DO_TEST("hostdev-vfio"); DO_TEST("pci-rom"); DO_TEST("pci-serial-dev-chardev"); DO_TEST("encrypted-disk"); DO_TEST("memtune"); DO_TEST("memtune-unlimited"); DO_TEST("blkiotune"); DO_TEST("blkiotune-device"); DO_TEST("cputune"); DO_TEST("cputune-zero-shares"); DO_TEST("cputune-iothreadsched"); DO_TEST("cputune-iothreadsched-zeropriority"); DO_TEST("cputune-numatune"); DO_TEST_FULL("vcpu-placement-static", WHEN_ACTIVE, QEMU_CAPS_DEVICE_PCI_BRIDGE); DO_TEST("smp"); DO_TEST("iothreads"); DO_TEST("iothreads-ids"); DO_TEST("iothreads-ids-partial"); DO_TEST("cputune-iothreads"); DO_TEST("iothreads-disk"); DO_TEST_FULL("iothreads-disk-virtio-ccw", WHEN_ACTIVE, QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390); DO_TEST("lease"); DO_TEST("event_idx"); DO_TEST("vhost_queues"); DO_TEST("interface-driver"); DO_TEST("interface-server"); DO_TEST("virtio-lun"); DO_TEST("usb-redir"); DO_TEST("usb-redir-filter"); DO_TEST("usb-redir-filter-version"); DO_TEST("blkdeviotune"); DO_TEST("controller-usb-order"); DO_TEST_FULL("seclabel-dynamic-baselabel", WHEN_INACTIVE, NONE); DO_TEST_FULL("seclabel-dynamic-override", WHEN_INACTIVE, NONE); DO_TEST_FULL("seclabel-dynamic-labelskip", WHEN_INACTIVE, NONE); DO_TEST_FULL("seclabel-dynamic-relabel", WHEN_INACTIVE, NONE); DO_TEST("seclabel-static"); DO_TEST_FULL("seclabel-static-labelskip", WHEN_ACTIVE, NONE); DO_TEST("seclabel-none"); DO_TEST("seclabel-dac-none"); DO_TEST("seclabel-dynamic-none"); DO_TEST("seclabel-device-multiple"); DO_TEST_FULL("seclabel-dynamic-none-relabel", WHEN_INACTIVE, NONE); DO_TEST("numad-static-vcpu-no-numatune"); DO_TEST_FULL("disk-scsi-lun-passthrough-sgio", WHEN_ACTIVE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_DISK_WWN); DO_TEST_FULL("disk-scsi-disk-vpd", WHEN_ACTIVE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_DISK_WWN); DO_TEST("disk-source-pool"); DO_TEST("disk-source-pool-mode"); DO_TEST("disk-drive-discard"); DO_TEST("virtio-rng-random"); DO_TEST("virtio-rng-egd"); DO_TEST("pseries-nvram"); DO_TEST("pseries-panic-missing"); DO_TEST("pseries-panic-no-address"); DO_TEST("balloon-device-auto"); DO_TEST("balloon-device-period"); DO_TEST("channel-virtio-auto"); DO_TEST("console-compat-auto"); DO_TEST_FULL("disk-scsi-device-auto", WHEN_ACTIVE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_SCSI_LSI); DO_TEST("console-virtio"); DO_TEST("serial-target-port-auto"); DO_TEST("graphics-listen-network2"); DO_TEST("graphics-spice-timeout"); DO_TEST("numad-auto-vcpu-no-numatune"); DO_TEST("numad-auto-memory-vcpu-no-cpuset-and-placement"); DO_TEST("numad-auto-memory-vcpu-cpuset"); DO_TEST("usb-ich9-ehci-addr"); DO_TEST("disk-copy_on_read"); DO_TEST("tpm-passthrough"); DO_TEST("metadata"); DO_TEST("metadata-duplicate"); DO_TEST_FULL("pci-bridge", WHEN_ACTIVE, QEMU_CAPS_DEVICE_PCI_BRIDGE); DO_TEST_FULL("pci-bridge-many-disks", WHEN_ACTIVE, QEMU_CAPS_DEVICE_PCI_BRIDGE); DO_TEST_FULL("pci-autoadd-addr", WHEN_ACTIVE, QEMU_CAPS_DEVICE_PCI_BRIDGE); DO_TEST_FULL("pci-autoadd-idx", WHEN_ACTIVE, QEMU_CAPS_DEVICE_PCI_BRIDGE); DO_TEST_FULL("q35", WHEN_ACTIVE, QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI, QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL); DO_TEST_FULL("q35-usb2", WHEN_ACTIVE, QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI, QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL); DO_TEST_FULL("q35-usb2-multi", WHEN_ACTIVE, QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI, QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL); DO_TEST_FULL("q35-usb2-reorder", WHEN_ACTIVE, QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI, QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL); DO_TEST_FULL("pcie-root", WHEN_ACTIVE, QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI, QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL); DO_TEST_FULL("pcie-root-port", WHEN_ACTIVE, QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI, QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL); DO_TEST_FULL("pcie-switch-upstream-port", WHEN_ACTIVE, QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI, QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL); DO_TEST_FULL("pcie-switch-downstream-port", WHEN_ACTIVE, QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI, QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL); DO_TEST_FULL("hostdev-scsi-lsi", WHEN_ACTIVE, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_DEVICE_SCSI_GENERIC); DO_TEST_FULL("hostdev-scsi-virtio-scsi", WHEN_ACTIVE, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_DEVICE_SCSI_GENERIC); DO_TEST_FULL("hostdev-scsi-readonly", WHEN_ACTIVE, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_DEVICE_SCSI_GENERIC); DO_TEST_FULL("hostdev-scsi-shareable", WHEN_ACTIVE, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_DEVICE_SCSI_GENERIC); DO_TEST_FULL("hostdev-scsi-sgio", WHEN_ACTIVE, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_DEVICE_SCSI_GENERIC); DO_TEST_FULL("hostdev-scsi-rawio", WHEN_ACTIVE, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_DEVICE_SCSI_GENERIC); DO_TEST_FULL("hostdev-scsi-autogen-address", WHEN_ACTIVE, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_DEVICE_SCSI_GENERIC); DO_TEST_FULL("hostdev-scsi-large-unit", WHEN_ACTIVE, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_DEVICE_SCSI_GENERIC); DO_TEST_FULL("hostdev-scsi-lsi-iscsi", WHEN_ACTIVE, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_DEVICE_SCSI_GENERIC); DO_TEST_FULL("hostdev-scsi-lsi-iscsi-auth", WHEN_ACTIVE, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_DEVICE_SCSI_GENERIC); DO_TEST_FULL("hostdev-scsi-virtio-iscsi", WHEN_ACTIVE, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_DEVICE_SCSI_GENERIC); DO_TEST_FULL("hostdev-scsi-virtio-iscsi-auth", WHEN_ACTIVE, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_DEVICE_SCSI_GENERIC); DO_TEST_FULL("s390-defaultconsole", WHEN_ACTIVE, QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390); DO_TEST("pcihole64"); DO_TEST("pcihole64-gib"); DO_TEST("pcihole64-none"); DO_TEST_FULL("pcihole64-q35", WHEN_ACTIVE, QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI, QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_Q35_PCI_HOLE64_SIZE); DO_TEST("panic"); DO_TEST("panic-isa"); DO_TEST("panic-pseries"); DO_TEST("panic-double"); DO_TEST("panic-no-address"); DO_TEST("disk-backing-chains"); DO_TEST("chardev-label"); DO_TEST("cpu-numa1"); DO_TEST("cpu-numa2"); DO_TEST("cpu-numa-no-memory-element"); DO_TEST("cpu-numa-disordered"); DO_TEST("cpu-numa-disjoint"); DO_TEST("cpu-numa-memshared"); DO_TEST("numatune-auto-prefer"); DO_TEST("numatune-memnode"); DO_TEST("numatune-memnode-no-memory"); DO_TEST("bios-nvram"); DO_TEST("bios-nvram-os-interleave"); DO_TEST("tap-vhost"); DO_TEST("tap-vhost-incorrect"); DO_TEST("shmem"); DO_TEST("smbios"); DO_TEST("smbios-multiple-type2"); DO_TEST_FULL("aarch64-aavmf-virtio-mmio", WHEN_ACTIVE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB, QEMU_CAPS_DEVICE_VIRTIO_MMIO, QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM); DO_TEST_FULL("aarch64-virtio-pci-default", WHEN_ACTIVE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB, QEMU_CAPS_DEVICE_VIRTIO_MMIO, QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM, QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_VIRTIO_SCSI); DO_TEST_FULL("aarch64-virtio-pci-manual-addresses", WHEN_ACTIVE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB, QEMU_CAPS_DEVICE_VIRTIO_MMIO, QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM, QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_VIRTIO_SCSI); DO_TEST("aarch64-gic-none"); DO_TEST("aarch64-gic-default"); DO_TEST("aarch64-gic-v2"); DO_TEST("aarch64-gic-v3"); DO_TEST("aarch64-gic-host"); DO_TEST("memory-hotplug"); DO_TEST("memory-hotplug-nonuma"); DO_TEST("memory-hotplug-dimm"); DO_TEST("net-udp"); DO_TEST("video-virtio-gpu-device"); DO_TEST("video-virtio-gpu-virgl"); DO_TEST("virtio-input"); DO_TEST("virtio-input-passthrough"); qemuTestDriverFree(&driver); return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; }