From: Abhinav Saxena <xandfury@gmail.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Jiri Slaby <jirislaby@kernel.org>,
Nathan Chancellor <nathan@kernel.org>,
Nick Desaulniers <nick.desaulniers+lkml@gmail.com>,
Bill Wendling <morbo@google.com>,
Justin Stitt <justinstitt@google.com>,
Kees Cook <kees@kernel.org>
Cc: linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org,
llvm@lists.linux.dev, linux-hardening@vger.kernel.org,
Abhinav Saxena <xandfury@gmail.com>
Subject: [RFC PATCH 0/5] tty: Add KUnit test framework for TTY drivers
Date: Tue, 26 Aug 2025 16:51:30 -0600 [thread overview]
Message-ID: <20250826-tty-tests-v1-0-e904a817df92@gmail.com> (raw)
This patch series introduces a KUnit testing framework for the TTY
subsystem, enabling deterministic, automated testing of TTY drivers and
core functionality without requiring hardware or userspace interaction.
On an x86_64 build with CONFIG_GCOV enabled, these tests increased
TTY subsystem coverage to approximately 10.6% line coverage and
14.7% function coverage [1].
Problem Statement
-----------------
Testing TTY drivers today requires:
- User-space interaction through device nodes
- Complex setup with ptys or real hardware
- Limited ability to test error paths reliably and deterministically
This series solves these issues by providing in-kernel KUnit tests that
exercise real TTY core paths under controlled, deterministic conditions.
What This Series Provides
-------------------------
1. Reusable test helpers (`tty_test_helpers.h`):
- Minimal (~150 LOC) infrastructure that any TTY driver should be
able to use
- Automatic resource management
- Integrated into core files under KUnit guard, with
`EXPORT_SYMBOL_IF_KUNIT()` to keep the production symbol table
clean
2. Mock TTY driver:
- Demonstrates how drivers can leverage the helpers
- Enables deterministic scenarios without hardware
3. Core TTY tests:
- Validate open/close/read/write/termios paths
- Exercise hangup, resize, and error handling
- Ensure real kernel paths are tested, not mocked stubs
4. ttynull driver tests:
- Validate data sink behavior of the null driver
- Provide a minimal driver contract baseline
5. Optional coverage support:
- GCOV integration for test coverage analysis
Future Work
-----------
With this foundation merged, follow-up work can:
- Add more coverage of TTY core functions
- Enable each TTY driver to maintain its own KUnit suite
- Introduce stress tests and race detection
- Extend to include more tests for other tty drivers:
- UART drivers: test interrupt handling without hardware
- USB serial: validate disconnect and reconnect sequences
- PTY drivers: test resize, flow control, and hangups
- Virtual consoles: test Unicode and input handling
Testing
-------
- All patches pass `checkpatch.pl`
- Verified on x86_64 with:
./tools/testing/kunit/kunit.py run \
--kunitconfig=.kunit/ \
--kunitconfig=drivers/tty/tests/.kunitconfig \
--arch=x86_64
- All tests pass (working around tty_read wrapper in progress)
Feedback welcome! :)
References
----------
[1] Coverage reports: ttytests.haunted2bwanted.me (alt: linux-9ik.pages.dev)
[2] kunit.dev/third_party/kernel/docs/usage.html#testing-static-functions
[3] KUnit: docs.kernel.org/dev-tools/kunit/
[4] TTY driver API: https://docs.kernel.org/driver-api/serial/
[5] Big thanks to LDD3! (Ch18 especially!)
Signed-off-by: Abhinav Saxena <xandfury@gmail.com>
---
Abhinav Saxena (5):
tty: Add KUnit test infrastructure configuration
tty: Add KUnit test helper functions
tty: Add mock TTY driver for KUnit testing
tty: Add KUnit tests for core TTY functionality
tty: Add KUnit tests for ttynull driver
drivers/tty/Kconfig | 9 +
drivers/tty/Makefile | 7 +
drivers/tty/tests/.kunitconfig | 44 ++++
drivers/tty/tests/Kconfig | 44 ++++
drivers/tty/tests/Makefile | 2 +
drivers/tty/tests/test_tty_io_core.c | 249 ++++++++++++++++++++++
drivers/tty/tests/test_ttynull.c | 163 +++++++++++++++
drivers/tty/tests/tty_mock.c | 186 +++++++++++++++++
drivers/tty/tests/tty_mock.h | 34 +++
drivers/tty/tests/tty_test_helpers.c | 387 +++++++++++++++++++++++++++++++++++
drivers/tty/tests/tty_test_helpers.h | 239 +++++++++++++++++++++
drivers/tty/tty_io.c | 4 +
drivers/tty/ttynull.c | 5 +
13 files changed, 1373 insertions(+)
---
base-commit: 8d245acc1e884e89f0808f64d6af3fc91d4903a0
change-id: 20250824-tty-tests-7fcd8b2b093e
Best regards,
--
Abhinav Saxena <xandfury@gmail.com>
next reply other threads:[~2025-08-26 22:51 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-26 22:51 Abhinav Saxena [this message]
2025-08-26 22:51 ` [RFC PATCH 1/5] tty: Add KUnit test infrastructure configuration Abhinav Saxena
2025-08-26 22:51 ` [RFC PATCH 2/5] tty: Add KUnit test helper functions Abhinav Saxena
2025-08-26 22:51 ` [RFC PATCH 3/5] tty: Add mock TTY driver for KUnit testing Abhinav Saxena
2025-08-26 22:51 ` [RFC PATCH 4/5] tty: Add KUnit tests for core TTY functionality Abhinav Saxena
2025-08-26 22:51 ` [RFC PATCH 5/5] tty: Add KUnit tests for ttynull driver Abhinav Saxena
2025-08-31 6:07 ` [RFC PATCH 0/5] tty: Add KUnit test framework for TTY drivers Jiri Slaby
2025-09-03 0:56 ` Abhinav Saxena
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250826-tty-tests-v1-0-e904a817df92@gmail.com \
--to=xandfury@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=jirislaby@kernel.org \
--cc=justinstitt@google.com \
--cc=kees@kernel.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=morbo@google.com \
--cc=nathan@kernel.org \
--cc=nick.desaulniers+lkml@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).