From 31f62bdd79472c32d52408956d5c82e9991ca425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 23 Jan 2023 15:44:33 +0100 Subject: [PATCH] test-sleep: add a very simple test that prints battery suspend estimates --- src/shared/sleep-config.c | 2 +- src/shared/sleep-config.h | 1 + src/test/test-sleep.c | 26 ++++++++++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c index 84082214ae..d7581960f9 100644 --- a/src/shared/sleep-config.c +++ b/src/shared/sleep-config.c @@ -150,7 +150,7 @@ static int battery_enumerator_new(sd_device_enumerator **ret) { return 0; } -static int get_capacity_by_name(Hashmap *capacities_by_name, const char *name) { +int get_capacity_by_name(Hashmap *capacities_by_name, const char *name) { void *p; assert(capacities_by_name); diff --git a/src/shared/sleep-config.h b/src/shared/sleep-config.h index 6645c3e596..af6947d982 100644 --- a/src/shared/sleep-config.h +++ b/src/shared/sleep-config.h @@ -60,6 +60,7 @@ int can_sleep_state(char **types); int battery_is_low(void); int get_total_suspend_interval(Hashmap *last_capacity, usec_t *ret); int fetch_batteries_capacity_by_name(Hashmap **ret_current_capacity); +int get_capacity_by_name(Hashmap *capacities_by_name, const char *name); int estimate_battery_discharge_rate_per_hour( Hashmap *last_capacity, Hashmap *current_capacity, diff --git a/src/test/test-sleep.c b/src/test/test-sleep.c index abaae43e72..2290e7c302 100644 --- a/src/test/test-sleep.c +++ b/src/test/test-sleep.c @@ -117,6 +117,32 @@ TEST(sleep) { log_info("Suspend-then-Hibernate configured and possible: %s", r >= 0 ? yes_no(r) : STRERROR(r)); } +TEST(fetch_batteries_capacity_by_name) { + _cleanup_hashmap_free_ Hashmap *capacity = NULL; + int r; + + assert_se(fetch_batteries_capacity_by_name(&capacity) >= 0); + log_debug("fetch_batteries_capacity_by_name: %u entries", hashmap_size(capacity)); + + const char *name; + void *cap; + HASHMAP_FOREACH_KEY(cap, name, capacity) { + assert(cap); /* Anything non-null is fine. */ + log_info("Battery %s: capacity = %i", name, get_capacity_by_name(capacity, name)); + } + + for (int i = 0; i < 5; i++) { + usec_t interval; + + sleep(1); + + r = get_total_suspend_interval(capacity, &interval); + assert_se(r >= 0 || r == -ENOENT); + log_info("%d: get_total_suspend_interval: %s", i, + r < 0 ? STRERROR(r) : FORMAT_TIMESPAN(interval, USEC_PER_SEC)); + } +} + static int intro(void) { if (getuid() != 0) log_warning("This program is unlikely to work for unprivileged users");