[LTP] [PATCH v2 2/2] test_macros: Add TST_EXP_PASS_OR_FAIL()
Cyril Hrubis
chrubis@suse.cz
Fri Jul 10 15:12:56 CEST 2026
Hi!
> #define TST_EXP_PASS(SCALL, ...) \
> + TST_EXP_PASS_(SCALL, #SCALL, ##__VA_ARGS__)
> +
> +#define TST_EXP_PASS_(SCALL, SSCALL, ...) \
> do { \
> TST_EXP_PASS_SILENT_(SCALL, #SCALL, ##__VA_ARGS__); \
^
Here as well SSCALL
> @@ -366,6 +369,32 @@ extern int TST_PASS;
> TST_MSG_(TPASS, " passed", #SCALL, ##__VA_ARGS__); \
> } while (0)
>
> +/**
> + * TST_EXP_PASS_OR_FAIL() - Test syscall and expect it to pass or fail with
> + * expected errno.
> + *
> + * @SCALL: Tested syscall.
> + * @ERRNO: Expected errno or 0.
> + * @...: A printf-like parameters.
> + *
> + * Expect to pass if ERRNO is 0 otherwise expect a failure with
> + * expected errno.
> + *
> + * Internally it uses TST_EXP_FAIL() and TST_EXP_PASS().
> + */
> +#define TST_EXP_PASS_OR_FAIL(SCALL, ERRNO, ...) \
> + TST_EXP_PASS_OR_FAIL_(SCALL, #SCALL, ERRNO, ##__VA_ARGS__)
> +
> +#define TST_EXP_PASS_OR_FAIL_(SCALL, SSCALL, ERRNO, ...) \
And here as well, no need for the indirection until we need to use
TST_EXP_PASS_OR_FAIL_ in another macro.
> + ({ \
> + if (ERRNO) \
> + TST_EXP_FAIL_(SCALL, SSCALL, ERRNO, ##__VA_ARGS__); \
> + else \
> + TST_EXP_PASS_(SCALL, SSCALL, ##__VA_ARGS__); \
> + \
> + TST_RET; \
> + })
> +
> /**
> * TST_EXP_PASS_PTR_VOID() - Test syscall to return a valid pointer.
> *
> diff --git a/lib/newlib_tests/test_macros03.c b/lib/newlib_tests/test_macros03.c
> index 19a0ad6fd3..2a281bafcd 100644
> --- a/lib/newlib_tests/test_macros03.c
> +++ b/lib/newlib_tests/test_macros03.c
> @@ -9,9 +9,11 @@
>
> #include "tst_test.h"
>
> +#define ERR_ERRNO EINVAL
> +
> static int fail_fn(void)
> {
> - errno = EINVAL;
> + errno = ERR_ERRNO;
> return -1;
> }
>
> @@ -42,6 +44,11 @@ static void do_test(void)
> tst_res(TINFO, "TST_PASS = %i from TST_EXP_PASS_SILENT(pass_fn, ...)", TST_PASS);
> TST_EXP_PASS_SILENT(inval_ret_fn(), "inval_ret_fn()");
> tst_res(TINFO, "TST_PASS = %i", TST_PASS);
> +
> + tst_res(TINFO, "Testing TST_EXP_PASS_OR_FAIL() macro (pass)");
> + TST_EXP_PASS_OR_FAIL(pass_fn(), 0, "pass_fn()");
> + tst_res(TINFO, "Testing TST_EXP_PASS_OR_FAIL() macro (fail)");
> + TST_EXP_PASS_OR_FAIL(fail_fn(), ERR_ERRNO, "fail_fn()");
> }
>
> static struct tst_test test = {
> --
> 2.54.0
>
--
Cyril Hrubis
chrubis@suse.cz
More information about the ltp
mailing list