## Project testing

OpenThread released by Google is tested by a number of tools.

### Continuous integration

OpenThread uses [GitHub Actions](https://github.com/features/actions) for
continuous integration (CI), and
[Codecov](https://codecov.io/gh/openthread/openthread) for code coverage.

CI performs build checks for all example platforms using the GNU Arm Embedded
Toolchain and for the simulated example using GCC, Clang, and Android. It also
builds and tests against x86, platform architecture, and Thread device
configurations. For more information on specific tests and checks, see
[Workflows](https://github.com/openthread/openthread/tree/master/.github/workflows).

In addition, CI performs:

1. [Code style checks](https://github.com/openthread/openthread/tree/master/STYLE_GUIDE.md#format-and-style) using `clang-format`
2. [Unit tests](https://github.com/openthread/openthread/tree/master/tests/unit)
3. [Functional tests](https://github.com/openthread/openthread/tree/master/tests/scripts) against CLI and Pyspinel

### OSS-Fuzz

OpenThread is fuzz tested with [OSS-Fuzz](https://github.com/google/oss-fuzz).
In this testing technique, invalid and random inputs are submitted at a high
frequency and volume to software in order to find issues such as memory leaks or
crashes.

See the OpenThread repository for the
[current fuzzing build targets](https://github.com/openthread/openthread/tree/master/tests/fuzz).

## Product testing

Use the following tools to test your own OpenThread product.

### Wireshark

Wireshark is an open-source network protocol analyzer for traffic running on
physical and virtual network interfaces. The Thread protocol is supported in
[Wireshark 2.4.0](https://www.wireshark.org/docs/relnotes/wireshark-2.4.0.html)
and later. Documentation and downloads for this tool can be found at
[wireshark.org](https://www.wireshark.org/).

For more information on how Thread is supported in Wireshark, see [Packet
sniffing with Pyspinel](https://openthread.io/guides/pyspinel/sniffer).

### Pyspinel

Pyspinel is a Python CLI for the [Spinel
protocol](https://openthread.io/platforms/co-processor#spinel_protocol), used to configure and manage [OpenThread NCPs or
RCPs](https://openthread.io/platforms/co-processor). This CLI is primarily targeted to CI tests, but can be used manually to experiment with
and test OpenThread Co-Processor instances.

Pyspinel is used to:

- Add simulated Co-Processor testing to continuous integration.
- Automate testing of testbeds running Co-Processor firmware on hardware.
- Debug Co-Processor builds of OpenThread.
- Convert an OpenThread Co-Processor into a packet sniffer.

For more information, see the
[`README`](https://github.com/openthread/pyspinel/blob/master/README.md) in the Pyspinel
repository.

> [!NOTE]
> **Note:** Pyspinel is only supported for NCP and RCP builds of OpenThread on Linux or MacOS.