On Fri, 2018-04-27 at 16:35 +0100, Daniel P. Berrangé wrote:
On Fri, Apr 27, 2018 at 05:21:21PM +0200, Andrea Bolognani wrote:
> When hostdevs are involved, libvirt needs to poke into sysfs to
> collect some information about them; since that pseudo-filesystem
> doesn't exist on platforms other than Linux, the corresponding
> tests would fail and need to be compiled out.
Our test suite isn't supposed to touch /sysfs from the real
host at all. Sounds like we either need to mock out the
function that's doing that, or provide some fake sysfs data
in a tests/ subdirectory to run against with a mock'd open()
call. That would make it work even on non-Linux I hope.
Sorry, I should have provided some more context, but I was in a
bit of a hurry on Friday when I sent this.
We are already mocking (parts of) sysfs through virpcimock, but
the contents of that file are compiled out on non-Linux; after
removing the #ifdefs, it's fairly easy to solve most of the build
issues on FreeBSD (draft patch attached), but there's one I
couldn't quite get rid of.
Mocking canonicalize_file_name() causes a linking error:
../gnulib/lib/.libs/libgnu.a(canonicalize-lgpl.o): In function
`canonicalize_file_name':
.../libvirt/gnulib/lib/canonicalize-lgpl.c:417: multiple definition of
`canonicalize_file_name'
.libs/virpcimock.o:.../libvirt/tests/virpcimock.c:983: first defined here
This is not a problem on Linux, where canonicalize_file_name() is
provided by libc, but FreeBSD is using the gnulib implementation
instead, leading to the issue above.
Can you think of a way to make linking of virpcimock work despite
the above? That should get us to the point where at least
qemumemlocktest and qemuxml2xmltest are working; qemuxml2argvtest
will probably need more mocking because of NUMA information.
--
Andrea Bolognani / Red Hat / Virtualization