We don't yet have any boards upstream that make use of the progress notifier, but at least have some tests, so we know it's working. Signed-off-by: Ahmad Fatoum <ahmad@xxxxxx> --- lib/Kconfig | 2 +- test/kconfig/base.cfg | 1 + test/kconfig/full.cfg | 1 + test/self/Kconfig | 4 ++ test/self/Makefile | 1 + test/self/progress-notifier.c | 79 +++++++++++++++++++++++++++++++++++ 6 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 test/self/progress-notifier.c diff --git a/lib/Kconfig b/lib/Kconfig index 922710e106b3..ea6de76a22f9 100644 --- a/lib/Kconfig +++ b/lib/Kconfig @@ -155,7 +155,7 @@ source "lib/logo/Kconfig" source "lib/bootstrap/Kconfig" config PROGRESS_NOTIFIER - bool + bool "Progress Notifier" if COMPILE_TEST help This is selected by boards that register a notifier to visualize progress, like blinking a LED during an update. diff --git a/test/kconfig/base.cfg b/test/kconfig/base.cfg index 6a9f68349816..80b9c68f023b 100644 --- a/test/kconfig/base.cfg +++ b/test/kconfig/base.cfg @@ -1,3 +1,4 @@ +CONFIG_COMPILE_TEST=y CONFIG_TEST=y CONFIG_SELFTEST=y CONFIG_CMD_SELFTEST=y diff --git a/test/kconfig/full.cfg b/test/kconfig/full.cfg index 39275768ea1f..547100bacc39 100644 --- a/test/kconfig/full.cfg +++ b/test/kconfig/full.cfg @@ -1,2 +1,3 @@ CONFIG_BTHREAD=y CONFIG_CMD_BTHREAD=y +CONFIG_PROGRESS_NOTIFIER=y diff --git a/test/self/Kconfig b/test/self/Kconfig index 73dc6c7b4f03..dfaa32dda009 100644 --- a/test/self/Kconfig +++ b/test/self/Kconfig @@ -28,6 +28,7 @@ config SELFTEST_AUTORUN config SELFTEST_ENABLE_ALL bool "Enable all self-tests" select SELFTEST_PRINTF + select SELFTEST_PROGRESS_NOTIFIER help Selects all self-tests compatible with current configuration @@ -36,4 +37,7 @@ config SELFTEST_PRINTF help Tests barebox vsnprintf() functionality +config SELFTEST_PROGRESS_NOTIFIER + bool "progress notifier selftest" + endif diff --git a/test/self/Makefile b/test/self/Makefile index b4aa49d6f817..e78ccc3cfb90 100644 --- a/test/self/Makefile +++ b/test/self/Makefile @@ -2,3 +2,4 @@ obj-$(CONFIG_SELFTEST) += core.o obj-$(CONFIG_SELFTEST_PRINTF) += printf.o +obj-$(CONFIG_SELFTEST_PROGRESS_NOTIFIER) += progress-notifier.o diff --git a/test/self/progress-notifier.c b/test/self/progress-notifier.c new file mode 100644 index 000000000000..af65b0900e42 --- /dev/null +++ b/test/self/progress-notifier.c @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include <common.h> +#include <bselftest.h> +#include <progress.h> + +BSELFTEST_GLOBALS(); + +static void __ok(bool cond, const char *func, int line) +{ + total_tests++; + if (!cond) { + failed_tests++; + printf("%s:%d: assertion failure\n", func, line); + } +} + +#define ok(cond) \ + __ok(cond, __func__, __LINE__) + +static unsigned long stage; +static const void *prefix; +static int counter; + +static int dummy_notifier(struct notifier_block *r, unsigned long _stage, void *_prefix) +{ + prefix = _prefix; + stage = _stage; + counter++; + return 0; +} + +static struct notifier_block dummy_nb = { + .notifier_call = dummy_notifier +}; + +static void test_dummy_notifier(void) +{ + const char *arg = "ARGUMENT"; + int local_counter = 0; + + stage = 0; + prefix = NULL; + counter = 0; + + progress_register_client(&dummy_nb); + ok(stage == 0); + ok(prefix == NULL); + ok(counter == local_counter); + progress_notifier_call_chain(1, arg); + + if (IS_ENABLED(CONFIG_PROGRESS_NOTIFIER)) { + ok(stage == 1); + ok(prefix == arg); + ok(counter == ++local_counter); + progress_notifier_call_chain(0, NULL); + local_counter++; + } else { + total_tests += 2; + skipped_tests += 2; + } + + ok(stage == 0); + ok(prefix == NULL || *(const char *)prefix == '\0'); + ok(counter == local_counter); + progress_unregister_client(&dummy_nb); + + ok(stage == 0); + ok(prefix == NULL || *(const char *)prefix == '\0'); + ok(counter == local_counter); +} + +static void test_notifier(void) +{ + test_dummy_notifier(); +} +bselftest(core, test_notifier); -- 2.32.0.rc0 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox