From: Jakub Kicinski <kuba@kernel.org>
To: shuah@kernel.org, keescook@chromium.org
Cc: luto@amacapital.net, wad@chromium.org,
linux-kselftest@vger.kernel.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, kernel-team@fb.com,
Jakub Kicinski <kuba@kernel.org>
Subject: [PATCH v2 2/4] kselftest: create fixture objects
Date: Fri, 13 Mar 2020 17:54:59 -0700 [thread overview]
Message-ID: <20200314005501.2446494-3-kuba@kernel.org> (raw)
In-Reply-To: <20200314005501.2446494-1-kuba@kernel.org>
Grouping tests by fixture will allow us to parametrize
test runs. Create full objects for fixtures.
Add a "global" fixture for tests without a fixture.
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Acked-by: Kees Cook <keescook@chromium.org>
--
v2:
- remove the fixture list, we won't iterate over
fixtures so it's not needed
---
tools/testing/selftests/kselftest_harness.h | 31 ++++++++++++++++-----
1 file changed, 24 insertions(+), 7 deletions(-)
diff --git a/tools/testing/selftests/kselftest_harness.h b/tools/testing/selftests/kselftest_harness.h
index 5336b26506ab..66c2397d8c51 100644
--- a/tools/testing/selftests/kselftest_harness.h
+++ b/tools/testing/selftests/kselftest_harness.h
@@ -169,8 +169,10 @@
#define __TEST_IMPL(test_name, _signal) \
static void test_name(struct __test_metadata *_metadata); \
static struct __test_metadata _##test_name##_object = \
- { .name = "global." #test_name, \
- .fn = &test_name, .termsig = _signal, \
+ { .name = #test_name, \
+ .fn = &test_name, \
+ .fixture = &_fixture_global, \
+ .termsig = _signal, \
.timeout = TEST_TIMEOUT_DEFAULT, }; \
static void __attribute__((constructor)) _register_##test_name(void) \
{ \
@@ -212,6 +214,8 @@
* populated and cleaned up using FIXTURE_SETUP() and FIXTURE_TEARDOWN().
*/
#define FIXTURE(fixture_name) \
+ static struct __fixture_metadata _##fixture_name##_fixture_object = \
+ { .name = #fixture_name, }; \
static void __attribute__((constructor)) \
_register_##fixture_name##_data(void) \
{ \
@@ -309,8 +313,9 @@
} \
static struct __test_metadata \
_##fixture_name##_##test_name##_object = { \
- .name = #fixture_name "." #test_name, \
+ .name = #test_name, \
.fn = &wrapper_##fixture_name##_##test_name, \
+ .fixture = &_##fixture_name##_fixture_object, \
.termsig = signal, \
.timeout = tmout, \
}; \
@@ -632,9 +637,12 @@
} while (0); OPTIONAL_HANDLER(_assert)
/* Contains all the information for test execution and status checking. */
+struct __fixture_metadata;
+
struct __test_metadata {
const char *name;
void (*fn)(struct __test_metadata *);
+ struct __fixture_metadata *fixture;
int termsig;
int passed;
int trigger; /* extra handler after the evaluation */
@@ -685,6 +693,13 @@ static inline void __register_test(struct __test_metadata *t)
}
}
+/* Contains all the information about a fixture */
+struct __fixture_metadata {
+ const char *name;
+} _fixture_global __attribute__((unused)) = {
+ .name = "global",
+};
+
static inline int __bail(int for_realz, bool no_print, __u8 step)
{
if (for_realz) {
@@ -695,14 +710,15 @@ static inline int __bail(int for_realz, bool no_print, __u8 step)
return 0;
}
-void __run_test(struct __test_metadata *t)
+void __run_test(struct __fixture_metadata *f,
+ struct __test_metadata *t)
{
pid_t child_pid;
int status;
t->passed = 1;
t->trigger = 0;
- printf("[ RUN ] %s\n", t->name);
+ printf("[ RUN ] %s.%s\n", f->name, t->name);
alarm(t->timeout);
child_pid = fork();
if (child_pid < 0) {
@@ -751,7 +767,8 @@ void __run_test(struct __test_metadata *t)
status);
}
}
- printf("[ %4s ] %s\n", (t->passed ? "OK" : "FAIL"), t->name);
+ printf("[ %4s ] %s.%s\n", (t->passed ? "OK" : "FAIL"),
+ f->name, t->name);
alarm(0);
}
@@ -768,7 +785,7 @@ static int test_harness_run(int __attribute__((unused)) argc,
__test_count, __fixture_count + 1);
for (t = __test_list; t; t = t->next) {
count++;
- __run_test(t);
+ __run_test(t->fixture, t);
if (t->passed)
pass_count++;
else
--
2.24.1
next prev parent reply other threads:[~2020-03-14 0:55 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-14 0:54 [PATCH v2 0/4] kselftest: add fixture parameters Jakub Kicinski
2020-03-14 0:54 ` [PATCH v2 1/4] selftests/seccomp: use correct FIXTURE macro Jakub Kicinski
2020-03-14 0:54 ` Jakub Kicinski [this message]
2020-03-14 0:55 ` [PATCH v2 3/4] kselftest: add fixture parameters Jakub Kicinski
2020-03-14 0:55 ` [PATCH v2 4/4] selftests: tls: run all tests for TLS 1.2 and TLS 1.3 Jakub Kicinski
2020-03-14 4:41 ` [PATCH v2 0/4] kselftest: add fixture parameters Kees Cook
2020-03-16 15:55 ` Bird, Tim
2020-03-16 20:04 ` Jakub Kicinski
2020-03-16 21:01 ` Kees Cook
2020-03-16 21:27 ` Jakub Kicinski
2020-03-15 7:05 ` David Miller
2020-03-15 20:55 ` Kees Cook
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=20200314005501.2446494-3-kuba@kernel.org \
--to=kuba@kernel.org \
--cc=keescook@chromium.org \
--cc=kernel-team@fb.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=netdev@vger.kernel.org \
--cc=shuah@kernel.org \
--cc=wad@chromium.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.