Host unit tests in CI

Host unit tests in CI#

Which configurations of the host unit-test suite (ninja check / gn_tests.sh / build_examples.py --target *-tests*) run in CI, when, and why.

Keep this file in sync: scripts/tools/list_unit_test_steps.py lists every CI step that runs unit tests into host_unit_tests.generated.txt. When a workflow change alters that list, run it with --update and update the tables below in the same PR. The code-lints job in lint.yml runs it with --check.

Release branches (v*-branch) run their own copy of each workflow. On push they behave like a master push; scheduled (nightly) workflows do not run on them.

Linux and macOS host#

Configuration

Job (workflow)

PR

Master push

Nightly

Why

gcc, OpenSSL, enable_rtti

Build on Linux (python_lib) (build.yaml)

yes

yes

–

Builds the Python controller; also runs the suite

gcc, OpenSSL, use_coverage

Build on Linux (coverage) (build.yaml)

yes

yes

–

Codecov report

gcc, OpenSSL, memory debug checks, platform tests

Build on Linux (gcc_debug) (build.yaml)

–

yes

CodeQL

Only run of chip_config_memory_debug_checks

gcc, OpenSSL, chip_logging=false, platform tests

Build on Linux (gcc_debug) (build.yaml)

yes

–

–

Logging-off build

gcc, detail / progress / error logging off (compile)

Build on Linux (gcc_debug) (build.yaml)

–

yes

–

Logging-level builds

gcc release (is_debug=false)

Build on Linux (fake, gcc_release, clang, simulated)

–

yes

–

Release-mode build

clang ASan, OpenSSL

Build on Linux (fake, gcc_release, clang, simulated)

yes

–

–

Sanitizer run on every PR

clang ASan, TSan, UBSan, OpenSSL

Build on Linux (fake, gcc_release, clang, simulated)

–

yes

–

Full sanitizer set after merge

fake platform (linux-fake-tests)

Build on Linux (fake, gcc_release, clang, simulated)

yes

yes

–

Platform-independent tests

clang ASan, PSA

Crypto Backend Unit Tests (unit_integration_test.yaml)

crypto paths

crypto paths

–

Crypto backend

clang ASan, mbedTLS

Crypto Backend Unit Tests (unit_integration_test.yaml)

crypto paths

crypto paths

–

Crypto backend

clang ASan, BoringSSL, ICD + ARL + rotating id

Nightly Unit Tests - Linux (various features) (nightly.yaml)

–

–

yes

Feature flags; ~66m, TestRead waits on ICD timers

clang ASan, BoringSSL / mbedTLS / PSA

Nightly ASAN Testing across Crypto Backends (nightly.yaml)

–

–

yes

Crypto backends with ASan

clang MSan

Nightly MSAN Tests - Linux (nightly.yaml)

–

–

yes

Uninitialized-memory checks

macOS ASan, BoringSSL, target_os="all"

Build on Darwin (clang, simulated) (build.yaml)

yes

yes

–

macOS host

“Crypto paths”: src/credentials, src/crypto, src/pw_backends, third_party/pigweed, third_party/mbedtls, unit_integration_test.yaml. “Platform tests”: chip_build_all_platform_tests=true (Silabs host tests).

Embedded targets#

Configuration

Job (workflow)

PR

Master push

Why

ESP32 QEMU, mbedTLS

ESP32_QEMU (qemu.yaml)

yes

yes

ESP32 target

Tizen QEMU

Tizen (qemu.yaml)

yes

yes

Tizen target

Zephyr native_sim, PSA

nRF Connect SDK (examples-nrfconnect.yaml)

some paths

yes

nRF target

Open questions#

  • gcc runs the full suite three times on every PR (python_lib, coverage, gcc_debug chip_logging=false). Is more than one needed?

  • Release branches get no nightly coverage (#74387).