diff options
author | Yuval Peress <peress@google.com> | 2022-11-01 22:48:45 -0600 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-11-02 17:37:38 +0000 |
commit | 41948753c41c3807aab97106e97a5df316349e3a (patch) | |
tree | 5020b4bdf5fd859814c8858a6178a6ff9cc2d085 | |
parent | c9e23182da099df804396e16292b0339ebda8b32 (diff) | |
download | chrome-ec-41948753c41c3807aab97106e97a5df316349e3a.tar.gz |
test: verify battery_outside_charging_temperature()
Allow this function to be externally linked so it can be accessed from
outside the .c file (similar to other patterns that exist in our code
base) and test the various code paths that lead to detecting if the
battery can be charged based on the temperature.
BRANCH=none
BUG=none
TEST=twister
Signed-off-by: Yuval Peress <peress@google.com>
Change-Id: I647ebaf117ef218451912f8fd8622b4deda82b74
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3998265
Reviewed-by: Simon Glass <sjg@chromium.org>
Code-Coverage: Zoss <zoss-cl-coverage@prod.google.com>
-rw-r--r-- | common/charge_state_v2.c | 2 | ||||
-rw-r--r-- | zephyr/test/drivers/common_charger/CMakeLists.txt | 6 | ||||
-rw-r--r-- | zephyr/test/drivers/common_charger/src/test_charge_state_v2.c | 99 |
3 files changed, 105 insertions, 2 deletions
diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c index 728606ef8a..54c49320c6 100644 --- a/common/charge_state_v2.c +++ b/common/charge_state_v2.c @@ -1382,7 +1382,7 @@ struct charge_state_data *charge_get_status(void) } /* Determine if the battery is outside of allowable temperature range */ -static int battery_outside_charging_temperature(void) +int battery_outside_charging_temperature(void) { const struct battery_info *batt_info = battery_get_info(); int batt_temp_c = DECI_KELVIN_TO_CELSIUS(curr.batt.temperature); diff --git a/zephyr/test/drivers/common_charger/CMakeLists.txt b/zephyr/test/drivers/common_charger/CMakeLists.txt index aeb77d3577..58fc3229ef 100644 --- a/zephyr/test/drivers/common_charger/CMakeLists.txt +++ b/zephyr/test/drivers/common_charger/CMakeLists.txt @@ -3,4 +3,8 @@ # found in the LICENSE file. # Add source files -target_sources(app PRIVATE src/test_common_charger.c) +target_sources(app + PRIVATE + src/test_charge_state_v2.c + src/test_common_charger.c +) diff --git a/zephyr/test/drivers/common_charger/src/test_charge_state_v2.c b/zephyr/test/drivers/common_charger/src/test_charge_state_v2.c new file mode 100644 index 0000000000..c4c0838dc5 --- /dev/null +++ b/zephyr/test/drivers/common_charger/src/test_charge_state_v2.c @@ -0,0 +1,99 @@ +/* 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 <zephyr/ztest.h> + +#include "battery.h" +#include "charge_state_v2.h" +#include "math_util.h" +#include "test/drivers/test_state.h" + +int battery_outside_charging_temperature(void); + +struct charge_state_v2_fixture { + struct charge_state_data charge_state_data; +}; + +static void *setup(void) +{ + static struct charge_state_v2_fixture fixture; + + return &fixture; +} + +static void before(void *f) +{ + struct charge_state_v2_fixture *fixture = f; + + fixture->charge_state_data = *charge_get_status(); +} + +static void after(void *f) +{ + struct charge_state_v2_fixture *fixture = f; + + *charge_get_status() = fixture->charge_state_data; +} + +ZTEST_SUITE(charge_state_v2, drivers_predicate_post_main, setup, before, after, + NULL); + +ZTEST(charge_state_v2, test_battery_flag_bad_temperature) +{ + struct charge_state_data *curr = charge_get_status(); + + curr->batt.flags |= BATT_FLAG_BAD_TEMPERATURE; + zassert_ok(battery_outside_charging_temperature()); +} + +ZTEST(charge_state_v2, test_battery_temperature_range) +{ + struct charge_state_data *curr = charge_get_status(); + const struct battery_info *batt_info = battery_get_info(); + + curr->batt.flags &= ~BATT_FLAG_BAD_TEMPERATURE; + + /* Start off without a desired voltage/current */ + curr->batt.desired_voltage = 0; + curr->batt.desired_current = 0; + + /* Temperature is too high */ + curr->batt.temperature = + CELSIUS_TO_DECI_KELVIN(batt_info->start_charging_max_c + 1); + zassert_equal(1, battery_outside_charging_temperature()); + + /* Temperature is too low */ + curr->batt.temperature = + CELSIUS_TO_DECI_KELVIN(batt_info->start_charging_min_c - 1); + zassert_equal(1, battery_outside_charging_temperature()); + + /* Temperature is just right */ + curr->batt.temperature = + CELSIUS_TO_DECI_KELVIN((batt_info->start_charging_max_c + + batt_info->start_charging_min_c) / + 2); + zassert_ok(battery_outside_charging_temperature()); + + /* Set an arbitrary desired current */ + curr->batt.desired_current = 3; + + /* Temperature is too high */ + curr->batt.temperature = + CELSIUS_TO_DECI_KELVIN(batt_info->charging_max_c + 1); + zassert_equal(1, battery_outside_charging_temperature()); + + /* Set an arbitrary desired voltage */ + curr->batt.desired_voltage = 5; + + /* Temperature is too low */ + curr->batt.temperature = + CELSIUS_TO_DECI_KELVIN(batt_info->charging_min_c - 1); + zassert_equal(1, battery_outside_charging_temperature()); + + /* Temperature is just right */ + curr->batt.temperature = CELSIUS_TO_DECI_KELVIN( + (batt_info->charging_max_c + batt_info->charging_min_c) / 2); + zassert_ok(battery_outside_charging_temperature()); +} |