| .. 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 |
| |
| What is KUnit? |
| ============== |
| |
| KUnit is a lightweight unit testing and mocking 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, mocking, spying, and much more. Get started |
| now: :doc:`usage/index` |
| |
| Who is it for? |
| ============== |
| |
| If you work on the Linux kernel, then KUnit is for you. |
| |
| Why KUnit? |
| ========== |
| |
| Aside from KUnit there is no true unit testing framework for the Linux kernel. |
| Autotest and kselftest (and within Google, Kokonut) are sometimes cited as unit |
| testing frameworks; however, they are not by most reasonable definitions of |
| unit tests. |
| |
| A unit test is supposed to test a single unit of code in isolation, hence the |
| name. A unit test should be the finest granularity of testing and as such |
| should allow all possible code paths to be tested in the code under test; this |
| is only possible if the code under test is very small and does not have any |
| external dependencies outside of the test's control like hardware. |
| |
| As far as I know, outside of KUnit, there are no testing frameworks currently |
| available for the kernel that do not require installing the kernel on a test |
| machine or in a VM and all require tests to be written in userspace running on |
| the kernel; this is true for Autotest, kselftest, and Kokonut, disqualifying |
| any of them from being considered unit testing frameworks. |
| |
| KUnit addresses the problem of being 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. |
| |
| 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 |
| - For stable KUnit: |
| - `Usage <third_party/stable_kernel/docs/usage.html>`__ - for a more detailed explanation of KUnit features |
| - `API <third_party/stable_kernel/docs/api>`__ - for the list of KUnit APIs used for testing |
| |
| Where do I get it? |
| ================== |
| |
| - Upstream: https://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest.git/log/?h=next |
| - Stable: https://kunit.googlesource.com/linux/+/kunit/alpha/master |
| |
| Not sure which one you want? Take a look at :doc:`usage/index`. |
| |
| 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`. |