coreboot-libre-fam15h-rdimm/3rdparty/chromeec/common/mock/README.md

1.9 KiB

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 and referenced from unit tests and fuzzers' .mocklist file.

Creating a new mock

  • Add the mock source to common/mock and the optional header file to 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 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.

Example line from common/mock/build.mk:

# 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:

/* 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(FPSENSOR)

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:

#include "mock/rollback_mock.h"

void somefunc() {
	mock_ctrl_rollback.get_secret_fail = true;
}