1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267
|
=head1 名前
virt-v2v-test-harness - Used to test virt-v2v against real test cases
=head1 書式
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 ()
=head1 説明
L<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: C<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.
=head2 GETTING THE TEST CASES
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:
L<http://git.annexia.org/?p=virt-v2v-test-cases-free.git> I<B<not available
yet>>
The proprietary test cases are available at
L<http://git.annexia.org/?p=virt-v2v-test-cases-nonfree.git> This I<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 I<each>. This means that distributing test
cases can be very time-consuming and expensive. We use L<git-annex(1)> to
distribute the test images.
=head2 REQUIREMENTS
It’s recommended to use an idle machine for testing. You will need B<a lot
of disk space> to run the tests, in excess of S<100 GB>. You should also
ensure the test machine has plenty of RAM, at least S<16 GB>.
=head2 GETTING THE TEST HARNESS
To run the test cases you must have the virt-v2v test harness.
The OCaml module is C<V2v_test_harness>.
The easiest way is to compile libguestfs from source (I<note> do not install
it). The test harness will be in C<libguestfs/v2v/test-harness>
It is also possible to install test harness as an OCaml module.
=head2 RUNNING THE TEST CASES
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 I<-k> option is recommended so the test doesn't stop at the first
failure.
=head2 PARALLEL TESTS
You can run test cases in parallel by doing:
make check -k -j<N>
(eg. I<-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.
=head2 RUNNING TEST CASES AGAINST UPSTREAM VIRT-V2V
Using C<make check> picks up whatever C<virt-v2v> binary is on your
C<$PATH>.
If you have compiled libguestfs from source and want to test that version of
virt-v2v, use the libguestfs C<run> script (in the top-level build directory
of the libguestfs sources). eg:
../libguestfs/run make check -k
=head1 WRITING NEW TEST CASES
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 L</GETTING THE TEST
HARNESS> above.
=head2 FILES IN EACH TEST CASE
Each test case consists of:
=over 4
=item I<test>.img.xz
The disk image of the virtual machine before conversion. Usually this
should be converted to raw format and xz-compressed.
=item I<test>.ova
Alternatively, an OVA, exported from VMware, may be used.
=item I<test>.xml
The libvirt XML used as input to virt-v2v. See the discussion of I<-i
libvirtxml> in L<virt-v2v(1)>.
=item I<test>.ppm
An optional screenshot or screenshots.
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 L<virsh(1)>. Comparison of screenshots
against the test images is done using the ImageMagick L<compare(1)> program.
=item I<test>.ml
The test itself - see below.
=back
=head2 WRITING THE TEST
The test file (F<*.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:
=over 4
=item *
Uncompress F<I<short_name>.img.xz>
=item *
Run C<virt-v2v -i libvirtxml I<short_name>.xml [...]>
=item *
Boot the resulting guest and check that it writes to its disk and then the
disk becomes idle.
=back
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 C<~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 F<V2v_test_harness.mli> for more information on how to do that.
=head2 FILES GENERATED BY RUNNING THE TEST
When you run each test, the following files can be created:
=over 4
=item I<test>-I<yyyymmdd-hhmmss>.scrn
Screenshot(s) of the guest’s graphical console. These are helpful when
writing tests or debugging test failures.
The screenshot format is Portable Pixmap (PPM).
=item I<test>.img
The uncompressed original disk image (before conversion).
=item I<test>-converted-sda
=item I<test>-converted.xml
The result of conversion, ie. after running virt-v2v but before test-booting
the guest. See the L<virt-v2v(1)> manual page description of I<-o local>.
The disk image format is qcow2.
=item I<test>-booted-sda
The disk image after test-booting. This is a qcow2 file which uses the
I<test>-converted-sda file as a backing disk, in order to save disk space.
=back
=head1 ファイル
=over 4
=item F<$ocamllibdir/v2v_test_harness/v2v_test_harness.mli>
The test library interface. Read this for detailed programming
documentation.
=item C<$ocamllibdir/v2v_test_harness/META>
The findlib META file allowing you to use the library from L<ocamlfind(1)>.
=back
NB: To find the value of C<$ocamllibdir>, run C<ocamlc -where>
=head1 関連項目
L<virt-v2v(1)>, L<virt-p2v(1)>, L<guestfs(3)>, L<virsh(1)>, L<compare(1)>,
L<git-annex(1)>, L<http://libguestfs.org/>.
=head1 著者
Richard W.M. Jones L<http://people.redhat.com/~rjones/>
=head1 COPYRIGHT
Copyright (C) 2014-2019 Red Hat Inc.
|