[PATCH] test: self: add tests for progress notifier

Ahmad Fatoum ahmad at a3f.at
Fri Jun 18 22:40:48 PDT 2021


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 at a3f.at>
---
 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




More information about the barebox mailing list