summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuval Peress <peress@google.com>2022-11-01 22:48:45 -0600
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-11-02 17:37:38 +0000
commit41948753c41c3807aab97106e97a5df316349e3a (patch)
tree5020b4bdf5fd859814c8858a6178a6ff9cc2d085
parentc9e23182da099df804396e16292b0339ebda8b32 (diff)
downloadchrome-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.c2
-rw-r--r--zephyr/test/drivers/common_charger/CMakeLists.txt6
-rw-r--r--zephyr/test/drivers/common_charger/src/test_charge_state_v2.c99
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());
+}