On Mon, Apr 30, 2018 at 11:47:33AM +0200, Andrea Bolognani wrote:
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.
AFAIK, the only way is to not link virpcimock.la to gnulib.
If we're lucky all the functions it needs would be present in the libvirt.so
already, so might just need a few things added to the export list ?
Regards,
Daniel
--
|:
https://berrange.com -o-
https://www.flickr.com/photos/dberrange :|
|:
https://libvirt.org -o-
https://fstop138.berrange.com :|
|:
https://entangle-photo.org -o-
https://www.instagram.com/dberrange :|