145 lines
5.2 KiB
ReStructuredText
145 lines
5.2 KiB
ReStructuredText
|
.. SPDX-License-Identifier: GPL-2.0+
|
||
|
|
||
|
=========================================
|
||
|
Automated testing of the DRM subsystem
|
||
|
=========================================
|
||
|
|
||
|
Introduction
|
||
|
============
|
||
|
|
||
|
Making sure that changes to the core or drivers don't introduce regressions can
|
||
|
be very time-consuming when lots of different hardware configurations need to
|
||
|
be tested. Moreover, it isn't practical for each person interested in this
|
||
|
testing to have to acquire and maintain what can be a considerable amount of
|
||
|
hardware.
|
||
|
|
||
|
Also, it is desirable for developers to check for regressions in their code by
|
||
|
themselves, instead of relying on the maintainers to find them and then
|
||
|
reporting back.
|
||
|
|
||
|
There are facilities in gitlab.freedesktop.org to automatically test Mesa that
|
||
|
can be used as well for testing the DRM subsystem. This document explains how
|
||
|
people interested in testing it can use this shared infrastructure to save
|
||
|
quite some time and effort.
|
||
|
|
||
|
|
||
|
Relevant files
|
||
|
==============
|
||
|
|
||
|
drivers/gpu/drm/ci/gitlab-ci.yml
|
||
|
--------------------------------
|
||
|
|
||
|
This is the root configuration file for GitLab CI. Among other less interesting
|
||
|
bits, it specifies the specific version of the scripts to be used. There are
|
||
|
some variables that can be modified to change the behavior of the pipeline:
|
||
|
|
||
|
DRM_CI_PROJECT_PATH
|
||
|
Repository that contains the Mesa software infrastructure for CI
|
||
|
|
||
|
DRM_CI_COMMIT_SHA
|
||
|
A particular revision to use from that repository
|
||
|
|
||
|
UPSTREAM_REPO
|
||
|
URL to git repository containing the target branch
|
||
|
|
||
|
TARGET_BRANCH
|
||
|
Branch to which this branch is to be merged into
|
||
|
|
||
|
IGT_VERSION
|
||
|
Revision of igt-gpu-tools being used, from
|
||
|
https://gitlab.freedesktop.org/drm/igt-gpu-tools
|
||
|
|
||
|
drivers/gpu/drm/ci/testlist.txt
|
||
|
-------------------------------
|
||
|
|
||
|
IGT tests to be run on all drivers (unless mentioned in a driver's *-skips.txt
|
||
|
file, see below).
|
||
|
|
||
|
drivers/gpu/drm/ci/${DRIVER_NAME}-${HW_REVISION}-fails.txt
|
||
|
----------------------------------------------------------
|
||
|
|
||
|
Lists the known failures for a given driver on a specific hardware revision.
|
||
|
|
||
|
drivers/gpu/drm/ci/${DRIVER_NAME}-${HW_REVISION}-flakes.txt
|
||
|
-----------------------------------------------------------
|
||
|
|
||
|
Lists the tests that for a given driver on a specific hardware revision are
|
||
|
known to behave unreliably. These tests won't cause a job to fail regardless of
|
||
|
the result. They will still be run.
|
||
|
|
||
|
drivers/gpu/drm/ci/${DRIVER_NAME}-${HW_REVISION}-skips.txt
|
||
|
-----------------------------------------------------------
|
||
|
|
||
|
Lists the tests that won't be run for a given driver on a specific hardware
|
||
|
revision. These are usually tests that interfere with the running of the test
|
||
|
list due to hanging the machine, causing OOM, taking too long, etc.
|
||
|
|
||
|
|
||
|
How to enable automated testing on your tree
|
||
|
============================================
|
||
|
|
||
|
1. Create a Linux tree in https://gitlab.freedesktop.org/ if you don't have one
|
||
|
yet
|
||
|
|
||
|
2. In your kernel repo's configuration (eg.
|
||
|
https://gitlab.freedesktop.org/janedoe/linux/-/settings/ci_cd), change the
|
||
|
CI/CD configuration file from .gitlab-ci.yml to
|
||
|
drivers/gpu/drm/ci/gitlab-ci.yml.
|
||
|
|
||
|
3. Next time you push to this repository, you will see a CI pipeline being
|
||
|
created (eg. https://gitlab.freedesktop.org/janedoe/linux/-/pipelines)
|
||
|
|
||
|
4. The various jobs will be run and when the pipeline is finished, all jobs
|
||
|
should be green unless a regression has been found.
|
||
|
|
||
|
|
||
|
How to update test expectations
|
||
|
===============================
|
||
|
|
||
|
If your changes to the code fix any tests, you will have to remove one or more
|
||
|
lines from one or more of the files in
|
||
|
drivers/gpu/drm/ci/${DRIVER_NAME}_*_fails.txt, for each of the test platforms
|
||
|
affected by the change.
|
||
|
|
||
|
|
||
|
How to expand coverage
|
||
|
======================
|
||
|
|
||
|
If your code changes make it possible to run more tests (by solving reliability
|
||
|
issues, for example), you can remove tests from the flakes and/or skips lists,
|
||
|
and then the expected results if there are any known failures.
|
||
|
|
||
|
If there is a need for updating the version of IGT being used (maybe you have
|
||
|
added more tests to it), update the IGT_VERSION variable at the top of the
|
||
|
gitlab-ci.yml file.
|
||
|
|
||
|
|
||
|
How to test your changes to the scripts
|
||
|
=======================================
|
||
|
|
||
|
For testing changes to the scripts in the drm-ci repo, change the
|
||
|
DRM_CI_PROJECT_PATH and DRM_CI_COMMIT_SHA variables in
|
||
|
drivers/gpu/drm/ci/gitlab-ci.yml to match your fork of the project (eg.
|
||
|
janedoe/drm-ci). This fork needs to be in https://gitlab.freedesktop.org/.
|
||
|
|
||
|
|
||
|
How to incorporate external fixes in your testing
|
||
|
=================================================
|
||
|
|
||
|
Often, regressions in other trees will prevent testing changes local to the
|
||
|
tree under test. These fixes will be automatically merged in during the build
|
||
|
jobs from a branch in the target tree that is named as
|
||
|
${TARGET_BRANCH}-external-fixes.
|
||
|
|
||
|
If the pipeline is not in a merge request and a branch with the same name
|
||
|
exists in the local tree, commits from that branch will be merged in as well.
|
||
|
|
||
|
|
||
|
How to deal with automated testing labs that may be down
|
||
|
========================================================
|
||
|
|
||
|
If a hardware farm is down and thus causing pipelines to fail that would
|
||
|
otherwise pass, one can disable all jobs that would be submitted to that farm
|
||
|
by editing the file at
|
||
|
https://gitlab.freedesktop.org/gfx-ci/lab-status/-/blob/main/lab-status.yml.
|