diff options
Diffstat (limited to 'common/mock/README.md')
-rw-r--r-- | common/mock/README.md | 60 |
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 |