From: Ahmad Fatoum <ahmad@a3f.at>
To: barebox@lists.infradead.org
Cc: Ahmad Fatoum <ahmad@a3f.at>
Subject: [PATCH] test: self: add tests for progress notifier
Date: Sat, 19 Jun 2021 07:40:48 +0200 [thread overview]
Message-ID: <20210619054048.498826-1-ahmad@a3f.at> (raw)
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@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
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next reply other threads:[~2021-06-19 5:42 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-19 5:40 Ahmad Fatoum [this message]
2021-06-28 12:51 ` Sascha Hauer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210619054048.498826-1-ahmad@a3f.at \
--to=ahmad@a3f.at \
--cc=barebox@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox