Clone this repo:


  1. 68cf12d pci: Add BAR sanity checks by Alexander Gordeev · 4 weeks ago master
  2. 1b7dd7d Use /bin/env in shebang to make scripts more portable by Sergey Bronnikov · 6 weeks ago
  3. 4b6da82 lib: Add headers to generic library files by Thomas Huth · 3 weeks ago
  4. eff4e22 x86/run: use search_qemu_binary to search qemu for x86 by Balamuruhan S · 6 days ago
  5. 4b96850 arm/run: use search_qemu_binary function for arm by Balamuruhan S · 6 days ago

Welcome to kvm-unit-tests

See for a high-level description of this project, as well as running tests and adding tests HOWTOs.

Building the tests

This directory contains sources for a kvm test suite.

To create the test images do:


in this directory. Test images are created in .//*.flat

Standalone tests

The tests can be built as standalone To create and use standalone tests do:

make standalone
(send tests/some-test somewhere)
(go to somewhere)

‘make install’ will install all tests in PREFIX/share/kvm-unit-tests/tests, each as a standalone test.

Running the tests

Then use the runner script to detect the correct invocation and invoke the test:

./x86-run ./x86/msr.flat



to run them all.

To select a specific qemu binary, specify the QEMU= environment variable:

QEMU=/tmp/qemu/x86_64-softmmu/qemu-system-x86_64 ./x86-run ./x86/msr.flat

Unit test inputs

Unit tests use QEMU's ‘-append <args...>’ parameter for command line inputs, i.e. all args will be available as argv strings in main(). Additionally a file of the form


may be passed with ‘-initrd ’ to become the unit test's environ, which can then be accessed in the usual ways, e.g. VAL = getenv(“KEY”) Any key=val strings can be passed, but some have reserved meanings in the framework. The list of reserved environment variables is below

QEMU_ACCEL ... either kvm or tcg QEMU_VERSION_STRING ... string of the form qemu -h | head -1 KERNEL_VERSION_STRING ... string of the form uname -r

Additionally these self-explanatory variables are reserved



Directory structure

.:				configure script, top-level Makefile, and
./scripts:		helper scripts for building and running tests
./lib:			general architecture neutral services for the tests
./lib/<ARCH>:	architecture dependent services for the tests
./<ARCH>:		the sources of the tests and the created objects/images

See /README for architecture specific documentation.


Currently there is a mix of indentation styles so any changes to existing files should be consistent with the existing style. For new files:

  • C: please use standard linux-with-tabs
  • Shell: use TABs for indentation


Patches are welcome at the KVM mailing list

Please prefix messages with: [kvm-unit-tests PATCH]

You can add the following to .git/config to do this automatically for you:

    subjectprefix = kvm-unit-tests PATCH

Additionally it‘s helpful to have a common order of file types in patches. Our chosen order attempts to place the more declarative files before the code files. We also start with common code and finish with unit test code. git-diff’s orderFile feature allows us to specify the order in a file. The orderFile we use is scripts/git.difforder. Adding the config with git config diff.orderFile scripts/git.difforder enables it.