virt-v2v-test-harness(1) | Virtualization Support | virt-v2v-test-harness(1) |
virt-v2v-test-harness - Used to test virt-v2v against real test cases
open V2v_test_harness let test = "rhel_45_i386_fv" let test_plan = { default_plan with boot_plan = Boot_to_screenshot (test ^ "-login.ppm") } let () = run ~test ~test_plan ()
virt-v2v(1) converts guests from a foreign hypervisor to run on KVM, managed by libvirt, OpenStack, oVirt, Red Hat Virtualisation (RHV) or several other targets.
Virt-v2v-test-harness is a small library (module name: "V2v_test_harness") used to run virt-v2v against a set of test cases consisting of real virtual machines.
It acts as a test harness, taking a test case, running virt-v2v on it (non-destructively), then test-booting the result. It can ensure that the test case converts successfully, boots successfully, and reaches a milestone (such as a particular screenshot). It can also test that the conversion created, modified or deleted the expected files from within the guest.
Because the test cases are actual virtual machines, we split them into two groups: test cases which are freely redistributable and those which are proprietary. The former are things like Fedora or CentOS images, which are free software. The latter are things like Windows or Red Hat Enterprise Linux.
The freely redistributable test cases can be downloaded from: http://git.annexia.org/?p=virt-v2v-test-cases-free.git not available yet
The proprietary test cases are available at http://git.annexia.org/?p=virt-v2v-test-cases-nonfree.git This does not contain the proprietary images themselves, which are not made available to the public for licensing reasons.
The test cases consist of disk images which are very large, from 250 MB through to tens of gigabytes each. This means that distributing test cases can be very time-consuming and expensive. We use git-annex(1) to distribute the test images.
It’s recommended to use an idle machine for testing. You will need a lot of disk space to run the tests, in excess of 100 GB. You should also ensure the test machine has plenty of RAM, at least 16 GB.
To run the test cases you must have the virt-v2v test harness.
The OCaml module is "V2v_test_harness".
The easiest way is to compile libguestfs from source (note do not install it). The test harness will be in "libguestfs/v2v/test-harness"
It is also possible to install test harness as an OCaml module.
Once you have checked out the freely redistributed test cases from the repository, do:
./configure [--with-test-harness=/path/to/libguestfs/v2v/test-harness] make make check -k
Using the -k option is recommended so the test doesn't stop at the first failure.
You can run test cases in parallel by doing:
make check -k -j<N>
(eg. -j2 for running up to 2 tests in parallel). Be careful about running too many parallel tests, as it can slow down each test enough to cause false failures.
Using "make check" picks up whatever "virt-v2v" binary is on your $PATH.
If you have compiled libguestfs from source and want to test that version of virt-v2v, use the libguestfs "run" script (in the top-level build directory of the libguestfs sources). eg:
../libguestfs/run make check -k
If you are interested in writing test cases, it is suggested that you start by downloading the freely redistributable test cases, or at least look at them online.
Also you must have the virt-v2v test harness - see "GETTING THE TEST HARNESS" above.
Each test case consists of:
You can supply zero or more "known good" screenshots which represent intermediate steps where the guest is booting. This is useful where a guest sits for some time doing something, and lets the test harness know that it should allow the guest to continue to boot.
You can supply zero or one "final" screenshot. This is often a screenshot of the login page which indicates that the guest booted successfully.
The screenshots are captured using virsh(1). Comparison of screenshots against the test images is done using the ImageMagick compare(1) program.
The test file (*.ml) is used to control the test harness, and minimally it would look something like this:
open V2v_test_harness let test = "short_name" let () = run ~test ()
That would instruct the test harness to:
The above is a rather simplistic test. A more realistic test is to ensure the guest reaches a final milestone (screenshot), eg. a login page. To do that you have to supply a "~test_plan" parameter:
open V2v_test_harness let test = "short_name" let test_plan = { default_plan with boot_plan = Boot_to_screenshot (test ^ ".ppm") } let () = run ~test ~test_plan ()
For an even better test, you can supply post-conversion and post-boot test cases which examine the disk image (using libguestfs) to verify that files have been created, modified or deleted as expected within the disk image. See V2v_test_harness.mli for more information on how to do that.
When you run each test, the following files can be created:
The screenshot format is Portable Pixmap (PPM).
The disk image format is qcow2.
NB: To find the value of $ocamllibdir, run "ocamlc -where"
virt-v2v(1), virt-p2v(1), guestfs(3), virsh(1), compare(1), git-annex(1), http://libguestfs.org/.
Richard W.M. Jones http://people.redhat.com/~rjones/
Copyright (C) 2014-2019 Red Hat Inc.
To get a list of bugs against libguestfs, use this link: https://bugzilla.redhat.com/buglist.cgi?component=libguestfs&product=Virtualization+Tools
To report a new bug against libguestfs, use this link: https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools
When reporting a bug, please supply:
2019-02-07 | libguestfs-1.40.2 |