.. KUnit documentation master file, created by
   sphinx-quickstart on Mon Aug 26 16:07:42 2019.
   You can adapt this file completely to your liking, but it should at least
   contain the root `toctree` directive.

=====
KUnit
=====

.. toctree::
   :maxdepth: 2
   :caption: Contents:

   usage/index
   development/index
   third_party/kernel/index.rst
   third_party/stable_kernel/index.rst
   mocking
   press

What is KUnit?
==============

KUnit is a lightweight unit testing framework for the Linux kernel.
These tests are able to be run locally on a developer’s workstation without a
VM or special hardware.

KUnit is heavily inspired by JUnit, Python's unittest.mock, and
Googletest/Googlemock for C++. KUnit provides facilities for defining unit test
cases, grouping related test cases into test suites, providing common
infrastructure for running tests, and more.

Get started now: :doc:`usage/index`

Who is it for?
==============

If you work on the Linux kernel, then KUnit is for you.

Why unit test the kernel?
=========================

The first question is, "why write unit tests in the first place?"

A unit test is a test focused on testing a small "unit" of code. This is
usually on the level of a few functions at most. Unit tests try to avoid
external dependencies like hardware and/or stub them out where possible.

This ideally makes unit tests more stable, faster, and easier to debug when
they fail.

In-kernel testing
-----------------

.. note::
	In our case, "unit test" implies in-kernel test code. It's not really possible
	to be a "unit test" if you're relying on a kernel working enough to have a
	functional userspace on top of it.

For internal libraries (e.g. ``include/linux/list.h``), there's no good way to
test from userspace. It's *far* easier to write in-kernel code to test these.
That are some tests that make this work, but if you're starting from scratch,
just use KUnit.

For code with a user facing component, you'll want some tests in userspace.
But it can be useful to have unit tests as well. For example, it can be hard to
trigger certain code paths from userspace, particularly error paths.
Furthermore, it's probably much faster and more hermetic to build and run the
tests under KUnit instead of booting a machine and waiting for all the needed
userspace processes to come up.

Why KUnit?
==========

KUnit provides a library to help making writing tests easy: including making
assertions, setting up and cleaning up test resources, and more.
It also provides a `python script <third_party/kernel/docs/kunit-tool.html>`__
to make building and running tests easy.

kselftest has a way of writing unit tests as kernel modules via the helpers in
``tools/testing/selftests/kselftest_module.h``. But this requires more
boilerplate scattered across several files and potentially several directories.

UML
---

KUnit is able to run tests without needing a
virtual machine or actual hardware with User Mode Linux. User Mode Linux is a
Linux architecture, like ARM or x86; however, unlike other architectures it
compiles to a standalone program that can be run like any other program
directly inside of a host operating system; to be clear, it does not require
any virtualization support; it is just a regular program. User Mode Linux is
fast: on my desktop it boots to init process in under a second.

The provided tooling (``tools/testing/kunit/kunit.py``) mainly works with UML,
but you can use KUnit manually on different architectures, if wanted. See `here
<third_party/kernel/docs/start.html>`__ for more details.

How do I use it?
================

- :doc:`usage/index` - for new users of KUnit
- For upstream KUnit:
  - `Usage <third_party/kernel/docs/usage.html>`__ - for a more detailed explanation of KUnit features
  - `API <third_party/kernel/docs/api>`__ - for the list of KUnit APIs used for testing

Where do I get it?
==================

- Upstream: https://www.kernel.org/ (version 5.5 or later)
- Deprecated version: https://kunit.googlesource.com/linux/+/kunit/alpha/master

Connect with us
===============

- Mailing List: kunit-dev@googlegroups.com
- Google Groups (web interface for above): https://groups.google.com/forum/#!forum/kunit-dev
- IRC: #kunit on oftc.net
- Riot: `#kunit:matrix.org <https://riot.im/app/#/room/#_oftc_#kunit:matrix.org>`_

Contributing
============

If you want to contribute to KUnit in the Linux kernel (which is just the same
as contributing to the Linux kernel, please see `the Linux kernel's guide on
contributing
<https://www.kernel.org/doc/html/latest/#introduction-to-kernel-development>`_.

For other KUnit repositories (CI/CD, vim plugin, etc), please see
:download:`CONTRIBUTING.md <CONTRIBUTING.md>`.

In all cases, you will also want to take a look at :doc:`development/index`.
