diff options
author | Tristan Honscheid <honscheid@google.com> | 2022-11-02 13:00:25 -0600 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-11-09 06:03:54 +0000 |
commit | c35cfd0ad41d7feb840a0e45c799f5fc3468976d (patch) | |
tree | 55a8bd1aeb2ca7434787e0031f865d433d6b9e97 | |
parent | 8719017bc82deb7cbce218057c516f878bdf9dc7 (diff) | |
download | chrome-ec-c35cfd0ad41d7feb840a0e45c799f5fc3468976d.tar.gz |
zephyr: test: common charger code charger_enable_otg_power
Add some infrastructure for mocking out the charger driver functions to
simplify testing the remainder of `common/charger.c` and use it to test
charger_enable_otg_power()
BUG=None
BRANCH=None
TEST=./twister
Signed-off-by: Tristan Honscheid <honscheid@google.com>
Change-Id: I61b74c4cd2f8b7303b37c78cff0156db03c6191e
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4000827
Reviewed-by: Jeremy Bettis <jbettis@chromium.org>
Code-Coverage: Zoss <zoss-cl-coverage@prod.google.com>
-rw-r--r-- | zephyr/test/drivers/common_charger/CMakeLists.txt | 1 | ||||
-rw-r--r-- | zephyr/test/drivers/common_charger/src/test_common_charger_mocked.c | 98 | ||||
-rw-r--r-- | zephyr/test/drivers/testcase.yaml | 1 |
3 files changed, 100 insertions, 0 deletions
diff --git a/zephyr/test/drivers/common_charger/CMakeLists.txt b/zephyr/test/drivers/common_charger/CMakeLists.txt index 58fc3229ef..63da1783f1 100644 --- a/zephyr/test/drivers/common_charger/CMakeLists.txt +++ b/zephyr/test/drivers/common_charger/CMakeLists.txt @@ -7,4 +7,5 @@ target_sources(app PRIVATE src/test_charge_state_v2.c src/test_common_charger.c + src/test_common_charger_mocked.c ) diff --git a/zephyr/test/drivers/common_charger/src/test_common_charger_mocked.c b/zephyr/test/drivers/common_charger/src/test_common_charger_mocked.c new file mode 100644 index 0000000000..4c225dbffd --- /dev/null +++ b/zephyr/test/drivers/common_charger/src/test_common_charger_mocked.c @@ -0,0 +1,98 @@ +/* Copyright 2022 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include <string.h> +#include <zephyr/fff.h> +#include <zephyr/kernel.h> +#include <zephyr/ztest.h> +#include <zephyr/ztest_assert.h> + +#include "charger.h" +#include "test/drivers/charger_utils.h" +#include "test/drivers/test_state.h" + +/* This test suite only works if the chg_chips array is not const. */ +BUILD_ASSERT(IS_ENABLED(CONFIG_PLATFORM_EC_CHARGER_RUNTIME_CONFIG), + "chg_chips array cannot be const."); + +/** Index of the charger chip we are overriding / working with. */ +#define CHG_NUM (0) + +/* FFF fakes for driver functions. These get assigned to members of the + * charger_drv struct + */ +FAKE_VALUE_FUNC(enum ec_error_list, enable_otg_power, int, int); + +struct common_charger_mocked_driver_fixture { + /* The original driver pointer that gets restored after the tests */ + const struct charger_drv *saved_driver_ptr; + /* Mock driver that gets substituted */ + struct charger_drv mock_driver; +}; + +ZTEST(common_charger_mocked_driver, test_charger_enable_otg_power__invalid) +{ + /* charger number out of bounds */ + zassert_equal(EC_ERROR_INVAL, charger_enable_otg_power(-1, 0)); + zassert_equal(EC_ERROR_INVAL, charger_enable_otg_power(INT_MAX, 0)); +} + +ZTEST(common_charger_mocked_driver, test_charger_enable_otg_power__unimpl) +{ + /* enable_otg_power is NULL */ + zassert_equal(EC_ERROR_UNIMPLEMENTED, + charger_enable_otg_power(CHG_NUM, 1)); +} + +ZTEST_F(common_charger_mocked_driver, test_charger_enable_otg_power) +{ + fixture->mock_driver.enable_otg_power = enable_otg_power; + enable_otg_power_fake.return_val = 123; + + zassert_equal(enable_otg_power_fake.return_val, + charger_enable_otg_power(CHG_NUM, 1)); + + zassert_equal(1, enable_otg_power_fake.call_count); + zassert_equal(CHG_NUM, enable_otg_power_fake.arg0_history[0]); + zassert_equal(1, enable_otg_power_fake.arg1_history[0]); +} + +static void *setup(void) +{ + static struct common_charger_mocked_driver_fixture f; + + zassert_true(board_get_charger_chip_count() > 0, + "Need at least one charger chip present."); + + /* Back up the current charger driver and substitute our own */ + f.saved_driver_ptr = chg_chips[CHG_NUM].drv; + chg_chips[CHG_NUM].drv = &f.mock_driver; + + return &f; +} + +static void reset(void *data) +{ + struct common_charger_mocked_driver_fixture *f = data; + + /* Reset the mock driver's function pointer table. Each tests adds these + * as-needed + */ + f->mock_driver = (struct charger_drv){ 0 }; + + /* Reset fakes */ + RESET_FAKE(enable_otg_power); +} + +static void teardown(void *data) +{ + struct common_charger_mocked_driver_fixture *f = data; + + /* Restore the original driver */ + chg_chips[CHG_NUM].drv = f->saved_driver_ptr; +} + +ZTEST_SUITE(common_charger_mocked_driver, drivers_predicate_post_main, setup, + reset, reset, teardown); diff --git a/zephyr/test/drivers/testcase.yaml b/zephyr/test/drivers/testcase.yaml index a6c250c361..4eb41bc6e3 100644 --- a/zephyr/test/drivers/testcase.yaml +++ b/zephyr/test/drivers/testcase.yaml @@ -58,6 +58,7 @@ tests: # Set to focus testing for Herobrine # Config is y only in nissa - CONFIG_PLATFORM_EC_CHARGER_RAA489000=n + - CONFIG_PLATFORM_EC_CHARGER_RUNTIME_CONFIG=y drivers.chargesplash: timeout: 240 extra_configs: |