summaryrefslogtreecommitdiff
path: root/common/mock/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'common/mock/README.md')
-rw-r--r--common/mock/README.md60
1 files changed, 60 insertions, 0 deletions
diff --git a/common/mock/README.md b/common/mock/README.md
new file mode 100644
index 0000000000..e1962651a6
--- /dev/null
+++ b/common/mock/README.md
@@ -0,0 +1,60 @@
+# Common Mocks
+This directory holds mock implementations for use in fuzzers and tests.
+
+Each mock is given some friendly build name, like ROLLBACK or FP_SENSOR.
+This name is defined in [common/mock/build.mk](build.mk) and referenced
+from unit tests and fuzzers' `.mocklist` file.
+
+## Creating a new mock
+
+* Add the mock source to [common/mock](/common/mock) and the
+ optional header file to [include/mock](/include/mock).
+ Header files are only necessary if you want to expose additional
+ mock control functions/variables.
+* Add an new entry in [common/mock/build.mk](build.mk)
+ that is conditioned on your mock's name.
+
+If a unit test or fuzzer requests this mock, the build system will
+set the variable `HAS_MOCK_<BUILD_NAME>` to `y` at build time.
+This variable is used to conditionally include the the mock source
+in [common/mock/build.mk](build.mk).
+
+Example line from [common/mock/build.mk](build.mk):
+
+```make
+# Mocks
+mock-$(HAS_MOCK_ROLLBACK) += mock/rollback_mock.o
+```
+
+## Using a mock
+Unit tests and fuzzers can request a particular mock by adding an entry to
+their `.mocklist` file. The mocklist file is similar to a `.tasklist`
+file, where it is named according to the test/fuzz's name followed by
+`.mocklist`, like `fpsensor.mocklist`.
+The mocklist file is optional, so you may need to create one.
+
+Example `.mocklist`:
+
+```c
+/* Copyright 2019 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+ #define CONFIG_TEST_MOCK_LIST \
+ MOCK(ROLLBACK) \
+ MOCK(FP_SENSOR)
+```
+
+If you need additional mock control functionality, you may need to include
+the mock's header file, which is prepended with `mock/`.
+
+For example, to control the return values of the rollback mock:
+
+```c
+#include "mock/rollback_mock.h"
+
+void somefunc() {
+ mock_ctrl_rollback.get_secret_fail = true;
+}
+``` \ No newline at end of file