Differential Revision: https://phab.qadevel.cloud.fedoraproject.org/D495
6.4 KiB
OpenQA tests for the Fedora distribution
This repository contains tests and images for testing Fedora with OpenQA. For additional tools, Installation Guide and Docker images, see this repository.
Test development
See official documentation on basic concept, test development (including API specification), needles specification and supported variables for backend. See this example repo on how tests should be structured.
main.pm modular architecture
Since OpenQA uses only one entrypoint for all tests (main.pm), we have decided to utilize
this feature and make tests modular. It means that basic passing through main.pm (without any variables set)
results in most basic installation test executed. Developer can customize it with additional variables
(for example by setting PACKAGE_SET=minimal
to do installation only with minimal package set).
Fedora installation (and consequently main.pm) consists of several parts:
-
booting into Anaconda or booting live image and starting Anaconda
Since there isn't much variation between tests in this step, we have developed universal
_boot_to_anaconda.pm
test that is loaded automatically each time except whenENTRYPOINT
orUPGRADE
is set (see VARIABLES.md).To customize this step, you can set following variables:
GRUB
is appended to kernel line before boot. You can set for exampleinst.updates
here.- If
KICKSTART
is set, this part of installation ends here (program doesn't wait for Anaconda to appear). Note that you should setinst.ks
yourself by settingGRUB
variable. - If
LIVE
is set, program waits for desktop to appear and then clicks on "Install to Hard Drive" button.
-
customizing installation by interacting with Anaconda spokes
Most of the differences between tests take place in this part. If you want to add another installation test, you will probably put your variable checking and test loading here. All tests in this part should start on Anaconda's main hub and after they done its part, they should go back to Anaconda's main hub so that next test could be executed. In this phase, universal
_software_selection.pm
test is loaded that handles selecting what software to install.To customize this step, you can set following variables:
- Set
PACKAGE_SET
to install required package set on "Software selection spoke" - you have to provide correct needles with the name ofanaconda_${PACKAGE_SET}_highlighted
andanaconda_${PACKAGE_SET}_selected
. - Set
ENCRYPT_PASSWORD
to encrypt disk, value of this variable is used as an actual password.
- Set
-
installing Fedora and waiting for Fedora to reboot
After all customizations are finished,
_do_install_and_reboot.pm
test is automatically loaded. It starts installation, creates user and sets root password when required, waits for installation to finish and reboots into installed system. Only variables that control flow in this part are these:ROOT_PASSWORD
to set root password to this value.- When set,
USER_LOGIN
andUSER_PASSWORD
are used to create user in Anaconda.
-
post-install phase
After installation is finished and installed system is fully booted, you can run additional tests as checks that installed system has correct attributes - that correct file system is used, that RAID is used etc.
Make your test modular, so that it utilizes _boot_to_anaconda.pm
, _software_selection.pm
and
_do_install_and_reboot.pm
tests (that are loaded automatically). Break your test into smaller parts,
each dealing with one specific feature (e. g. partitioning, user creation...) and add their loading
into main.pm based on reasonable variable setting (so they can be used in other tests also).
Test inheritance
Your test can inherit from basetest
, fedorabase
, installedtest
or anacondatest
.
basetest
is basic class provided by os-autoinst - it has emptypost_fail_hook()
and doesn't set any flags.fedorabase
doesn't neither set flags nor does anything inpost_fail_hook()
, but it provides basic functions that will be useful during testing Fedora, likeconsole_login()
orboot_to_login_screen()
. It should be used when no other, more specific class can be used.anacondatest
should be used in tests where Anaconda is running. It uploads Anaconda logs (for exampleanaconda.log
orpackaging.log
) inpost_fail_hook()
. It also provides convenient methods for Anaconda likeselect_disks()
.installedtest
should be used in tests that are running on installed system (either in postinstall phase or in upgrade tests). It uploads/var/log
inpost_fail_hook()
.
New test development workflow
- Select test from this document or from phabricator page
- Put each part of your test as a separate file into
tests/
directory, reimplementingrun()
method andtest_flags()
method, inheriting from one of the classes mentioned above. - Set correct variables (so that all test parts you have made are executed) in WebUI -> Test suites.
- Link your newly created Test suite to medium type in WebUI -> Job groups.
- Run test (see openqa_fedora_tools repository).
- Create needles (images) by using interactive mode and needles editor in WebUI.
- Add new Job template and Test suite into
templates
file. - Add new Test suite and Test case into
conf_test_suites.py
file in openqa_fedora_tools repository. - Mark your test in PhaseSeparation.md as done.
- Open differential request via phabricator, set openqa_fedora as a project and repository.