[igt-dev] [PATCH i-g-t 1/1] lib/igt_core.h: Introduce igt_subtest_group_named
Petri Latvala
petri.latvala at intel.com
Mon Sep 5 13:53:53 UTC 2022
On Mon, Sep 05, 2022 at 06:23:20PM +0530, janga.rahul.kumar at intel.com wrote:
> From: Janga Rahul Kumar <janga.rahul.kumar at intel.com>
>
> igt_subtest_group_named will check for requirements only
> when the subtest inside igt_subtest_group_named are executed.
>
> This will help in avoiding the logging related to requirements of
> subgroup tests when tests outside the subgroup are executed
> individually.
>
> Cc: Kamil Konieczny <kamil.konieczny at linux.intel.com>
> Signed-off-by: Janga Rahul Kumar <janga.rahul.kumar at intel.com>
How is this supposed to be used? Does one need to list all subtests a
subtest_group is going to have one by one? That's prone to errors and
a maintenance nightmare.
If the purpose is just to get logging easier to read, a better
solution is in my TODO with the runner communications rework that puts
the result reason alongside the result text itself.
--
Petri Latvala
> ---
> lib/igt_core.c | 23 +++++++++++++++++++++++
> lib/igt_core.h | 20 ++++++++++++++++++++
> 2 files changed, 43 insertions(+)
>
> diff --git a/lib/igt_core.c b/lib/igt_core.c
> index e7425326..7d84e145 100644
> --- a/lib/igt_core.c
> +++ b/lib/igt_core.c
> @@ -658,6 +658,29 @@ void __igt_fixture_end(void)
> siglongjmp(igt_subtest_jmpbuf, 1);
> }
>
> +bool __igt_check_subtest_list(const char *subtest_name, ...)
> +{
> + va_list valist;
> + bool match = false;
> + char *next_subtest_name = (char *)subtest_name;
> +
> + if (!run_single_subtest)
> + return true;
> +
> + va_start(valist, *subtest_name);
> +
> + while (next_subtest_name != NULL) {
> + if (uwildmat(run_single_subtest, next_subtest_name) != 0)
> + match = true;
> +
> + next_subtest_name = va_arg(valist, char *);
> + }
> +
> + va_end(valist);
> +
> + return match;
> +}
> +
> /*
> * If the test takes out the machine, in addition to the usual dmesg
> * spam, the kernel may also emit a "death rattle" -- extra debug
> diff --git a/lib/igt_core.h b/lib/igt_core.h
> index aa98e8ed..774e1893 100644
> --- a/lib/igt_core.h
> +++ b/lib/igt_core.h
> @@ -138,6 +138,7 @@ struct _GKeyFile *igt_load_igtrc(void);
> bool __igt_fixture(void);
> void __igt_fixture_complete(void);
> __noreturn void __igt_fixture_end(void);
> +bool __igt_check_subtest_list(const char *subtest_name, ...);
> /**
> * igt_fixture:
> *
> @@ -401,6 +402,25 @@ void __igt_subtest_group_restore(int, int);
> __igt_subtest_group_restore(igt_unique(__save), \
> igt_unique(__desc)))
>
> +/**
> + * igt_subtest_group_named:
> + *
> + * Group a set of subtests together with their common setup code
> + *
> + * This macro will execute common setup only when subtests under the
> + * group are ran.
> + */
> +#define igt_subtest_group_named(...) for (int igt_unique(__tmpint) = 0, \
> + igt_unique(__save) = 0, \
> + igt_unique(__desc) = 0; \
> + __igt_check_subtest_list(__VA_ARGS__, NULL) && \
> + igt_unique(__tmpint) < 1 && \
> + (__igt_subtest_group_save(&igt_unique(__save), \
> + &igt_unique(__desc)), true); \
> + igt_unique(__tmpint) ++, \
> + __igt_subtest_group_restore(igt_unique(__save), \
> + igt_unique(__desc)))
> +
> /**
> * igt_main_args:
> * @extra_short_opts: getopt_long() compliant list with additional short options
> --
> 2.25.1
>
More information about the igt-dev
mailing list