| ============= |
| Getting KUnit |
| ============= |
| |
| In order to use KUnit, you must first determine which branch you would like to |
| use. What do we mean by that? We are in the process of upstreaming KUnit into |
| the Linux kernel, so that means we have code under development that is not in |
| the upstream repository or otherwise doesn't match what is currently upstream. |
| |
| For more information on why there are multiple versions of KUnit, see |
| :ref:`why-multiple-versions`. |
| |
| For information on deciding which version you should use see |
| :ref:`which-version`. |
| |
| For the actual URL you need, see |
| :ref:`download-links` |
| |
| .. _why-multiple-versions: |
| |
| Why are there multiple versions? |
| ================================ |
| |
| Ideally, upstreaming code to the Linux kernel would be fast, we would be able to |
| develop features entirely on LKML, no one would use code that had not yet been |
| accepted upstream, and everything would have been done this way from the start. |
| Unfortunately, we do not live in a perfect world, and consequently none of these |
| are true. |
| |
| This means that there are some features that we've developed which aren't yet |
| going upstream. We've developed these in an *experimental* branch. This is |
| basically a staging branch for features we're still actively experimenting with, |
| or which depend on code which isn't yet upstream. |
| |
| |
| But wait, I see more than two branches! |
| --------------------------------------- |
| |
| For the upstream version, just use torvalds/master. Our *experimental* branch is |
| hosted at https://kunit.googlesource.com/linux/+/kunit/alpha/master. |
| |
| We will be periodically replacing the *experimental* branch with one based on |
| newer upstream kernels, in order to minimise the divergence between |
| *experimental* and upstream. For more details on how this will work, see: |
| https://lore.kernel.org/linux-kselftest/20190924000503.GA97201@google.com/T/#e73eab088e4791c234bf13156cc276ad15c8376de |
| |
| .. _which-version: |
| |
| Which version should I use? |
| =========================== |
| |
| As for which branch you should use, upstream should be generally preferred (just |
| as upstreaming your own code should be generally preferred); nevertheless, there |
| are a lot of features that are not upstream yet, and will not be upstream for |
| some time (possibly more than a year), if you need these features for your tests |
| then you have no choice other than to use the *experimental* branch. |
| |
| What features are available upstream? |
| ------------------------------------- |
| |
| - Basic test structure for defining test cases and test suites |
| - Basic expectations and assertions |
| - KUnit managed resources |
| - Error reporting |
| |
| What features are not upstream yet? |
| ----------------------------------- |
| |
| - Class mocking |
| - Function mocking |
| - Hardware/platform faking |
| - Error recovery |
| |
| .. _download-links: |
| |
| Where are these versions? |
| ========================= |
| |
| Upstream |
| -------- |
| |
| KUnit can be found in Linux 5.5 and newer. |
| |
| - Code: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/ |
| - `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 |
| - kunitconfig file: https://kunit.googlesource.com/kunitconfig/+/refs/heads/master/kunitconfig |
| |
| The KUnit code itself is primarily found in the `lib/kunit <https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/lib/kunit>`__ |
| directory. |
| |
| Experimental |
| ------------ |
| |
| The *experimental* branch is stored in a Google-hosted gerrit instance. Going |
| forward, there will be a set of versioned *experimental* branches, of which only |
| the latest will be actively supported. Until this is available, however, there |
| is a historic *kunit/alpha/master* branch containing our experimental code. |
| |
| - Code: https://kunit.googlesource.com/linux/+/kunit/alpha/master. |
| - `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 |
| - kunitconfig file: https://kunit.googlesource.com/kunitconfig/+/refs/heads/kunit/alpha/master/kunitconfig |