summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Honscheid <honscheid@google.com>2022-11-02 13:00:25 -0600
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-11-09 06:03:54 +0000
commitc35cfd0ad41d7feb840a0e45c799f5fc3468976d (patch)
tree55a8bd1aeb2ca7434787e0031f865d433d6b9e97
parent8719017bc82deb7cbce218057c516f878bdf9dc7 (diff)
downloadchrome-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.txt1
-rw-r--r--zephyr/test/drivers/common_charger/src/test_common_charger_mocked.c98
-rw-r--r--zephyr/test/drivers/testcase.yaml1
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: