aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authoreldritch horrors <pennae@lix.systems>2024-03-04 03:46:48 +0100
committereldritch horrors <pennae@lix.systems>2024-03-04 04:36:14 +0100
commitf17e7b185597715049fa7a12e6a0512ef66801b6 (patch)
treec7a59f65cbfd674ae93ba0a350fdeb9aec145bee /doc
parent79dd9efe384cd70e04fe3fd3ee03c0b8d5ee8182 (diff)
Merge pull request #8923 from obsidiansystems/test-proto
Unit test some worker protocol serializers (cherry picked from commit c6faef61a6f31c71146aee5d88168e861df9a22a) Change-Id: I99e36f5f17eb7642211a4e42a16b143424f164b4
Diffstat (limited to 'doc')
-rw-r--r--doc/manual/src/contributing/testing.md64
1 files changed, 60 insertions, 4 deletions
diff --git a/doc/manual/src/contributing/testing.md b/doc/manual/src/contributing/testing.md
index 1b15d12b1..6f954ac68 100644
--- a/doc/manual/src/contributing/testing.md
+++ b/doc/manual/src/contributing/testing.md
@@ -2,10 +2,48 @@
## Unit-tests
-The unit-tests for each Nix library (`libexpr`, `libstore`, etc..) are defined
-under `tests/unit/{library_name}/tests` using the
-[googletest](https://google.github.io/googletest/) and
-[rapidcheck](https://github.com/emil-e/rapidcheck) frameworks.
+The unit tests are defined using the [googletest] and [rapidcheck] frameworks.
+
+[googletest]: https://google.github.io/googletest/
+[rapidcheck]: https://github.com/emil-e/rapidcheck
+
+### Source and header layout
+
+> An example of some files, demonstrating much of what is described below
+>
+> ```
+> src
+> ├── libexpr
+> │ ├── value/context.hh
+> │ ├── value/context.cc
+> │ │
+> │ …
+> └── tests
+> │ ├── value/context.hh
+> │ ├── value/context.cc
+> │ │
+> │ …
+> │
+> ├── unit-test-data
+> │ ├── libstore
+> │ │ ├── worker-protocol/content-address.bin
+> │ │ …
+> │ …
+> …
+> ```
+
+The unit tests for each Nix library (`libnixexpr`, `libnixstore`, etc..) live inside a directory `src/${library_shortname}/tests` within the directory for the library (`src/${library_shortname}`).
+
+The data is in `unit-test-data`, with one subdir per library, with the same name as where the code goes.
+For example, `libnixstore` code is in `src/libstore`, and its test data is in `unit-test-data/libstore`.
+The path to the `unit-test-data` directory is passed to the unit test executable with the environment variable `_NIX_TEST_UNIT_DATA`.
+
+> **Note**
+> Due to the way googletest works, downstream unit test executables will actually include and re-run upstream library tests.
+> Therefore it is important that the same value for `_NIX_TEST_UNIT_DATA` be used with the tests for each library.
+> That is why we have the test data nested within a single `unit-test-data` directory.
+
+### Running tests
You can run the whole testsuite with `make check`, or the tests for a specific component with `make libfoo-tests_RUN`.
Finer-grained filtering is also possible using the [--gtest_filter](https://google.github.io/googletest/advanced.html#running-a-subset-of-the-tests) command-line option, or the `GTEST_FILTER` environment variable.
@@ -22,6 +60,24 @@ It is important that these testing libraries don't contain any actual tests them
On some platforms they would be run as part of every test executable that uses them, which is redundant.
On other platforms they wouldn't be run at all.
+### Characterization testing
+
+See [below](#characterization-testing-1) for a broader discussion of characterization testing.
+
+Like with the functional characterization, `_NIX_TEST_ACCEPT=1` is also used.
+For example:
+```shell-session
+$ _NIX_TEST_ACCEPT=1 make libstore-tests-exe_RUN
+...
+[ SKIPPED ] WorkerProtoTest.string_read
+[ SKIPPED ] WorkerProtoTest.string_write
+[ SKIPPED ] WorkerProtoTest.storePath_read
+[ SKIPPED ] WorkerProtoTest.storePath_write
+...
+```
+will regenerate the "golden master" expected result for the `libnixstore` characterization tests.
+The characterization tests will mark themselves "skipped" since they regenerated the expected result instead of actually testing anything.
+
## Functional tests
The functional tests reside under the `tests/functional` directory and are listed in `tests/functional/local.mk`.