Task metadata¶
This section describes the metadata which must be defined in each Beaker task.
The beaker-wizard utility will help you to populate this metadata correctly
when creating a new task (see An example task). A sample
Makefile is also included in the rhts-devel
package as
/usr/share/doc/rhts-devel-*/Makefile.template
.
These details apply to tasks written using the default harness (beah
).
Programs written using an alternative harness
will likely be configured differently — consult the documentation for the
specific harness in use.
Makefile variables¶
The following environment variables must be exported in the task’s Makefile.
These variables are used by rhts-make.include
and its anxillary scripts
when building the task RPM.
TEST
The name of the task. The name is a hierarchical path beginning with a slash (
/
), similar to a filesystem path. For example,/distribution/mypackage/test-suite
. The task name is available asTEST
in the task’s environment.The task name is prefixed with
/mnt/tests
to form the directory where it will be installed on the system under test. This directory is available asTESTPATH
.The task should report results relative to its name (see rhts-report-result).
TESTVERSION
- The version of the task. This becomes the version of the task RPM when it
is built. As a consequence, it may contain only numbers, digits, and period
(
.
). FILES
- A whitespace-separated list of all the files to be included in the task
RPM. This must include at least
testinfo.desc
(typically given as$(METADATA)
),runtest.sh
, andMakefile
. If a task uses any additional scripts or data, those files must be listed here. BUILT_FILES
- Files which are generated or compiled by other rules in the Makefile should
be listed in this variable, rather than in
FILES
, so that they are built when the task RPM is built. TEST_DIR
- This can be used with the
Path
metadata field described in the next section. It is not defined by the user but defined by rhts tools to concatenate/mnt/tests
with the name of the test or$(TEST)
.
Fields in testinfo.desc
¶
The testinfo.desc
file declares metadata about the task. The metadata is
extracted by Beaker and made available in the task library. The harness also
uses this metadata, for example to determine the allowed watchdog time for the
task.
This file is typically generated by the Makefile as part of the build process, although it can also be edited and committed directly to source control.
The following fields are recognized by Beaker. They are ordered first with mandatory fields then optional.
Description¶
Description
(required) must contain exactly one string.
For example:
Description: This test tries to map five 1-gigabyte files with a single process.
Description: This test tries to exploit the recent security issue for large pix map files.
Description: This test tries to panic the kernel by creating thousands of processes.
License¶
License
(required) identifies the type of license protection this task
has. These include GPL, GPLv2, GPLv2+, GPL3, Red Hat Internal, or
Red Hat Confidential
. A sample configuration of this parameter appears
as follows:
License: GPLv2+
For further details on GNU Licensing, refer to http://www.gnu.org/licenses/. When ‘Red Hat Internal or Confidential’ is configured, this task rpm is not available for public use.
Name¶
Name
(required) It is assumed that any result-reporting framework
will organize all available tests into a hierarchical namespace, using
forward-slashes to separate components of names (analogous to a path).
This field specifies the namespace where the task results will be recorded
in Beaker, and serves as a unique ID for the task. Since task names are
used to define filesystem paths (for example, tasks will be installed
under the path /mnt/tests/<task-name>
), they are limited to
characters that are usable within a file system path.
For fast indexing purposes, task names are limited to 255 characters.
Owner¶
Owner
(required) is the person responsible for this task. Acceptable
values are a subset of the set of valid email addresses, requiring the
form: “Owner: human readable name <username@domain>”.
Path¶
Path
(required) specifies which directory the task rpm on the test
system is installed. This is an informational attribute only and appears
when displaying tasks when using the Task Library UI. If the
user gets onto the test system, they can go to this directory to review their
installed rpm data. To define this in the Makefile, it should
appear as follows:
Path: $(TEST_DIR)
TestTime¶
TestTime
(required) represents the upper limit of time that the
runtest.sh
script should execute before being terminated. That is,
the harness or lab controller should automatically abort the test after
this time period has expired. This is to guard against cases where a test
has entered an infinite loop or caused a system to hang. This field can be
used to achieve better test lab utilization by preventing the test from
running on a system indefinitely.
The value of the field should be a number followed by either the letter “m” or “h” to express the time in minutes or hours. It can also be specified in seconds by giving just a number. In most cases, it is recommended to provide a value in at least minutes rather than seconds.
The time should be the absolute longest a test is expected to take on the slowest platform supported, plus a 10% margin of error. Setting the time too short may lead to spurious cancellations, while setting it too long may waste lab system time if the task does get stuck. Durations of less than one minute are not recommended, as they usually run some risk of spurious cancellation, and it’s typically reasonable to take a minute to abort the test after an actual infinite loop or deadlock.
For example:
TestTime: 90 # 90 seconds
TestTime: 1m # 1 minute
TestTime: 2h # 2 hours
TestVersion¶
(required) This is the version of the task provided in the loaded RPM. Configuration of this attribute should appear as follows where this is an initial release:
TestVersion: 0.1 # OR
TestVersion: $(TESTVERSION) # if defined in Makefile
Architectures¶
Architectures
(optional) provides the ability to classify tasks for specific
architectures. You can provide a list of excluded architectures or a list of
exclusive architectures. For an excluded list, each architecture provided must
be proceeded with a minus sign(-). This includes all architectures except
those listed. For an exclusive list, no proceeding sign is required. You
can only configure an excluded or exclusive list and not a combination of both.
If the task is expected to only run on x86_64 architecture, then configure the following:
Architectures: x86_64
If the task is expect to NOT run on architecture x86_64 nor i386, do as follows:
Architectures: -x86_64 -i386
The list of architectures you can choose from can be found in Distros Section.
Bugs¶
Bugs
(optional) allows user to identify which bugs filed in Bugzilla
are associated to this task. The following are sample configurations:
# Single Line
Bug: 9999999 OR Bugs: 9999999
# Multiple Bugzillas
Bugs: 77777777 88888888
# Or multiple Bugzillas on multiple lines
Bugs: 77777777
Bugs: 88888888
Destructive¶
Destructive
(optional) is used to classify tasks which are destructive.
Determination of what classifies as destructive is up to the user defining
the test. To define this task as destructive, configure the following:
Destructive: Yes
Since tasks can be filtered by the bkr task-list CLI, it is recommended to define the task with this attribute with Yes or No; otherwise, it will not be found.
Environment¶
Environment
(optional) is used to pass task environment data to test
harnesses. The following can be set to alter defaults in beah:
Environment: RHTS_PORT=<your chosen port> else beah uses random port(7080-7099)
This field can occur multiple times within the metadata. So you can configure the following:
Environment: META_VAR1=<your var1 data>
Environment: META_VAR2=<your var2 data>
Environment: META_VAR3=<your var3 data>
Priority¶
Priority
(optional) allows user to classify a task’s priority.
This has no affect on the execution of the job.
Recommended values are as follows:
Low, Medium, Normal, High, Manual
The following is a sampling to configure this attribute:
Priority: High
Provides¶
Provides
(optional) allows the task creator to specify the capabilities
that the task RPM provides upon install. In addition to the default
Provides
generated by RPM, every task provides a virtual
capability derived from the task name. For example, the
/distribution/check-install
task also provides
test(/distribution/check-install)
.
You can specify additional capabilities by adding new Provides
lines (using a similar syntax to Requires
). For example, if your
task provides equivalent or better functionality than an old task, you
can add a Provides
such as the one below:
Provides: test(/old/task/name)
Releases¶
(optional) Some tests are only applicable to certain distribution releases. For example, a kernel bug may only be applicable to RHEL3 which contains the 2.4 kernel. Limiting the release should only be used when a task will not execute on a particular release. Otherwise, the release should not be restricted so that your test can run on as many different releases as possible.
You can populate the optional Releases
field in two different ways. To
exclude certain releases but include all others, list the releases each
prefixed with a minus sign (-). To include certain releases but exclude
all others, list the included releases.
For example, if your task runs only on RHEL6 and RHEL7:
Releases: RedHatEnterpriseLinux6 RedHatEnterpriseLinux7
Or, if your task is expected to run on any release except for RHEL3 & RHEL4:
Releases: -RedHatEnterpriseLinux3 -RedHatEnterpriseLinux4
Releases are identified by their OS major version. You can browse a list of OS versions in Beaker by selecting
from the menu. For example:- RedHatEnterpriseLinux3
- RedHatEnterpriseLinux4
- RedHatEnterpriseLinuxServer5
- RedHatEnterpriseLinuxClient5
- RedHatEnterpriseLinux6
- RedHatEnterpriseLinux7
- RedHatEnterpriseLinux8
- Fedora17
Your Beaker administrator may have configured compatibility aliases for some OS
versions, which you can also use in the Releases
field. Refer to Distro->Family
selection in the Web User Interface to review alias to OSMajor name mapping
or OS versions in the Administration Guide to modify alias names.
Requires¶
Requires
(optional) indicates one or more the packages that are
required to be installed on the test machine for the test to work. The
package being tested (if any) is automatically included via the
RunFor
field. Aside from the package under test and the
test harness itself, anything runtest.sh
needs for execution
must be included here.
This field can occur multiple times within the metadata. Each value
should be a space-separated list of package names, or of kickstart
package group names preceded with an @ sign. Each package or group must
occur within the distribution tree under test (specifically, it must
appear in the comps.xml
file).
For example:
Requires: gdb
Requires: @legacy-software-development
Requires: @kde-software-development
Requires: -pdksh
The last example above shows that we don’t want a particular package installed for this test. Normally you shouldn’t have to do this unless the package is installed by default.
In a lab implementation, the dependencies of the packages listed can be automatically loaded using yum.
Note that unlike an RPM spec file, only dependencies on actual package names are permitted (depending on a “virtual” provides is not supported — however, see RhtsRequires for a limited exception). Furthermore, even if some dependencies cannot be resolved, Beaker will attempt to execute the task anyway (this simplifies some issues with cross-version tasks as described below).
If a task dependency ever changes in a backwards incompatible way, one of the approaches below may be helpful:
- if only a dependency has changed name, specify both the names
of dependencies in the
Requires:
field (enabling this is the reason that missing packages are silently ignored). - it may be possible to work around the differences by logic in the
section of the
Makefile
that generates thetestinfo.desc
file. - for major changes, split the test, so that each incompatible version is
handled by a separate task in a sub-directory, with the common files built
from a shared directory in the
Makefile
.
When writing a multihost test involving multiple roles client(s) and server(s), the union of the requirements for all of the roles must be listed here.
RhtsOptions¶
(optional) You can indicate that your task does not need to be run inside the
rhts-compat
service:
RhtsOptions: -Compatible
This option has no effect on newer distros. See The rhts-compat service.
RhtsRequires¶
RhtsRequires
(optional) indicates the other beaker tests that are
required to be installed on the test machine for the test to work.
This field can occur multiple times within the metadata. Each value
should consist of a task name in the form test(<task-name>)
. Each
task dependency named this way must exist in the Beaker task library
or the task will be aborted.
For example:
RhtsRequires: test(/distribution/rhts/common)
RunFor¶
RunFor
(optional) allows entries in the Beaker task library to be
associated with specific packages for test execution and reporting purposes.
It is only relevant for tasks that are specifically written as tests for
particular packages rather than as general utilities.
When testing a specific package, that package should be listed in this field. If the test might reasonably be affected by changes to another package, the other package should also be listed here. If a package changes names but the task remains applicable, then all of the package’s names should be listed here.
This field is optional and can occur multiple times within the metadata. The value should be a space-separated list of package names.
Type¶
(optional) To classify the type of task, one of the following is recommended:
Regression, Performance, Stress, Certification, Security,
Durations, Interoperability, Standardscompliance, Customeracceptance,
Releasecriterium, Crasher, Tier1, Tier2, Alpha,
KernelTier1, KernelTier2, Multihost, MultihostDriver, Install,
FedoraTier1, FedoraTier2, KernelRTTier1, KernelReporting, Sanity, Library
Configuration of this attribute should appear as follows if you’ve
chosen Sanity
as your type
:
Type: Sanity