-
Notifications
You must be signed in to change notification settings - Fork 3
Automated VM Creation and Testing
We now have the ability to automatically build and test Mininet VM images.
The mininet/util/vm/build.py script can automate creation of .ovf VM images as follows:
build.py raring32server
build.py takes a list of build flavors, which may be listed using
build.py --list
Important notes:
-
By default,
build.pywill create avmtestdirectory in your home directory and store cached ISOs and base VM images there. This feature is not configurable at this time. -
The first time a new flavor is used, its ISO installer image will be downloaded and a base image will be created (i.e. a basic Ubuntu installation including the
mininetuser.) -
If the base image is already there, it will be reused as the base image for the copy-on-write
.qcow2image created during the build process. -
VM images and ISOs are large and can fill up your storage very quickly.
-
By default,
build.pycreates a.qcow2disk image and converts it into a.vmdkimage, which can be used by (kvm, VirtualBox, VMware, etc.) -
By default, the
.qcow2image is deleted after it is converted into a.vmdk; if you specify the--qcow2option, then that image will not be deleted (but the.vmdkwill still be created.) -
By default, VM output (from base image creation as well as Mininet VM installation) is logged to log files; specifying the
-v(--verbose) option overrides this behavior and logs VM output to the console; this can make it easier to monitor the progress of the script if it is being run interactively. -
By default, the script uses
kvmwith hardware acceleration; I routinely use this within a VMware VM using the nested virtualization feature of VMware Fusion (which you need to enable in the VM's processor settings.) You can test whetherkvmcan be used by using the commandkvm-ok. Ifkvmcannot be used, you can revert toqemu's TCG emulation by specifying the-n(--nokvm) option tobuild.py. Note that software emulation may be much slower than hardware virtualization, but it should still work (although performance-sensitive tests such astest_hifimay fail.)
Once a VM image has been created, it can also be booted automatically for additional testing.
The build.py script also has the ability to test existing VM images. For example:
build.py --image mininet-raring32server.vmdk --test core
will boot a VM from disk image mininet-raring32server.vmdk and run the core test. (build.py -h will list available tests.)
Additionally, you can specify a branch to check out and test in the VM, for example
build.py --image mininet-vm.vmdk --branch devel/myfeature --test sanity
would boot from the specified image, check out the devel/myfeature branch from the Mininet github repository, and run the sanity test.
Notes:
-
Currently the script runs a simple sanity test (
--test pingall) as well as the Mininet core tests (make test); the entire boot and test completes in less than 90 seconds on my laptop. -
In the future, we will add the option to specify additional (and lengthier) tests.
-
As part of the boot, the kernel and initial RAM disk (initrd) are extracted from the image; this is necessary so that we can boot the VM with a serial console for
pexpect -
The base disk image should be unaffected by the test process, since it is only used as backing store for a COW (copy-on-write) image, which is used for all changes to the file system and is deleted after VM shutdown.
-
The boot and test procedure creates a temporary directory for temporary files (kernel, initrd, COW image) and deletes if upon completion.