Re: [PATCH v2 1/4] kunit: Support skipped tests

From: Brendan Higgins
Date: Fri Jun 04 2021 - 17:05:00 EST


On Fri, May 28, 2021 at 12:59 AM David Gow <davidgow@xxxxxxxxxx> wrote:
>
> The kunit_mark_skipped() macro marks the current test as "skipped", with
> the provided reason. The kunit_skip() macro will mark the test as
> skipped, and abort the test.
>
> The TAP specification supports this "SKIP directive" as a comment after
> the "ok" / "not ok" for a test. See the "Directives" section of the TAP
> spec for details:
> https://testanything.org/tap-specification.html#directives
>
> The 'success' field for KUnit tests is replaced with a kunit_status
> enum, which can be SUCCESS, FAILURE, or SKIPPED, combined with a
> 'status_comment' containing information on why a test was skipped.
>
> A new 'kunit_status' test suite is added to test this.
>
> Signed-off-by: David Gow <davidgow@xxxxxxxxxx>
> Tested-by: Marco Elver <elver@xxxxxxxxxx>
> Reviewed-by: Daniel Latypov <dlatypov@xxxxxxxxxx>

One fairly minor nit below. Other than that, looks great!

Reviewed-by: Brendan Higgins <brendanhiggins@xxxxxxxxxx>

> ---

[...]

> diff --git a/include/kunit/test.h b/include/kunit/test.h
> index b68c61348121..1401c620ac5e 100644
> --- a/include/kunit/test.h
> +++ b/include/kunit/test.h
> @@ -105,6 +105,18 @@ struct kunit;
> #define KUNIT_SUBTEST_INDENT " "
> #define KUNIT_SUBSUBTEST_INDENT " "
>
> +/**
> + * enum kunit_status - Type of result for a test or test suite
> + * @KUNIT_SUCCESS: Denotes the test suite has not failed nor been skipped
> + * @KUNIT_FAILURE: Denotes the test has failed.
> + * @KUNIT_SKIPPED: Denotes the test has been skipped.
> + */
> +enum kunit_status {
> + KUNIT_SUCCESS,
> + KUNIT_FAILURE,
> + KUNIT_SKIPPED,
> +};
> +
> /**
> * struct kunit_case - represents an individual test case.
> *
> @@ -148,13 +160,20 @@ struct kunit_case {
> const void* (*generate_params)(const void *prev, char *desc);
>
> /* private: internal use only. */
> - bool success;
> + enum kunit_status status;
> char *log;
> };
>
> -static inline char *kunit_status_to_string(bool status)
> +static inline char *kunit_status_to_ok_not_ok(enum kunit_status status)
> {
> - return status ? "ok" : "not ok";
> + switch (status) {
> + case KUNIT_SKIPPED:
> + case KUNIT_SUCCESS:
> + return "ok";
> + case KUNIT_FAILURE:
> + return "not ok";
> + }
> + return "invalid";
> }
>
> /**
> @@ -212,6 +231,7 @@ struct kunit_suite {
> struct kunit_case *test_cases;
>
> /* private: internal use only */
> + char status_comment[256];

nit: How about we make the 256 a constant since you use it in a number
of places?

If not, at least when you reference the struct, you might want to use
ARRAY_SIZE(...).

> struct dentry *debugfs;
> char *log;
> };
[...]