> For the complete documentation index, see [llms.txt](https://clr.gitbook.io/clearlinux-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://clr.gitbook.io/clearlinux-docs/07-1-telemetry/07-2-qa-testing.md).

# QA Testing

## What you'll learn in this chapter

* Build time tests concepts
* QA level testing tools

## Concepts

It is virtually impossible as a human being to continuously monitor and test the proper functioning of a conglomerate as large as a normal Linux distribution. For this reason, we need to automate testing as much as possible and impose strict error checking at every level.

In Clear Linux OS, we have created several layers of testing that will be Open Source in the future. At the time of writing this document they are not Open Source, so this chapter is incomplete.

The automated package testing that comes with many of our packages is available at this time.

## `make check`

Most upstream projects use the `check` framework to perform package-level unit tests. Clear Linux OS and autospec attempt to use these tests and enforce error checking, permitting a developer to spot errors, pause release, and prevent a known error from reaching customers. These errors are recorded and counted.

The `%check` section in a `spec` file is used to call the package tests. If the output conforms to BAT or other standard unit testing output that programs like `check` generate, these package test results are recorded.

You can add custom check commands by creating a `make_check_command` and inserting the custom tests or test command in there, and autospec will include them in every subsequent run. The `options.conf` allows you to either enforce that all tests must pass, or you may disable that setting and allow failures.

The results of the tests are stored by the `common` tooling in the `testresults` file. You should inspect this file after each build to make sure that testing remains functional and no new errors are introduced with each package change.
