Running make test
runs most of the integrated tests. You should have valgrind
installed.
Running make pre-push
runs the above builds and tests in different configurations: GCC, clang, and with ASAN enabled.
There are some older unit tests written in C, but most tests are now done via Python, in the test/py sub-directory. You can run just the Python tests via make pytest
or make pytest-valgrind
.
The master branch is run through Coverity when a new PR lands.
You can also run make gcov
to get code coverage reports.
Sometimes debugging Valgrind errors on Python unit tests can be tricky. To run specific tests use the pytest -k
option in PYTESTCMD
in the Makefile.
You can run American Fuzzy Lop against libvfio-user
. It's easiest to use the Docker container:
cd /path/to/libvfio-user/src docker pull aflplusplus/aflplusplus docker run -ti -v $(pwd):/src aflplusplus/aflplusplus
Set up and build:
apt update apt-get -y install libjson-c-dev libcmocka-dev clang valgrind \ python3-pytest debianutils flake8 cmake cd /src export AFL_LLVM_LAF_ALL=1 make CC=afl-clang-fast WITH_TRAN_PIPE=1 mkdir inputs # don't yet have a better starting point echo "1" >inputs/start mkdir outputs
The VFU_TRAN_PIPE
is a special libvfio-user
transport that reads from stdin
instead of a socket, we'll use this with the sample server to do our fuzzing:
afl-fuzz -i inputs/ -o outputs/ -- ./build/dbg/samples/server pipe