
=head1 НАЗВА

virt-v2v-test-harness — використовується для тестування virt-v2v на
прикладах з реального життя

=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)> перетворює фізичні машини зі сторонніх гіпервізорів для
запуску під керуванням libvirt, OpenStack, oVirt, Red Hat Virtualisation
(RHV) або одним із інших призначень.

Virt-v2v-test-harness — невеличка бібліотека (назва модуля:
C<V2v_test_harness>), яка використовується virt-v2v для обробки набору
тестів, які містять справжні віртуальні машини.

Це працює як комплекс тестування: вибирається тест, запускається virt-v2v
для нього (у недеструктивний спосіб), потім виконується тестове завантаження
результату. Програма переконується, що тест було успішно перетворено, він
успішно завантажується і досягає у роботі певного етапу (такого як на
еталонному знімку). Програма також може перевірити, чи було під час
перетворення створено, змінено або вилучено очікувані файли у гостьовій
системі.

=head2 ОТРИМАННЯ ПРИКЛАДІВ ДЛЯ ТЕСТУВАННЯ

Оскільки тести є насправді віртуальними машинами, ми поділили їх на дві
групи: тести, які поширюються вільно, і тести, які є пропрієтарними. Перші є
образами, подібними до образів Fedora або CentOS, які є вільним програмним
забезпеченням. Другі — образи, які подібні до образів Windows або Red Hat
Enterprise Linux.

Вільно доступні і поширювати тести можна отримати тут:
L<http://git.annexia.org/?p=virt-v2v-test-cases-free.git> I<B<ще не є
доступними>>

Пропрієтарні тести можна отримати зі сторінки
L<http://git.annexia.org/?p=virt-v2v-test-cases-nonfree.git> У тестах I<не>
міститься самих образів пропрієтарних систем, які з причин ліцензування не є
загальнодоступними.

Тести є образами дисків із дуже великими розмірами — від  250 МБ до десятків
гігабайт I<кожен>. Це означає, що поширення тестів може бути дуже тривалим і
вимогливим до ресурсів завданням. Ми використовуємо для поширення образів
тестів  L<git-annex(1)>.

=head2 ВИМОГИ

Для тестування рекомендуємо використовувати бездіяльну машину. Для виконання
тестів вам знадобиться доволі B<багато вільного місця на диску>, більше
S<100 ГБ>. Крім того, на тестовій машині має бути багато оперативної
пам'яті, принаймні S<16 ГБ>.

=head2 ОТРИМАННЯ КОМПЛЕКСУ ДЛЯ ТЕСТУВАННЯ

Для запуску тестів вам знадобиться комплекс тестів virt-v2v.

Модуль OCaml називається C<V2v_test_harness>.

Найпростішим способом є зібрати libguestfs з початкових кодів
(I<Зауваження>: не встановлювати її). Тестовий комплекс зберігатиметься у
C<libguestfs/v2v/test-harness>

Крім того, комплекс тестів можна встановити як модуль OCaml.

=head2 ВИКОНАННЯ ТЕСТУВАННЯ

Щойно ви отримаєте вільно розповсюджувані тести зі сховища, віддайте такі
команди:

 ./configure [--with-test-harness=/шлях/до/libguestfs/v2v/test-harness]
 make
 make check -k

Рекомендуємо скористатися параметром I<-k>, щоб тестування не зупинялося
після першої ж помилки.

=head2 ПАРАЛЕЛЬНЕ ТЕСТУВАННЯ

Запустити тести паралельно можна за допомогою такої команди:

 make check -k -j<N>

(наприклад I<-j2>, щоб запустити 2 тести паралельно). Будьте обережні із
паралельним запуском надто великої кількості тестів — це може спричинити
помилки, які не пов'язано із помилковою роботою бібліотеки.

=head2 ТЕСТУВАННЯ ОСНОВНОЇ ГІЛКИ РОЗРОБКИ VIRT-V2V

Використання C<make check> призведе до використання виконуваного файла
C<virt-v2v>, який зберігається у одному з каталогів зі змінної середовища
C<$PATH>.

Якщо вами було зібрано libguestfs з початкових кодів і ви хочете перевірити
зібрану версію virt-v2v, скористайтеся скриптом libguestfs C<run>
(зберігається у каталозі збирання верхнього рівня у каталозі із початковими
кодами libguestfs). Приклад:

 ../libguestfs/run make check -k

=head1 НАПИСАННЯ НОВИХ ПРИКЛАДІВ ДЛЯ ТЕСТУВАННЯ

Якщо ви цікавитеся написанням тестів, пропонуємо вам розпочати із отримання
вільно розповсюджуваних тестів або, принаймні, ознайомлення з ними у мережі.

