Running unit tests
We run unit tests as part of the build process using cros_run_unit_tests in ~/src/scripts (crostestutils.git). In a nutshell, this script uses the portage method of building and running unit tests using
FEATURES="test". To run all the Chromium OS unit tests, you can run
./cros_run_unit_tests directly from within your chroot. If you want to run just the unit tests for specific packages, you can use
./cros_run_unit_tests --packages "space delimited list of portage package names". See ./cros_run_unit_tests --help for more information about other options.
As an example, let's say you just want to run the unit tests for the metrics package. To do so, you can run:
./cros_run_unit_tests --packages "metrics"
Running a single test
GTEST_ARGS="--gtest_filter=FreeDiskSpaceTest.*" ./cros_run_unit_tests --packages chromeos-cryptohome
Adding unit tests
To add unit tests to your packages, create a src_test stanza in your ebuild that builds and runs the unit tests (it is fine to have them build in the src_compile stage as well). See https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/master/chromeos-base/metrics/metrics-9999.ebuild as a good example of adding your unit test.
- Portage documentation of src_test (didn't find it that helpful though).
How to Blacklist a package from running its unit tests
It's discouraged to have unit tests that need to be blacklisted. However, if you really need to black list a package from running its unit tests as part of the build, use either
RESTRCT="test" in your ebuild or add it to the unit tests blacklist in
- The unit tests are built for the target and run on the host. This means that unit tests only currently work on x86-* and amd64-* targets.
- By default, cros_run_unit_tests will only use FEATURES="test" on packages that exist in the chromeos-base package and are in the dependency tree of chromeos.