Generic Tests

Generic tests are tests that don’t check only specific components (e.g. "dnf" or "kernel") but can be typically applied to all artifacts of a certain type. An example of such a test could be a test that can be run on all RPM builds in a Bodhi update.

Generic Tests for Bodhi updates

Fedora CI currently provides four generic tests that run on Bodhi updates for Fedora Rawhide. Some of them run on updates for other releases as well.

rpmdeplint

rpmdeplint is a generic test that tries to identify problems in RPM packages in the context of their dependency graph.

There are three different checks that the test performs. There is also a fourth check, check-repoclosure, but it is currently disabled as it is slow and inaccurate, and the rmdepcheck test does a better job.

check-sat

This checks if all runtime dependencies of the given RPM packages would be satisfied if the packages are pushed to the given repository (like Rawhide).

check-conflicts

This checks for undeclared file conflicts in the given RPM packages: that is when one of the given packages contains a file which is also contained in some other package.

This command will not report a file as conflicting between two packages if:

  • there is an explicit RPM Conflicts between the two packages; or

  • the file’s checksum, permissions, owner, and group are identical in both packages (RPM allows both packages to own the file in this case); or

  • the file’s color is different between the two packages (RPM will silently resolve the conflict in favor of the 64-bit file).

Sometimes files can be owned by literally thousands of different packages. In order to properly check that there are no file conflicts, rpmdeplint would need to download all other packages. This would be very slow, so only a single other package is downloaded and checked.

check-upgrade

Checks that there are no existing packages in the repositories which would upgrade or obsolete the given packages.

If this check fails, it means that the package under test will never be installed (since the package manager will always pick the newer or obsoleting package from the repositories instead) which is not desirable, assuming the package is intended as an update.

rpminspect

RPM build deviation analysis tools. rpminspect looks at the output of an RPM build (e.g., the output of a Koji build) and examines the contents of the build artifacts to report:

  • Policy compliance

  • Changes from a previous build to the current build

    • the previous build is the latest build in the stable repository (in Rawhide, it is simply the previous build)

  • General correctness and best practices

rpminspect performs more than 30 different checks on packages. To list all of them, with a nice description, please run rpminspect -v -l.

This test runs on updates for all Fedora releases including ELN, but not on EPEL updates.

installability

This is a generic test that tries to perform the following operations on the given packages:

  • dnf install

  • dnf remove

  • dnf update

  • dnf downgrade

All problems are logged and reported.

This test runs on updates for all Fedora releases, including ELN and EPEL.

rmdepcheck

This test checks whether the update would cause dependency issues in any other package if it were to be accepted. It also checks whether the dependencies of the packages in the update themselves are OK (this is mostly duplicated with rpmdeplint).

This test runs on updates for all Fedora releases, including ELN and EPEL.

Generic Tests for dist-git pull requests

Fedora CI also provides a set of generic tests that are run by Packit CI on dist-git pull requests. This set includes the rpminspect, installability and rmdepcheck tests listed above, but not the rpmdeplint test. It also includes three additional tests not run on Bodhi updates.

fedora-review

This test runs the fedora-review review helper utility on the package. It can be helpful in spotting cases where the package inadvertently moves away from compliance with the guidelines checked during the review process.

license-validate

This test runs license-validate on the pull request. license-validate checks that the License tag is in the expected SPDX format and contains only allowed licenses.

rpmlint

This test runs the rpmlint package linter on the pull request.