From 950a90d489b2a79fe641a95194c56112b2682d9c Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Wed, 23 Mar 2016 16:19:26 +0100 Subject: [PATCH] qemuxml2argvtest: Adapt to ethernet automatic tap creation After 9c17d665fdc5 the tap device for ethernet network type is automatically precreated before spawning qemu. Problem is, the qemuxml2argvtest wasn't updated and thus is failing. Because of all the APIs that new code is calling, I had to mock a lot. Also, since the tap FDs are labeled separately from the rest of the devices/files I had to enable NOP security driver for the test too. Signed-off-by: Michal Privoznik --- cfg.mk | 2 +- tests/qemuhotplugtest.c | 7 --- .../qemuxml2argv-graphics-spice-timeout.args | 2 +- .../qemuxml2argv-net-eth-ifname.args | 2 +- .../qemuxml2argv-net-eth-names.args | 4 +- .../qemuxml2argv-net-eth.args | 2 +- tests/qemuxml2argvmock.c | 49 +++++++++++++++++-- tests/testutilsqemu.c | 9 ++++ 8 files changed, 61 insertions(+), 16 deletions(-) diff --git a/cfg.mk b/cfg.mk index 6f28eef29c..f5573dbd63 100644 --- a/cfg.mk +++ b/cfg.mk @@ -1139,7 +1139,7 @@ exclude_file_name_regexp--sc_copyright_usage = \ ^COPYING(|\.LESSER)$$ exclude_file_name_regexp--sc_flags_usage = \ - ^(docs/|src/util/virnetdevtap\.c$$|tests/(vir(cgroup|pci|usb)|nss)mock\.c$$) + ^(docs/|src/util/virnetdevtap\.c$$|tests/(vir(cgroup|pci|usb)|nss|qemuxml2argv)mock\.c$$) exclude_file_name_regexp--sc_libvirt_unmarked_diagnostics = \ ^(src/rpc/gendispatch\.pl$$|tests/) diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c index 2298a68ffe..1eb2b6a881 100644 --- a/tests/qemuhotplugtest.c +++ b/tests/qemuhotplugtest.c @@ -341,7 +341,6 @@ 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); @@ -369,12 +368,6 @@ mymain(void) 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; diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args index 7ca17ae108..8a29a7e9f6 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args @@ -26,7 +26,7 @@ id=virtio-disk0 \ media=cdrom,id=drive-ide0-1-0 \ -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 \ -device rtl8139,vlan=0,id=net0,mac=52:54:00:71:70:89,bus=pci.0,addr=0x7 \ --net tap,script=/etc/qemu-ifup,vlan=0,name=hostnet0 \ +-net tap,fd=3,vlan=0,name=hostnet0 \ -serial pty \ -device usb-tablet,id=input0 \ -spice port=5900 \ diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-eth-ifname.args b/tests/qemuxml2argvdata/qemuxml2argv-net-eth-ifname.args index 22d6dd0b72..b96c933ff1 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-net-eth-ifname.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-net-eth-ifname.args @@ -20,4 +20,4 @@ QEMU_AUDIO_DRV=none \ -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \ -device rtl8139,vlan=0,id=net0,mac=00:11:22:33:44:55,bus=pci.0,addr=0x3 \ --net tap,ifname=nic02,script=/etc/qemu-ifup,vlan=0,name=hostnet0 +-net tap,fd=3,vlan=0,name=hostnet0 diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-eth-names.args b/tests/qemuxml2argvdata/qemuxml2argv-net-eth-names.args index 0704178e93..a2c3f87ba0 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-net-eth-names.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-net-eth-names.args @@ -20,7 +20,7 @@ QEMU_AUDIO_DRV=none \ -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \ -device rtl8139,vlan=0,id=net0,mac=00:11:22:33:44:55,bus=pci.0,addr=0x3 \ --net tap,script=/etc/qemu-ifup,vlan=0,name=hostnet0 \ +-net tap,fd=3,vlan=0,name=hostnet0 \ -device e1000,vlan=1,id=net1,mac=00:11:22:33:44:56,bus=pci.0,addr=0x4 \ --net tap,script=/etc/qemu-ifup,vlan=1,name=hostnet1 \ +-net tap,fd=3,vlan=1,name=hostnet1 \ -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5 diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-eth.args b/tests/qemuxml2argvdata/qemuxml2argv-net-eth.args index b69cf52a3f..b96c933ff1 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-net-eth.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-net-eth.args @@ -20,4 +20,4 @@ QEMU_AUDIO_DRV=none \ -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \ -device rtl8139,vlan=0,id=net0,mac=00:11:22:33:44:55,bus=pci.0,addr=0x3 \ --net tap,script=/etc/qemu-ifup,vlan=0,name=hostnet0 +-net tap,fd=3,vlan=0,name=hostnet0 diff --git a/tests/qemuxml2argvmock.c b/tests/qemuxml2argvmock.c index b7dfebba29..e2c19a6470 100644 --- a/tests/qemuxml2argvmock.c +++ b/tests/qemuxml2argvmock.c @@ -21,12 +21,15 @@ #include #include "internal.h" -#include "virnuma.h" +#include "vircommand.h" #include "virmock.h" -#include "virutil.h" +#include "virnetdev.h" +#include "virnetdevtap.h" +#include "virnuma.h" +#include "virscsi.h" #include "virstring.h" #include "virtpm.h" -#include "virscsi.h" +#include "virutil.h" #include #include @@ -98,3 +101,43 @@ virSCSIDeviceGetSgName(const char *sysfs_prefix ATTRIBUTE_UNUSED, ignore_value(VIR_STRDUP(ret, "sg0")); return ret; } + +int +virNetDevTapCreate(char **ifname, + const char *tunpath ATTRIBUTE_UNUSED, + int *tapfd, + size_t tapfdSize, + unsigned int flags ATTRIBUTE_UNUSED) +{ + size_t i; + + for (i = 0; i < tapfdSize; i++) + tapfd[i] = STDERR_FILENO + 1 + i; + + return VIR_STRDUP(*ifname, "vnet0"); +} + +int +virNetDevSetMAC(const char *ifname ATTRIBUTE_UNUSED, + const virMacAddr *macaddr ATTRIBUTE_UNUSED) +{ + return 0; +} + +int +virCommandRun(virCommandPtr cmd ATTRIBUTE_UNUSED, + int *exitstatus) +{ + if (exitstatus) + *exitstatus = 0; + + return 0; +} + +void +virCommandPassFD(virCommandPtr cmd ATTRIBUTE_UNUSED, + int fd ATTRIBUTE_UNUSED, + unsigned int flags ATTRIBUTE_UNUSED) +{ + /* nada */ +} diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c index 1f854f50b5..eb4c6c8677 100644 --- a/tests/testutilsqemu.c +++ b/tests/testutilsqemu.c @@ -555,6 +555,8 @@ int qemuTestCapsCacheInsert(virQEMUCapsCachePtr cache, const char *binary, int qemuTestDriverInit(virQEMUDriver *driver) { + virSecurityManagerPtr mgr = NULL; + memset(driver, 0, sizeof(*driver)); if (virMutexInit(&driver->lock) < 0) @@ -588,9 +590,16 @@ int qemuTestDriverInit(virQEMUDriver *driver) 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; }