Крім того, у вас має бути комплекс для тестування virt-v2v —
див. L</ОТРИМАННЯ КОМПЛЕКСУ ДЛЯ ТЕСТУВАННЯ> вище.

=head2 ФАЙЛИ КОЖНОГО З ПРИКЛАДІВ ДЛЯ ТЕСТУВАННЯ

Кожен із прикладів для тестування складається з таких компонентів:

=over 4

=item I<тест>.img.xz

Образ диска віртуальної машини до перетворення. Зазвичай, його має бути
перетворено у простий формат (raw) і стиснуто за допомогою xz.

=item I<тест>.ova

Крім того, можна скористатися OVA, експортованим з VMware.

=item I<test>.xml

XML libvirt, який використовується як вхідні дані virt-v2v. Див. обговорення
щодо I<-i libvirtxml> на сторінці підручника щодо L<virt-v2v(1)>.

=item I<test>.ppm

Необов'язковий знімок екрана або знімки екрана.

Ви можете не надавати «відомі правильні» знімки екрана, надати один або
декілька таких знімків, які відповідають проміжним крокам завантаження
гостьової системи. Корисно робити такі знімки на етапах, коли гостьова
система виконує якісь тривалі дії. Це надасть комплексу тестування дані, за
допомогою яких він зможе визначити, чи слід дозволяти гостьовій системі
продовжувати завантаження.

Ви можете не вказувати «остаточний» знімок екрана або вказати один такий
знімок. Це часто знімок вікна входу до системи, який вказує на те, що
гостьову систему було успішно завантажено.

Знімки вікон створюються за допомогою L<virsh(1)>. Порівняння знімків вікон
із еталонними знімками виконується за допомогою програми L<compare(1)> з
комплекту ImageMagick.

=item I<test>.ml

Сам приклад для тестування — див. нижче.

=back

=head2 НАПИСАННЯ ТЕСТУ

Файл тестування (F<*.ml>) використовується для керування комплексом
тестування. Його мінімальна версія виглядає десь так:

 open V2v_test_harness
 
 let test = "short_name"
 
 let () = run ~test ()

Це має проінструктувати комплекс тестування про те, що слід:

=over 4

=item *

Розпакувати F<I<short_name>.img.xz>

=item *

Запустити C<virt-v2v -i libvirtxml I<short_name>.xml [...]>

=item *

Завантажити отриману гостьову систему і перевірити, чи виконує вона запис на
свій диск і чи стає після цього диск бездіяльним.

=back

Вище наведено надто спрощене тестування. Реалістичнішим варіантом був ви
варіант із перевіркою того, чи гостьова система досягла остаточного етапу
завантаження (за знімком), наприклад сторінки входу до системи. Для
реалізації такої перевірки вам слід вказати параметр C<~test_plan>:

 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 ()

Ще надійніший варіант тестування можна створити, якщо виконуватиметься
тестування після перетворення і після завантаження із перевіркою образу
диска (за допомогою libguestfs) з метою переконатися, що у образі диска у
очікуваний спосіб створюються, змінюються та вилучаються файли. Щоб
дізнатися більше про те, як цього досягти, ознайомтеся із вмістом файла
F<V2v_test_harness.mli>.

=head2 ФАЙЛИ, ЯКІ СТВОРЮЮТЬСЯ ПІД ЧАС ВИКОНАННЯ ТЕСТУВАННЯ

Під час виконання тестування може бути створено такі файли:

=over 4

=item I<test>-I<yyyymmdd-hhmmss>.scrn

Знімки графічної консолі гостьової операційної системи. Такі знімки корисні
для написання тестів або діагностики помилок під час тестування.

Форматом знімків екрана є Portable Pixmap (PPM).

=item I<test>.img

Нестиснений початковий образ диска (до перетворення).

=item I<test>-converted-sda

=item I<test>-converted.xml

Результат перетворення, тобто стан після виконання virt-v2v, але перед
тестовим завантаженням гостьової системи. Див. сторінку підручника щодо
L<virt-v2v(1)>, щоб ознайомитися із описом параметра I<-o local>.

Формат образу диска — qcow2.

=item I<test>-booted-sda

Образ диска після тестового завантаження. Це файл qcow2, у якому з метою
заощадження місця на диску використовується як диск резервної пам'яті файл
I<test>-converted-sda.

=back

=head1 ФАЙЛИ

=over 4

=item F<$ocamllibdir/v2v_test_harness/v2v_test_harness.mli>

Інтерфейс тестування бібліотеки. Ознайомтеся, що дізнатися більше про
можливості програмування.

=item C<$ocamllibdir/v2v_test_harness/META>

Файл META findlib, який надає вам змогу користуватися бібліотекою з
L<ocamlfind(1)>.

=back

Зауваження: щоб визначити поточне значення C<$ocamllibdir>, віддайте команду
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 (C) 2014-2019 Red Hat Inc.

