From 9069f9d772c5ffc49618699ad6ecb909c4023883 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=ABl=20Schulz-Andres?= Date: Mon, 22 Jun 2026 17:54:37 +0200 Subject: [PATCH 1/3] docs: make list awesome.re compliant for submission Rewrite README to satisfy awesome-lint: title-case heading with inline Awesome badge, theme-focused description, "Contents" TOC, and plain `- [Name](url) - Description.` entries with language folded into prose. Remove the disallowed CI badge and the empty section. - Add contributing.md and CC0 license file (required by awesome) - Add awesome-lint GitHub Actions workflow (without bagde badge) - Add centered project logo under media/ to README - Switch Valgrind link to canonical valgrind.org vs user-mirror - Remove badges.md (disallowed by awesome-lint) --- .github/workflows/awesome-lint.yml | 19 +++ README.md | 115 +++++++++-------- badges.md | 11 -- contributing.md | 19 +++ license | 121 ++++++++++++++++++ media/embedded_testing.svg | 197 +++++++++++++++++++++++++++++ 6 files changed, 418 insertions(+), 64 deletions(-) create mode 100644 .github/workflows/awesome-lint.yml delete mode 100644 badges.md create mode 100644 contributing.md create mode 100644 license create mode 100644 media/embedded_testing.svg diff --git a/.github/workflows/awesome-lint.yml b/.github/workflows/awesome-lint.yml new file mode 100644 index 0000000..3b1a2e1 --- /dev/null +++ b/.github/workflows/awesome-lint.yml @@ -0,0 +1,19 @@ +name: Awesome Lint + +on: + push: + pull_request: + workflow_dispatch: + +jobs: + awesomeLint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: lts/* + + - name: Awesome Lint + run: npx awesome-lint diff --git a/README.md b/README.md index a432b7e..8a6b859 100644 --- a/README.md +++ b/README.md @@ -1,60 +1,69 @@ -# Embedded Testing -[![Awesome](https://awesome.re/badge.svg)](https://awesome.re) -[![Check Links](https://github.com/onmcu/awesome-embedded-testing/actions/workflows/links.yml/badge.svg)](https://github.com/onmcu/awesome-embedded-testing/actions/workflows/links.yml) - -Curated list of tools and resources for testing Embedded and Low-level software - -## Table of Contents -- [Embedded Testing](#embedded-testing) - - [Table of Contents](#table-of-contents) - - [Books, blogs and training materials](#books-blogs-and-training-materials) - - [Test Frameworks](#test-frameworks) - - [Rust Test Frameworks](#rust-test-frameworks) - - [General Embedded Testing Frameworks](#general-embedded-testing-frameworks) - - [Mocking and Hardware Simulation](#mocking-and-hardware-simulation) - - [Embedded Integration & Continuous Integration (CI)](#embedded-integration--continuous-integration-ci) - - [Static & Dynamic Analysis](#static--dynamic-analysis) - - [Embedded-Specific Testing Techniques & Tools](#embedded-specific-testing-techniques--tools) - - [Test Automation & Hardware-in-the-Loop (HIL)](#test-automation--hardware-in-the-loop-hil) - - [Examples & Reference Projects](#examples--reference-projects) - -## Books, blogs and training materials +# Awesome Embedded Testing [![Awesome](https://awesome.re/badge.svg)](https://awesome.re) + +> Tools, frameworks, and resources for testing embedded and low-level software, covering unit testing, mocking, hardware simulation, static and dynamic analysis, continuous integration, and hardware-in-the-loop automation. + +

+ Awesome Embedded Testing logo +

+ +## Contents + +- [Test Frameworks](#test-frameworks) + - [Rust Test Frameworks](#rust-test-frameworks) + - [General Embedded Testing Frameworks](#general-embedded-testing-frameworks) + - [Mocking and Hardware Simulation](#mocking-and-hardware-simulation) + - [Continuous Integration](#continuous-integration) + - [Static and Dynamic Analysis](#static-and-dynamic-analysis) + - [Embedded-Specific Techniques and Tools](#embedded-specific-techniques-and-tools) + - [Test Automation and Hardware-in-the-Loop](#test-automation-and-hardware-in-the-loop) + - [Examples and Reference Projects](#examples-and-reference-projects) ## Test Frameworks + ### Rust Test Frameworks -- **[embedded-test](https://crates.io/crates/embedded-test)** Rust test harness and runner for embedded devices ![Lang: Rust](https://img.shields.io/badge/Lang:-Rust-fe7d37) + +- [embedded-test](https://crates.io/crates/embedded-test) - Rust test harness and runner for embedded devices. +- [defmt-test](https://github.com/knurling-rs/defmt/tree/main/firmware/defmt-test) - Rust test harness that lets you write and run unit tests on your device as if using the built-in `#[test]` attribute. ### General Embedded Testing Frameworks -- **[Ceedling/Unity](https://github.com/ThrowTheSwitch/Ceedling)** – Popular C-based unit testing and build framework, great for small to medium-sized embedded projects. ![Lang: C](https://img.shields.io/badge/Lang:-C-blue) -- **[GoogleTest (gtest)](https://github.com/google/googletest)** – Widely used and highly customizable C++ testing framework, commonly adopted in embedded C++ projects. ![Lang: C++](https://img.shields.io/badge/Lang:-C++-violet) -- **[CppUTest](https://github.com/cpputest/cpputest)** – Flexible testing framework tailored specifically to embedded software, emphasizing memory safety and simplicity. ![Lang: C++](https://img.shields.io/badge/Lang:-C++-violet) -- **[Catch2](https://github.com/catchorg/Catch2)** – Modern C++ testing framework known for ease of use and expressive assertions, lightweight enough for embedded targets. ![Lang: C++](https://img.shields.io/badge/Lang:-C++-violet) + +- [Ceedling/Unity](https://github.com/ThrowTheSwitch/Ceedling) - Popular C-based unit testing and build framework, great for small to medium-sized embedded projects. +- [GoogleTest](https://github.com/google/googletest) - Widely used and highly customizable C++ testing framework, commonly adopted in embedded C++ projects. +- [CppUTest](https://github.com/cpputest/cpputest) - C and C++ testing framework tailored specifically to embedded software, emphasizing memory safety and simplicity. +- [Catch2](https://github.com/catchorg/Catch2) - Modern C++ testing framework known for ease of use and expressive assertions, lightweight enough for embedded targets. ### Mocking and Hardware Simulation -- **[CMock](https://github.com/ThrowTheSwitch/CMock)** – Generates mock objects automatically for C, ideal for testing interactions with hardware-dependent code. ![Lang: C](https://img.shields.io/badge/Lang:-C-blue) -- **[Fake Function Framework (FFF)](https://github.com/meekrosoft/fff)** – Lightweight, simple mocking framework for C-based embedded software. ![Lang: C](https://img.shields.io/badge/Lang:-C-blue) -- **[Renode](https://github.com/renode/renode)** – Powerful framework for hardware simulation and testing, allowing execution and debugging of embedded binaries without actual hardware. ![Lang: Multi](https://img.shields.io/badge/Lang:-Multi-blueviolet) -- **[QEMU](https://github.com/qemu/qemu)** – Widely adopted open-source emulator, very useful for full-system simulation of embedded platforms during testing. ![Lang: Multi](https://img.shields.io/badge/Lang:-Multi-blueviolet) -- **[embedded-hal-mock](https://github.com/dbrgn/embedded-hal-mock)** – Mocks for testing embedded-hal based drivers without hardware access. ![Lang: Rust](https://img.shields.io/badge/Lang:-Rust-fe7d37) - -### Embedded Integration & Continuous Integration (CI) -- **[PlatformIO](https://github.com/platformio/platformio-core)** – Cross-platform build tool and package manager, ideal for automating builds and tests for embedded projects. ![Lang: Multi](https://img.shields.io/badge/Lang:-Multi-blueviolet) -- **[Embench](https://github.com/embench/embench-iot)** – Open-source benchmarking suite specifically targeting IoT-class embedded systems. ![Lang: Multi](https://img.shields.io/badge/Lang:-Multi-blueviolet) -- **[Robot Framework](https://github.com/robotframework/robotframework)** – Generic acceptance-test automation framework, commonly used for higher-level integration and system tests. ![Lang: Python](https://img.shields.io/badge/Lang:-Python-3775A9) - -### Static & Dynamic Analysis -- **[Cppcheck](https://github.com/danmar/cppcheck)** – Popular static analysis tool specifically tailored for C and C++ codebases. ![Lang: C/C++](https://img.shields.io/badge/Lang:-C/C++-fe7d37) -- **[Valgrind](https://github.com/paulfloyd/freebsd_valgrind)** – Dynamic analysis tool useful for memory leak detection and error tracking. ![Lang: Multi](https://img.shields.io/badge/Lang:-Multi-blueviolet) -- **[Clang Sanitizers](https://github.com/google/sanitizers)** – Effective runtime debugging tools for detecting memory safety errors in embedded C/C++ applications. ![Lang: C/C++](https://img.shields.io/badge/Lang:-C/C++-fe7d37) - -### Embedded-Specific Testing Techniques & Tools -- **[Embedded Artistry's Embedded Testing Guides](https://github.com/embeddedartistry/embedded-resources)** – Curated resources and examples for best practices in embedded software testing. ![Lang: Multi](https://img.shields.io/badge/Lang:-Multi-blueviolet) -- **[Tracealyzer](https://github.com/Percepio)** *(Commercial with free tiers)* – Real-time trace visualization for debugging and performance analysis of embedded systems. ![Lang: Multi](https://img.shields.io/badge/Lang:-Multi-blueviolet) - -### Test Automation & Hardware-in-the-Loop (HIL) -- **[Labgrid](https://github.com/labgrid-project/labgrid)** – Automation framework for hardware-in-the-loop testing, integrates smoothly with continuous integration. ![Lang: Python](https://img.shields.io/badge/Lang:-Python-3775A9) -- **[OpenHTF](https://github.com/google/openhtf)** – Hardware testing framework from Google designed for automated manufacturing tests and HIL testing. ![Lang: Python](https://img.shields.io/badge/Lang:-Python-3775A9) - -### Examples & Reference Projects -- **[Nasa JPL's F Prime](https://github.com/nasa/fprime)** – NASA's open-source flight software framework, extensively tested and validated. ![Lang: C++](https://img.shields.io/badge/Lang:-C++-violet) -- **[LittlevGL](https://github.com/lvgl/lvgl)** – Embedded GUI library extensively using unit tests and automated integration testing. ![Lang: C](https://img.shields.io/badge/Lang:-C-blue) + +- [CMock](https://github.com/ThrowTheSwitch/CMock) - Generates mock objects automatically for C, ideal for testing interactions with hardware-dependent code. +- [Fake Function Framework (FFF)](https://github.com/meekrosoft/fff) - Lightweight, simple mocking framework for C-based embedded software. +- [Renode](https://github.com/renode/renode) - Multi-architecture framework for hardware simulation and testing, allowing execution and debugging of embedded binaries without actual hardware. +- [QEMU](https://github.com/qemu/qemu) - Widely adopted open-source emulator, very useful for full-system simulation of embedded platforms during testing. +- [embedded-hal-mock](https://github.com/dbrgn/embedded-hal-mock) - Mocks for testing Rust embedded-hal based drivers without hardware access. + +### Continuous Integration + +- [PlatformIO](https://github.com/platformio/platformio-core) - Cross-platform build tool and package manager, ideal for automating builds and tests for embedded projects. +- [Embench](https://github.com/embench/embench-iot) - Open-source benchmarking suite specifically targeting IoT-class embedded systems. +- [Robot Framework](https://github.com/robotframework/robotframework) - Generic Python-based acceptance-test automation framework, commonly used for higher-level integration and system tests. + +### Static and Dynamic Analysis + +- [Cppcheck](https://github.com/danmar/cppcheck) - Popular static analysis tool specifically tailored for C and C++ codebases. +- [Valgrind](https://valgrind.org) - Dynamic analysis tool useful for memory leak detection and error tracking. +- [Clang Sanitizers](https://github.com/google/sanitizers) - Effective runtime debugging tools for detecting memory safety errors in embedded C and C++ applications. + +### Embedded-Specific Techniques and Tools + +- [Embedded Artistry's Embedded Resources](https://github.com/embeddedartistry/embedded-resources) - Curated resources and examples for best practices in embedded software testing. +- [Tracealyzer](https://github.com/Percepio) - Real-time trace visualization for debugging and performance analysis of embedded systems (commercial with free tiers). + +### Test Automation and Hardware-in-the-Loop + +- [Labgrid](https://github.com/labgrid-project/labgrid) - Python-based automation framework for hardware-in-the-loop testing, integrates smoothly with continuous integration. +- [OpenHTF](https://github.com/google/openhtf) - Python hardware testing framework from Google designed for automated manufacturing tests and hardware-in-the-loop testing. +- [OnMCU](https://github.com/onmcu/onmcu-rs) - CLI for remote MCU development, flashing, and testing on real hardware hosted on the OnMCU platform. + +### Examples and Reference Projects + +- [NASA JPL's F Prime](https://github.com/nasa/fprime) - NASA's open-source C++ flight software framework, extensively tested and validated. +- [LVGL](https://github.com/lvgl/lvgl) - Embedded GUI library written in C, extensively using unit tests and automated integration testing. diff --git a/badges.md b/badges.md deleted file mode 100644 index 06865c9..0000000 --- a/badges.md +++ /dev/null @@ -1,11 +0,0 @@ -# Languages -- C: ![Lang: C](https://img.shields.io/badge/Lang:-C-blue) -- C++: ![Lang: C++](https://img.shields.io/badge/Lang:-C++-violet) -- Rust: ![Lang: Rust](https://img.shields.io/badge/Lang:-Rust-fe7d37) -- Python: ![Lang: Python](https://img.shields.io/badge/Lang:-Python-yellow) - - - -## Rust - -- Crates: [![crates.io](https://img.shields.io/crates/v/embedded-test.svg)](https://crates.io/crates/embedded-test) diff --git a/contributing.md b/contributing.md new file mode 100644 index 0000000..562de9f --- /dev/null +++ b/contributing.md @@ -0,0 +1,19 @@ +# Contributing + +Thanks for taking the time to contribute! + +Please ensure your pull request adheres to the following guidelines: + +- Search previous suggestions before making a new one, to avoid duplicates. +- Make an individual pull request for each suggestion. +- Use the following format: `- [Name](link) - Description.` +- Keep descriptions short, concise, and in the present tense. +- Start each description with a capital letter and end it with a period. +- Add one link per pull request, in the most appropriate category. +- New categories, or improvements to the existing ones, are welcome. +- Check your spelling and grammar. +- Make sure your text editor is set to remove trailing whitespace. +- The pull request and commit should have a useful title. +- Only suggest tools and resources that are actively maintained and well documented. + +Thank you for your suggestions! diff --git a/license b/license new file mode 100644 index 0000000..2973c0c --- /dev/null +++ b/license @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not limited +to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/media/embedded_testing.svg b/media/embedded_testing.svg new file mode 100644 index 0000000..fd360f2 --- /dev/null +++ b/media/embedded_testing.svg @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + EmbeddedTesting + TestPlanning + TestDesign + UnitTesting + IntegrationTesting + SystemTesting + RegressionTesting + Review &Reporting + From 461fe7c4fd72ad232cfd5ca05a864c8088ab8f07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=ABl=20Schulz-Andres?= Date: Thu, 25 Jun 2026 16:01:57 +0200 Subject: [PATCH 2/3] fix: svg illustration visibility in darkmode --- media/embedded_testing.svg | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/media/embedded_testing.svg b/media/embedded_testing.svg index fd360f2..a218c72 100644 --- a/media/embedded_testing.svg +++ b/media/embedded_testing.svg @@ -24,7 +24,7 @@ showgrid="false" showguides="true" inkscape:zoom="1.5733333" - inkscape:cx="264.72458" + inkscape:cx="263.4534" inkscape:cy="323.51696" inkscape:window-width="2560" inkscape:window-height="1403" @@ -85,15 +85,15 @@ font-size="42.7887px" font-weight="600" id="text26" - style="stroke-width:1;stroke:#ffffff;stroke-opacity:1;stroke-dasharray:none;stroke-linejoin:miter;stroke-linecap:butt;paint-order:markers stroke fill">EmbeddedEmbeddedTesting + style="stroke-width:1;stroke:none;stroke-opacity:1;stroke-dasharray:none;stroke-linejoin:miter;stroke-linecap:butt;paint-order:markers stroke fill;fill:#8b8c8d;fill-opacity:1">Testing Date: Thu, 25 Jun 2026 16:03:58 +0200 Subject: [PATCH 3/3] fix: rename license to LICENSE --- license => LICENSE | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename license => LICENSE (100%) diff --git a/license b/LICENSE similarity index 100% rename from license rename to LICENSE