diff options
author | Aaron Massey <aaronmassey@google.com> | 2022-10-13 13:26:16 -0600 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-10-14 21:20:33 +0000 |
commit | 2c78ade6deabe07143840e01e97e2d2db09890e5 (patch) | |
tree | 9196b50932ea014dbdd5e0b2637913599aa917ee | |
parent | 9997063cc4b98a9563a9ede8084c729cd2ae8af1 (diff) | |
download | chrome-ec-2c78ade6deabe07143840e01e97e2d2db09890e5.tar.gz |
test: host_sleep.c sleep_set_notify
Add a test that verifies behavior from sleep_set_notify and correspondly
sleep_notify_transition.
Scenarios:
* Setting notify state and sleep_notify_transition can fire hook
* Setting notify state and sleep_notify_transition clears notify state.
* sleep_notify_transition can start a hook with NONE sleep notify state
Also conducted two small refactor fixes:
* Made privately used variable static
* Changed an int type to how it's actually used (enum sleep_notify_type)
BRANCH=none
BUG=b:252887178
TEST=twister -s zephyr/test/drivers/drivers.power_host_sleep
Signed-off-by: Aaron Massey <aaronmassey@google.com>
Change-Id: I9d63d1377359035b316ac6aa5de87376b3bb203f
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3953317
Reviewed-by: Jack Rosenthal <jrosenth@chromium.org>
Code-Coverage: Zoss <zoss-cl-coverage@prod.google.com>
-rw-r--r-- | include/power.h | 4 | ||||
-rw-r--r-- | power/host_sleep.c | 4 | ||||
-rw-r--r-- | zephyr/test/drivers/power_host_sleep/src/test_power_host_sleep.c | 41 |
3 files changed, 45 insertions, 4 deletions
diff --git a/include/power.h b/include/power.h index 461e69748b..9ba4515a4c 100644 --- a/include/power.h +++ b/include/power.h @@ -304,12 +304,12 @@ enum sleep_notify_type { void sleep_set_notify(enum sleep_notify_type notify); /** - * Notify the given hook is the sleep notify is matched. + * Notify the given hook if the sleep notify is matched. * * @param check_state: The sleep notify to check. * @param hook_id: The hook to notify. */ -void sleep_notify_transition(int check_state, int hook_id); +void sleep_notify_transition(enum sleep_notify_type check_state, int hook_id); /** * Called during the suspend transition, to increase the transition counter. diff --git a/power/host_sleep.c b/power/host_sleep.c index da7189083a..b97fb904c1 100644 --- a/power/host_sleep.c +++ b/power/host_sleep.c @@ -85,7 +85,7 @@ void power_set_host_sleep_state(enum host_sleep_event state) } /* Flag to notify listeners about suspend/resume events. */ -enum sleep_notify_type sleep_notify = SLEEP_NOTIFY_NONE; +static enum sleep_notify_type sleep_notify = SLEEP_NOTIFY_NONE; /* * Note: the following sleep_ functions do not get called in the S3 path on @@ -96,7 +96,7 @@ void sleep_set_notify(enum sleep_notify_type notify) sleep_notify = notify; } -void sleep_notify_transition(int check_state, int hook_id) +void sleep_notify_transition(enum sleep_notify_type check_state, int hook_id) { if (sleep_notify != check_state) return; diff --git a/zephyr/test/drivers/power_host_sleep/src/test_power_host_sleep.c b/zephyr/test/drivers/power_host_sleep/src/test_power_host_sleep.c index a30f4c77b2..2ff7b64e9e 100644 --- a/zephyr/test/drivers/power_host_sleep/src/test_power_host_sleep.c +++ b/zephyr/test/drivers/power_host_sleep/src/test_power_host_sleep.c @@ -8,6 +8,7 @@ #include <zephyr/ztest_assert.h> #include "ec_commands.h" +#include "hooks.h" #include "host_command.h" #include "power.h" #include "test/drivers/test_mocks.h" @@ -215,5 +216,45 @@ ZTEST(power_host_sleep, test_sleep_start_suspend_infinite_timeout) zassert_equal(power_board_handle_sleep_hang_fake.call_count, 0); } +/* Only used in test_sleep_set_notify */ +static bool _test_host_sleep_hook_called; + +static void _test_sleep_notify_hook(void) +{ + _test_host_sleep_hook_called = true; +} +DECLARE_HOOK(HOOK_TEST_1, _test_sleep_notify_hook, HOOK_PRIO_DEFAULT); + +ZTEST(power_host_sleep, test_sleep_set_notify) +{ + /* Init as none */ + sleep_set_notify(SLEEP_NOTIFY_NONE); + + /* Verify hook may be notified for a specific NOTIFY state */ + _test_host_sleep_hook_called = false; + sleep_set_notify(SLEEP_NOTIFY_SUSPEND); + sleep_notify_transition(SLEEP_NOTIFY_SUSPEND, HOOK_TEST_1); + k_sleep(K_SECONDS(1)); + + zassert_true(_test_host_sleep_hook_called); + + /* Verify NOTIFY state is reset after firing hook */ + _test_host_sleep_hook_called = false; + sleep_notify_transition(SLEEP_NOTIFY_SUSPEND, HOOK_TEST_1); + k_sleep(K_SECONDS(1)); + + zassert_false(_test_host_sleep_hook_called); + + /* + * Verify that SLEEP_NOTIFY_NONE is a potential hook state to fire + * TODO(b/253480505) Should this really be allowed? + */ + _test_host_sleep_hook_called = false; + sleep_notify_transition(SLEEP_NOTIFY_NONE, HOOK_TEST_1); + k_sleep(K_SECONDS(1)); + + zassert_true(_test_host_sleep_hook_called); +} + ZTEST_SUITE(power_host_sleep, drivers_predicate_post_main, NULL, power_host_sleep_before_after, power_host_sleep_before_after, NULL); |