Lubomir Rintel c6ba02154e tests: Enable dynamic debugging for mac80211_hwsim 7 years ago
..
.gitignore 970d3b096f hwsim tests: Add scripts to run in a VM 11 years ago
README 40c57fa88f tests: Update vm README 10 years ago
bisect-run.sh 18cdbb3c80 tests: Add a script to aid bisecting Linux kernel with hwsim VM 7 years ago
build-codecov.sh 6532a84ed3 tests: Fix --codecov cases to find correct wpa_cli/hostapd_cli 10 years ago
combine-codecov.sh e4b5f889b4 tests: Remove src/common/cli.c from code coverage report 8 years ago
dbus.conf b0839232fa tests: Enable wpa_supplicant D-Bus support for hwsim tests 10 years ago
example-vm-setup.txt 371920b941 tests: Step-by-step guide for testing in VM 8 years ago
inside.sh 100d334f43 tests: Print higher debug level on console 7 years ago
kernel-config c6ba02154e tests: Enable dynamic debugging for mac80211_hwsim 7 years ago
parallel-vm.py 326720c1db tests: Split proxyarp test cases into IPv4 and IPv6 parts 8 years ago
parallel-vm.sh 680ce356c0 tests: Honor HWSIM_TEST_LOG_DIR variable in VM runs 9 years ago
process-codecov.sh f24489d94f tests: Use new scripts for vm-run.sh codecov 10 years ago
uevent.sh 05736da8c6 tests: vm: Honor EPATH in uevent.sh 9 years ago
vm-run.sh c6ba02154e tests: Enable dynamic debugging for mac80211_hwsim 7 years ago

README

These scripts allow you to run the hwsim tests inside a KVM virtual machine.

To set it up, first compile a kernel with the kernel-config file as the
.config. You can adjust it as needed, the configuration is for a 64-bit
x86 system and should be close to minimal. The architecture must be the
same as your host since the host's filesystem is used.

Install the required tools: at least 'kvm', if you want tracing trace-cmd,
valgrind if you want, etc.

Compile the hwsim tests as per the instructions given, you may have to
install some extra development packages (e.g. binutils-dev for libbfd).

Create a vm-config file and put the KERNELDIR option into it (see the
vm-run.sh script). If you want valgrind, also increase the memory size.

Now you can run the vm-run.sh script and it will execute the tests using
your system's root filesystem (read-only) inside the VM. The options you
give it are passed through to run-all.sh, see there.

To speed up testing, it is possible to run multiple VMs concurrently and
split the test cases between all the VMs. If the host system has enough
memory and CPU resources, this can significantly speed up the full test
cycle. For example, a 4 core system with 4 GB of RAM can easily run 8
parallel VMs (assuming valgrind is not used with its higher memory
requirements). This can be run with:

./parallel-vm.sh [arguments..]


--------------------------------------------------------------------------------

Code Coverage Analysis for user space code

Code coverage for wpa_supplicant and hostapd can be generated from the
test run with following command line:

./vm-run.sh --codecov [other arguments..]

This builds a separate copies of wpa_supplicant and hostapd into a
directory that is writable from the virtual machine to collect the gcov
data. lcov is then used to prepare the reports at the end of the test
run.


Code Coverage Analysis for kernel code

In order to do code coverage analysis, reconfigure the kernel to include

CONFIG_GCOV_KERNEL=y
CONFIG_GCOV_PROFILE_ALL=y

Note that for gcc 4.7, kernel version 3.13-rc1 or higher is required.

The scripts inside the VM will automatically copy the gcov data out of the
VM into the logs directory. To post-process this data, you'll want to use
lcov and run

cd /tmp/hwsim-test-logs/
lcov -b -c -d gcov/ > gcov/data
genhtml -o html/ gcov/data

Then open html/index.html in your browser.

Note that in this case you need to keep your build and source directories
across the test run (otherwise, it's safe to only keep the kernel image.)