
On Wed, 2020-06-10 at 20:01 +0200, Michal Privoznik wrote:
new file mode 100644 index 0000000000..dae6dedf7f --- /dev/null +++ b/tests/nodedevmdevctldata/mdev_d069d019_36ea_4111_8f0a_8c9a70e2136 6-start.argv @@ -0,0 +1 @@ +/usr/sbin/mdevctl start -p 0000:00:02.0 --jsonfile /dev/stdin
This is a problem. If there is no mdevctl found during configure (my case), then MDEVCTL is going to be plain "mdevctl". Which is okay for the nodedev driver, because it uses virCommandRun() which uses virFindFileInPath() to get the real path at runtime. But for tests it won't fly. Alternativelly, if the mdevctl lived under say /bin or any other location than /usr/sbin the expected output would be different.
In virnetdevbandwidthtest.c (which uses TC) I've worked around this by using TC directly to construct expected output. However, I guess we can safely assume that either mdevctl is present at build time so that its location is detected properly, or we hardcode its path. IOW, this needs to be squashed into 05/10:
diff --git i/m4/virt-external-programs.m4 w/m4/virt-external- programs.m4 index bd3cb1f757..f642dcbf0e 100644 --- i/m4/virt-external-programs.m4 +++ w/m4/virt-external-programs.m4 @@ -65,7 +65,7 @@ AC_DEFUN([LIBVIRT_CHECK_EXTERNAL_PROGRAMS], [ AC_PATH_PROG([OVSVSCTL], [ovs-vsctl], [ovs-vsctl], [$LIBVIRT_SBIN_PATH]) AC_PATH_PROG([SCRUB], [scrub], [scrub], [$LIBVIRT_SBIN_PATH]) AC_PATH_PROG([ADDR2LINE], [addr2line], [addr2line], [$LIBVIRT_SBIN_PATH]) - AC_PATH_PROG([MDEVCTL], [mdevctl], [mdevctl], [$LIBVIRT_SBIN_PATH]) + AC_PATH_PROG([MDEVCTL], [mdevctl], [/usr/sbin/mdevctl], [$LIBVIRT_SBIN_PATH])
AC_DEFINE_UNQUOTED([DMIDECODE], ["$DMIDECODE"], [Location or name of the dmidecode program])
That's a good point. But is this adequate? What if there's a distro that installs mdevctl into /usr/bin instead of /usr/sbin. Configure will find the /usr/bin/mdevctl binary and the test output will not match... How do we get around that issue for other argv tests? (e.g. qemu?) Or do we just assume that tests will fail on machines that install things in non-standard locations?
+/* Bare minimum driver init to be able to test nodedev functionality */ +static int +nodedevTestDriverInit(void) +{ + int ret = -1; + char statedir[] = abs_builddir "/nodedevstatedir-XXXXXX"; + if (VIR_ALLOC(driver) < 0) + return -1; + + if (!g_mkdtemp(statedir)) { + fprintf(stderr, "Cannot create fake stateDir"); + goto error; + }
This creates a temporary dir which is never removed. But it doesn't look like the directory is needed at all, is it?
Oh yes, this was leftover from the previous version of the patch where I created a temp file for the json config in the state dir. It can be dropped. Jonathon