vimto
is a virtual machine testing orchestrator for the Go toolchain. It allows you to easily run Go unit tests using a specific Linux kernel.
# With .vimto.toml in place:
vimto -- go test .
# Otherwise:
vimto -kernel /path/to/vmlinuz -- go test .
The tests are executed inside an ephemeral VM, with an execution environment which mimics the host.
It's possible to obtain the kernel from a container image (requires Docker).
vimto -kernel example.org/reg/image:tag -- go test .
Finally, you can also use a path to a directory:
vimto -kernel /path/to/dir -- go test .
vimto
expects the kernel to be at /boot/vmlinuz
for containers and directories.
See also Container format.
Install using the Go toolchain:
CGO_ENABLED=0 go install lmb.io/vimto@latest
vimto
reads a configuration file .vimto.toml
in TOML format, either from the current directory or from the root of the git repository enclosing the current directory.
All available options and their values are in testdata/default.toml.
amd64
or arm64
hostqemu
(8.1.3 is known to work)Here is a non-exhaustive list of required Linux options:
CONFIG_9P_FS=y
CONFIG_DEVTMPFS=y
CONFIG_NET_9P_VIRTIO=y
CONFIG_NET_9P=y
CONFIG_NET_CORE=y
CONFIG_OVERLAY_FS=y
CONFIG_PCI=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
CONFIG_TTY=y
CONFIG_UNIX=y
CONFIG_UNIX98_PTYS=y
CONFIG_VIRTIO_CONSOLE=y
CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_NET=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO=y
CONFIG_VT=y