Step-by-step guide for setting up hostapd/wpa_supplicant test framework (VM)
----------------------------------------------------------------------------

This document can be used as a quick guide for getting started with
hostapd/wpa_supplicant test framework with mac80211_hwsim. While the
example here uses Ubuntu 16.04.1 server to have a list of exact steps,
there are no requirements for using that specific distribution in the
testing setup.

The steps here describe how to run a guest VM for testing on a Linux
host system.


Install Ubuntu Server 16.04.1 as the host system for VMs

- download installation image, e.g.,
  http://releases.ubuntu.com/16.04.1/ubuntu-16.04.1-server-amd64.iso
- install the host system with default settings
- boot to the installed system
- update the installed packages:
  sudo apt update
  sudo apt upgrade


Install the prerequisite packages that may not have been installed by default

# kvm for running the VM guests
sudo apt install qemu-kvm

# build tools
sudo apt install build-essential git libpcap-dev libsqlite3-dev binutils-dev \
	bc pkg-config libssl-dev libiberty-dev libdbus-1-dev \
	libnl-3-dev libnl-genl-3-dev libnl-route-3-dev

# tools used be the test scripts
sudo apt install python-minimal python-crypto python-pyrad python-netifaces \
	python-dbus python-gobject python-openssl bridge-utils ebtables tshark


Enable kvm use for the user

sudo adduser $USER kvm


Download a snapshot of the hostap.git repository and build the programs

cd
git clone git://w1.fi/hostap.git
cd hostap/tests/hwsim
./build.sh
cd vm
cat > vm-config <<EOF
KERNELDIR=~/wireless-testing
MEMORY=512
KVMARGS="-cpu host"
EOF


Build a Linux kernel for testing

cd
git clone git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-testing.git
cd wireless-testing
cp ~/hostap/tests/hwsim/vm/kernel-config .config
make oldconfig
make -j8


Setup is now ready for testing. You can run a quick test to confirm that
things work as expected:

cd ~/hostap/tests/hwsim/vm
./vm-run ap_open

This should print out following style results:

Starting test run in a virtual machine
./run-all.sh: passing the following args to run-tests.py: ap_open
START ap_open 1/1
PASS ap_open 0.924019 2017-01-28 20:20:12.137717
passed all 1 test case(s)
ALL-PASSED

Test run completed
Logfiles are at /tmp/hwsim-test-logs/1485634801

(If that "PASS ap_open" line does not show up, something unexpected has
happened and the setup is not in working condition.)


To run all available test cases in 7 parallel VMs, you can run
following:

cd ~/hostap/tests/hwsim/vm
./parallel-vm.py 7