* [LTP] [PATCH v1] Add TST_EXP_FAIL_PTR
@ 2024-01-11 1:26 Wei Gao via ltp
2024-01-16 17:49 ` Petr Vorel
2024-01-17 8:04 ` [LTP] [PATCH v2] " Wei Gao via ltp
0 siblings, 2 replies; 40+ messages in thread
From: Wei Gao via ltp @ 2024-01-11 1:26 UTC (permalink / raw)
To: ltp
Signed-off-by: Wei Gao <wegao@suse.com>
---
include/tst_test_macros.h | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
This is draft patch and should rebase after following patch merge.
https://patchwork.ozlabs.org/project/ltp/patch/20240103115700.14585-1-chrubis@suse.cz/
diff --git a/include/tst_test_macros.h b/include/tst_test_macros.h
index 3f4f9f11d..6e45e0b27 100644
--- a/include/tst_test_macros.h
+++ b/include/tst_test_macros.h
@@ -212,6 +212,26 @@ extern void *TST_RET_PTR;
} \
} while (0)
+#define TST_EXP_FAIL_SILENT_PTR_(SCALL, SSCALL, ERRNO, ...) \
+ do { \
+ TESTPTR(SCALL); \
+ \
+ TST_PASS = 0; \
+ \
+ if (TST_RET_PTR) { \
+ TST_MSG_(TFAIL, " succeeded", SSCALL, ##__VA_ARGS__); \
+ break; \
+ } \
+ \
+ if (TST_ERR == (ERRNO)) { \
+ TST_PASS = 1; \
+ } else { \
+ TST_MSGP_(TFAIL | TTERRNO, " expected %s", \
+ tst_strerrno(ERRNO), \
+ SSCALL, ##__VA_ARGS__); \
+ } \
+ } while (0)
+
#define TST_EXP_FAIL(SCALL, ERRNO, ...) \
do { \
TST_EXP_FAIL_SILENT_(TST_RET == 0, SCALL, #SCALL, \
@@ -228,6 +248,14 @@ extern void *TST_RET_PTR;
TST_MSG_(TPASS | TTERRNO, " ", #SCALL, ##__VA_ARGS__); \
} while (0)
+#define TST_EXP_FAIL_PTR(SCALL, ERRNO, ...) \
+ do { \
+ TST_EXP_FAIL_SILENT_PTR_(SCALL, #SCALL, \
+ ERRNO, ##__VA_ARGS__); \
+ if (TST_PASS) \
+ TST_MSG_(TPASS | TTERRNO, " ", #SCALL, ##__VA_ARGS__); \
+ } while (0)
+
#define TST_EXP_FAIL_SILENT(SCALL, ERRNO, ...) \
TST_EXP_FAIL_SILENT_(TST_RET == 0, SCALL, #SCALL, ERRNO, ##__VA_ARGS__)
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v1] Add TST_EXP_FAIL_PTR
2024-01-11 1:26 [LTP] [PATCH v1] Add TST_EXP_FAIL_PTR Wei Gao via ltp
@ 2024-01-16 17:49 ` Petr Vorel
2024-01-17 8:07 ` Wei Gao via ltp
2024-01-17 8:04 ` [LTP] [PATCH v2] " Wei Gao via ltp
1 sibling, 1 reply; 40+ messages in thread
From: Petr Vorel @ 2024-01-16 17:49 UTC (permalink / raw)
To: Wei Gao; +Cc: ltp
Hi Wei,
> Signed-off-by: Wei Gao <wegao@suse.com>
> ---
> include/tst_test_macros.h | 28 ++++++++++++++++++++++++++++
> 1 file changed, 28 insertions(+)
> This is draft patch and should rebase after following patch merge.
> https://patchwork.ozlabs.org/project/ltp/patch/20240103115700.14585-1-chrubis@suse.cz/
Patch was accepted, please rebase. Also, please add at least one test which
uses it.
Also, I wonder if we need TST_EXP_PASS_PTR().
> diff --git a/include/tst_test_macros.h b/include/tst_test_macros.h
> index 3f4f9f11d..6e45e0b27 100644
> --- a/include/tst_test_macros.h
> +++ b/include/tst_test_macros.h
> @@ -212,6 +212,26 @@ extern void *TST_RET_PTR;
> } \
> } while (0)
> +#define TST_EXP_FAIL_SILENT_PTR_(SCALL, SSCALL, ERRNO, ...) \
> + do { \
> + TESTPTR(SCALL); \
> + \
> + TST_PASS = 0; \
> + \
> + if (TST_RET_PTR) { \
> + TST_MSG_(TFAIL, " succeeded", SSCALL, ##__VA_ARGS__); \
> + break; \
> + } \
> + \
> + if (TST_ERR == (ERRNO)) { \
> + TST_PASS = 1; \
> + } else { \
> + TST_MSGP_(TFAIL | TTERRNO, " expected %s", \
> + tst_strerrno(ERRNO), \
> + SSCALL, ##__VA_ARGS__); \
> + } \
Maybe follow the pattern of already used tests (break saves else clause)?
if (TST_ERR != (ERRNO)) { \
TST_MSGP_(TFAIL | TTERRNO, " expected %s", \
tst_strerrno(ERRNO), \
SSCALL, ##__VA_ARGS__); \
break; \
} \
\
TST_PASS = 1; \
> + } while (0)
> +
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* [LTP] [PATCH v2] Add TST_EXP_FAIL_PTR
2024-01-11 1:26 [LTP] [PATCH v1] Add TST_EXP_FAIL_PTR Wei Gao via ltp
2024-01-16 17:49 ` Petr Vorel
@ 2024-01-17 8:04 ` Wei Gao via ltp
2024-01-17 9:49 ` Petr Vorel
2024-01-17 12:52 ` [LTP] [PATCH v3 0/2] lib: TST_EXP_FAIL_PTR Wei Gao via ltp
1 sibling, 2 replies; 40+ messages in thread
From: Wei Gao via ltp @ 2024-01-17 8:04 UTC (permalink / raw)
To: ltp
Signed-off-by: Wei Gao <wegao@suse.com>
---
include/tst_test_macros.h | 41 +++++++++++++++++++++++++++++
lib/newlib_tests/.gitignore | 1 +
lib/newlib_tests/test_macros07.c | 44 ++++++++++++++++++++++++++++++++
3 files changed, 86 insertions(+)
create mode 100644 lib/newlib_tests/test_macros07.c
diff --git a/include/tst_test_macros.h b/include/tst_test_macros.h
index 24fd324bf..409e6847c 100644
--- a/include/tst_test_macros.h
+++ b/include/tst_test_macros.h
@@ -227,6 +227,30 @@ const char *tst_errno_names(char *buf, const int *exp_errs, int exp_errs_cnt);
} \
} while (0)
+#define TST_EXP_FAIL_SILENT_PTR_(SCALL, SSCALL, ERRNOS, ERRNOS_CNT, ...) \
+ do { \
+ TESTPTR(SCALL); \
+ \
+ TST_PASS = 0; \
+ \
+ if (TST_RET_PTR) { \
+ TST_MSG_(TFAIL, " succeeded", SSCALL, ##__VA_ARGS__); \
+ break; \
+ } \
+ \
+ if (!tst_errno_in_set(TST_ERR, ERRNOS, ERRNOS_CNT)) { \
+ char tst_str_buf__[ERRNOS_CNT * 20]; \
+ TST_MSGP_(TFAIL | TTERRNO, " expected %s", \
+ tst_errno_names(tst_str_buf__, \
+ ERRNOS, ERRNOS_CNT), \
+ SSCALL, ##__VA_ARGS__); \
+ break; \
+ } \
+ \
+ TST_PASS = 1; \
+ \
+ } while (0)
+
#define TST_EXP_FAIL_ARR_(SCALL, EXP_ERRS, EXP_ERRS_CNT, ...) \
do { \
TST_EXP_FAIL_SILENT_(TST_RET == 0, SCALL, #SCALL, \
@@ -258,6 +282,23 @@ const char *tst_errno_names(char *buf, const int *exp_errs, int exp_errs_cnt);
TST_EXP_FAIL2_ARR_(SCALL, EXP_ERRS, ARRAY_SIZE(EXP_ERRS), \
##__VA_ARGS__); \
+#define TST_EXP_FAIL_PTR(SCALL, EXP_ERR, ...) \
+ do { \
+ int tst_exp_err__ = EXP_ERR; \
+ TST_EXP_FAIL_SILENT_PTR_(SCALL, #SCALL, \
+ &tst_exp_err__, 1, ##__VA_ARGS__); \
+ if (TST_PASS) \
+ TST_MSG_(TPASS | TTERRNO, " ", #SCALL, ##__VA_ARGS__); \
+ } while (0)
+
+#define TST_EXP_FAIL_PTR_ARR(SCALL, EXP_ERRS, ...) \
+ do { \
+ TST_EXP_FAIL_SILENT_PTR_(SCALL, #SCALL, \
+ EXP_ERRS, ARRAY_SIZE(EXP_ERRS), ##__VA_ARGS__); \
+ if (TST_PASS) \
+ TST_MSG_(TPASS | TTERRNO, " ", #SCALL, ##__VA_ARGS__); \
+ } while (0)
+
#define TST_EXP_FAIL2(SCALL, EXP_ERR, ...) \
do { \
int tst_exp_err__ = EXP_ERR; \
diff --git a/lib/newlib_tests/.gitignore b/lib/newlib_tests/.gitignore
index a69b29e24..4f43899e5 100644
--- a/lib/newlib_tests/.gitignore
+++ b/lib/newlib_tests/.gitignore
@@ -40,6 +40,7 @@ test_macros03
test_macros04
test_macros05
test_macros06
+test_macros07
tst_fuzzy_sync01
tst_fuzzy_sync02
tst_fuzzy_sync03
diff --git a/lib/newlib_tests/test_macros07.c b/lib/newlib_tests/test_macros07.c
new file mode 100644
index 000000000..45bba8409
--- /dev/null
+++ b/lib/newlib_tests/test_macros07.c
@@ -0,0 +1,44 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2024 Wei Gao <wegao@suse.com>
+ */
+
+/*
+ * Test TST_EXP_FAIL_PTR and TST_EXP_FAIL_PTR_ARR macro.
+ */
+
+#include "tst_test.h"
+
+static char *fail_fn(void)
+{
+ errno = EINVAL;
+ return NULL;
+}
+
+static char *pass_fn(void)
+{
+ return "pass";
+}
+
+static void do_test(void)
+{
+ const int exp_errs_pass[] = {ENOTTY, EINVAL};
+ const int exp_errs_fail[] = {ENOTTY, EISDIR};
+
+ tst_res(TINFO, "Testing TST_EXP_FAIL_PTR macro");
+ TST_EXP_FAIL_PTR(fail_fn(), EINVAL, "fail_fn()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR(fail_fn(), ENOTTY, "fail_fn()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR(pass_fn(), ENOTTY, "pass_fn()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_ARR(fail_fn(), exp_errs_pass, "fail_fn()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_ARR(fail_fn(), exp_errs_fail, "fail_fn()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+
+}
+
+static struct tst_test test = {
+ .test_all = do_test,
+};
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v1] Add TST_EXP_FAIL_PTR
2024-01-16 17:49 ` Petr Vorel
@ 2024-01-17 8:07 ` Wei Gao via ltp
0 siblings, 0 replies; 40+ messages in thread
From: Wei Gao via ltp @ 2024-01-17 8:07 UTC (permalink / raw)
To: Petr Vorel; +Cc: ltp
On Tue, Jan 16, 2024 at 06:49:26PM +0100, Petr Vorel wrote:
> Hi Wei,
>
> > Signed-off-by: Wei Gao <wegao@suse.com>
> > ---
> > include/tst_test_macros.h | 28 ++++++++++++++++++++++++++++
> > 1 file changed, 28 insertions(+)
>
> > This is draft patch and should rebase after following patch merge.
> > https://patchwork.ozlabs.org/project/ltp/patch/20240103115700.14585-1-chrubis@suse.cz/
>
> Patch was accepted, please rebase. Also, please add at least one test which
> uses it.
>
> Also, I wonder if we need TST_EXP_PASS_PTR().
Sure, i can create another patch for TST_EXP_PASS_PTR.
>
> > diff --git a/include/tst_test_macros.h b/include/tst_test_macros.h
> > index 3f4f9f11d..6e45e0b27 100644
> > --- a/include/tst_test_macros.h
> > +++ b/include/tst_test_macros.h
> > @@ -212,6 +212,26 @@ extern void *TST_RET_PTR;
> > } \
> > } while (0)
>
> > +#define TST_EXP_FAIL_SILENT_PTR_(SCALL, SSCALL, ERRNO, ...) \
> > + do { \
> > + TESTPTR(SCALL); \
> > + \
> > + TST_PASS = 0; \
> > + \
> > + if (TST_RET_PTR) { \
> > + TST_MSG_(TFAIL, " succeeded", SSCALL, ##__VA_ARGS__); \
> > + break; \
> > + } \
> > + \
> > + if (TST_ERR == (ERRNO)) { \
> > + TST_PASS = 1; \
> > + } else { \
> > + TST_MSGP_(TFAIL | TTERRNO, " expected %s", \
> > + tst_strerrno(ERRNO), \
> > + SSCALL, ##__VA_ARGS__); \
> > + } \
>
> Maybe follow the pattern of already used tests (break saves else clause)?
> if (TST_ERR != (ERRNO)) { \
> TST_MSGP_(TFAIL | TTERRNO, " expected %s", \
> tst_strerrno(ERRNO), \
> SSCALL, ##__VA_ARGS__); \
> break; \
> } \
> \
> TST_PASS = 1; \
>
>
> > + } while (0)
> > +
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v2] Add TST_EXP_FAIL_PTR
2024-01-17 8:04 ` [LTP] [PATCH v2] " Wei Gao via ltp
@ 2024-01-17 9:49 ` Petr Vorel
2024-01-30 12:21 ` Petr Vorel
2024-01-17 12:52 ` [LTP] [PATCH v3 0/2] lib: TST_EXP_FAIL_PTR Wei Gao via ltp
1 sibling, 1 reply; 40+ messages in thread
From: Petr Vorel @ 2024-01-17 9:49 UTC (permalink / raw)
To: Wei Gao; +Cc: ltp
Hi Wei,
subject should be: "lib: TST_EXP_{FAIL,PASS}_PTR"
(can be changed before merge)
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Thanks for adding a library test.
If you send a patch for a test which actually uses these, we can merge it before
the release. Otherwise I would wait for the merge after the release.
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* [LTP] [PATCH v3 0/2] lib: TST_EXP_FAIL_PTR
2024-01-17 8:04 ` [LTP] [PATCH v2] " Wei Gao via ltp
2024-01-17 9:49 ` Petr Vorel
@ 2024-01-17 12:52 ` Wei Gao via ltp
2024-01-17 12:52 ` [LTP] [PATCH v3 1/2] " Wei Gao via ltp
` (2 more replies)
1 sibling, 3 replies; 40+ messages in thread
From: Wei Gao via ltp @ 2024-01-17 12:52 UTC (permalink / raw)
To: ltp
Wei Gao (2):
lib: TST_EXP_FAIL_PTR
getcwd01: Implement .test_variants
include/tst_test_macros.h | 41 +++++++++++
lib/newlib_tests/.gitignore | 1 +
lib/newlib_tests/test_macros07.c | 44 ++++++++++++
testcases/kernel/syscalls/getcwd/getcwd01.c | 80 +++++++++++++++------
4 files changed, 146 insertions(+), 20 deletions(-)
create mode 100644 lib/newlib_tests/test_macros07.c
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* [LTP] [PATCH v3 1/2] lib: TST_EXP_FAIL_PTR
2024-01-17 12:52 ` [LTP] [PATCH v3 0/2] lib: TST_EXP_FAIL_PTR Wei Gao via ltp
@ 2024-01-17 12:52 ` Wei Gao via ltp
2024-01-23 8:45 ` Petr Vorel
2024-01-23 10:41 ` Cyril Hrubis
2024-01-17 12:52 ` [LTP] [PATCH v3 2/2] getcwd01: Implement .test_variants Wei Gao via ltp
2024-02-08 1:32 ` [LTP] [PATCH v4 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
2 siblings, 2 replies; 40+ messages in thread
From: Wei Gao via ltp @ 2024-01-17 12:52 UTC (permalink / raw)
To: ltp
Signed-off-by: Wei Gao <wegao@suse.com>
---
include/tst_test_macros.h | 41 +++++++++++++++++++++++++++++
lib/newlib_tests/.gitignore | 1 +
lib/newlib_tests/test_macros07.c | 44 ++++++++++++++++++++++++++++++++
3 files changed, 86 insertions(+)
create mode 100644 lib/newlib_tests/test_macros07.c
diff --git a/include/tst_test_macros.h b/include/tst_test_macros.h
index d2e50a219..5866d18b0 100644
--- a/include/tst_test_macros.h
+++ b/include/tst_test_macros.h
@@ -227,6 +227,30 @@ const char *tst_errno_names(char *buf, const int *exp_errs, int exp_errs_cnt);
} \
} while (0)
+#define TST_EXP_FAIL_SILENT_PTR_(SCALL, SSCALL, ERRNOS, ERRNOS_CNT, ...) \
+ do { \
+ TESTPTR(SCALL); \
+ \
+ TST_PASS = 0; \
+ \
+ if (TST_RET_PTR) { \
+ TST_MSG_(TFAIL, " succeeded", SSCALL, ##__VA_ARGS__); \
+ break; \
+ } \
+ \
+ if (!tst_errno_in_set(TST_ERR, ERRNOS, ERRNOS_CNT)) { \
+ char tst_str_buf__[ERRNOS_CNT * 20]; \
+ TST_MSGP_(TFAIL | TTERRNO, " expected %s", \
+ tst_errno_names(tst_str_buf__, \
+ ERRNOS, ERRNOS_CNT), \
+ SSCALL, ##__VA_ARGS__); \
+ break; \
+ } \
+ \
+ TST_PASS = 1; \
+ \
+ } while (0)
+
#define TST_EXP_FAIL_ARR_(SCALL, SSCALL, EXP_ERRS, EXP_ERRS_CNT, ...) \
do { \
TST_EXP_FAIL_SILENT_(TST_RET == 0, SCALL, SSCALL, \
@@ -258,6 +282,23 @@ const char *tst_errno_names(char *buf, const int *exp_errs, int exp_errs_cnt);
TST_EXP_FAIL2_ARR_(SCALL, #SCALL, EXP_ERRS, \
ARRAY_SIZE(EXP_ERRS), ##__VA_ARGS__);
+#define TST_EXP_FAIL_PTR(SCALL, EXP_ERR, ...) \
+ do { \
+ int tst_exp_err__ = EXP_ERR; \
+ TST_EXP_FAIL_SILENT_PTR_(SCALL, #SCALL, \
+ &tst_exp_err__, 1, ##__VA_ARGS__); \
+ if (TST_PASS) \
+ TST_MSG_(TPASS | TTERRNO, " ", #SCALL, ##__VA_ARGS__); \
+ } while (0)
+
+#define TST_EXP_FAIL_PTR_ARR(SCALL, EXP_ERRS, ...) \
+ do { \
+ TST_EXP_FAIL_SILENT_PTR_(SCALL, #SCALL, \
+ EXP_ERRS, ARRAY_SIZE(EXP_ERRS), ##__VA_ARGS__); \
+ if (TST_PASS) \
+ TST_MSG_(TPASS | TTERRNO, " ", #SCALL, ##__VA_ARGS__); \
+ } while (0)
+
#define TST_EXP_FAIL2(SCALL, EXP_ERR, ...) \
do { \
int tst_exp_err__ = EXP_ERR; \
diff --git a/lib/newlib_tests/.gitignore b/lib/newlib_tests/.gitignore
index a69b29e24..4f43899e5 100644
--- a/lib/newlib_tests/.gitignore
+++ b/lib/newlib_tests/.gitignore
@@ -40,6 +40,7 @@ test_macros03
test_macros04
test_macros05
test_macros06
+test_macros07
tst_fuzzy_sync01
tst_fuzzy_sync02
tst_fuzzy_sync03
diff --git a/lib/newlib_tests/test_macros07.c b/lib/newlib_tests/test_macros07.c
new file mode 100644
index 000000000..45bba8409
--- /dev/null
+++ b/lib/newlib_tests/test_macros07.c
@@ -0,0 +1,44 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2024 Wei Gao <wegao@suse.com>
+ */
+
+/*
+ * Test TST_EXP_FAIL_PTR and TST_EXP_FAIL_PTR_ARR macro.
+ */
+
+#include "tst_test.h"
+
+static char *fail_fn(void)
+{
+ errno = EINVAL;
+ return NULL;
+}
+
+static char *pass_fn(void)
+{
+ return "pass";
+}
+
+static void do_test(void)
+{
+ const int exp_errs_pass[] = {ENOTTY, EINVAL};
+ const int exp_errs_fail[] = {ENOTTY, EISDIR};
+
+ tst_res(TINFO, "Testing TST_EXP_FAIL_PTR macro");
+ TST_EXP_FAIL_PTR(fail_fn(), EINVAL, "fail_fn()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR(fail_fn(), ENOTTY, "fail_fn()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR(pass_fn(), ENOTTY, "pass_fn()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_ARR(fail_fn(), exp_errs_pass, "fail_fn()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_ARR(fail_fn(), exp_errs_fail, "fail_fn()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+
+}
+
+static struct tst_test test = {
+ .test_all = do_test,
+};
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [LTP] [PATCH v3 2/2] getcwd01: Implement .test_variants
2024-01-17 12:52 ` [LTP] [PATCH v3 0/2] lib: TST_EXP_FAIL_PTR Wei Gao via ltp
2024-01-17 12:52 ` [LTP] [PATCH v3 1/2] " Wei Gao via ltp
@ 2024-01-17 12:52 ` Wei Gao via ltp
2024-01-23 9:45 ` Petr Vorel
2024-02-08 1:32 ` [LTP] [PATCH v4 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
2 siblings, 1 reply; 40+ messages in thread
From: Wei Gao via ltp @ 2024-01-17 12:52 UTC (permalink / raw)
To: ltp
Signed-off-by: Wei Gao <wegao@suse.com>
---
testcases/kernel/syscalls/getcwd/getcwd01.c | 80 +++++++++++++++------
1 file changed, 60 insertions(+), 20 deletions(-)
NOTE: Cyril give solution for run the test in a child and pass
the test both on EFAULT and child being killed by SIGSEGV. But
currently i have no idea how to do it since no SIGSEGV will hapeen
if NULL buffer give to getcwd. This file just used for give a real
user case for TST_EXP_FAIL_PTR.
diff --git a/testcases/kernel/syscalls/getcwd/getcwd01.c b/testcases/kernel/syscalls/getcwd/getcwd01.c
index 218bf4ef2..879c36206 100644
--- a/testcases/kernel/syscalls/getcwd/getcwd01.c
+++ b/testcases/kernel/syscalls/getcwd/getcwd01.c
@@ -3,21 +3,34 @@
* Copyright (c) International Business Machines Corp., 2001
*/
-/*
- * DESCRIPTION
+/*\
+ * [Description]
+ *
* Testcase to test that getcwd(2) sets errno correctly.
- * 1) getcwd(2) fails if buf points to a bad address.
- * 2) getcwd(2) fails if the size is invalid.
- * 3) getcwd(2) fails if the size is set to 0.
- * 4) getcwd(2) fails if the size is set to 1.
- * 5) getcwd(2) fails if buf points to NULL and the size is set to 1.
+ *
+ * 1. getcwd(2) fails if buf points to a bad address.
+ * 2. getcwd(2) fails if the size is invalid.
+ * 3. getcwd(2) fails if the size is set to 0.
+ * 4. getcwd(2) fails if the size is set to 1.
+ * 5. getcwd(2) fails if buf points to NULL and the size is set to 1.
*
* Expected Result:
- * 1) getcwd(2) should return NULL and set errno to EFAULT.
- * 2) getcwd(2) should return NULL and set errno to EFAULT.
- * 3) getcwd(2) should return NULL and set errno to ERANGE.
- * 4) getcwd(2) should return NULL and set errno to ERANGE.
- * 5) getcwd(2) should return NULL and set errno to ERANGE.
+ *
+ * linux syscall
+ *
+ * 1. getcwd(2) should return NULL and set errno to EFAULT.
+ * 2. getcwd(2) should return NULL and set errno to EFAULT.
+ * 3. getcwd(2) should return NULL and set errno to ERANGE.
+ * 4. getcwd(2) should return NULL and set errno to ERANGE.
+ * 5. getcwd(2) should return NULL and set errno to ERANGE.
+ *
+ * glibc and uclibc{,-ng}.
+ *
+ * 1. getcwd(2) should return NULL and set errno to EFAULT.
+ * 2. getcwd(2) should return NULL and set errno to ENOMEM.
+ * 3. getcwd(2) should return NULL and set errno to EINVAL.
+ * 4. getcwd(2) should return NULL and set errno to ERANGE.
+ * 5. getcwd(2) should return NULL and set errno to ERANGE.
*/
#include <errno.h>
@@ -32,23 +45,50 @@ static struct t_case {
char *buf;
size_t size;
int exp_err;
+ int exp_err_libc;
} tcases[] = {
- {(void *)-1, PATH_MAX, EFAULT},
- {NULL, (size_t)-1, EFAULT},
- {buffer, 0, ERANGE},
- {buffer, 1, ERANGE},
- {NULL, 1, ERANGE}
+ {(void *)-1, PATH_MAX, EFAULT, EFAULT},
+ {NULL, (size_t)-1, EFAULT, ENOMEM},
+ {buffer, 0, ERANGE, EINVAL},
+ {buffer, 1, ERANGE, ERANGE},
+ {NULL, 1, ERANGE, ERANGE},
};
+static inline void tst_getcwd(char *buf, size_t size, int exp_err, int exp_err_libc)
+{
+
+ if (tst_variant == 0)
+ TST_EXP_FAIL2(tst_syscall(__NR_getcwd, buf, size), exp_err);
+ else
+ TST_EXP_FAIL_PTR(getcwd(buf, size), exp_err_libc);
+}
-static void verify_getcwd(unsigned int n)
+static void run(unsigned int n)
{
struct t_case *tc = &tcases[n];
- TST_EXP_FAIL2(tst_syscall(__NR_getcwd, tc->buf, tc->size), tc->exp_err);
+ /* https://github.com/linux-test-project/ltp/issues/1084 */
+#if !defined(__GLIBC__) && !defined(__ANDROID__)
+ if (tst_variant && !tc->buf) {
+ tst_res(TCONF, "NULL buffer test skipped on MUSL due different implementation");
+ return;
+ }
+#endif
+
+ tst_getcwd(tc->buf, tc->size, tc->exp_err, tc->exp_err_libc);
+}
+
+static void setup(void)
+{
+ if (tst_variant == 0)
+ tst_res(TINFO, "Testing getcwd with raw syscall");
+ else
+ tst_res(TINFO, "Testing getcwd with wrap syscall");
}
static struct tst_test test = {
+ .setup = setup,
.tcnt = ARRAY_SIZE(tcases),
- .test = verify_getcwd
+ .test = run,
+ .test_variants = 2,
};
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v3 1/2] lib: TST_EXP_FAIL_PTR
2024-01-17 12:52 ` [LTP] [PATCH v3 1/2] " Wei Gao via ltp
@ 2024-01-23 8:45 ` Petr Vorel
2024-01-23 10:41 ` Cyril Hrubis
1 sibling, 0 replies; 40+ messages in thread
From: Petr Vorel @ 2024-01-23 8:45 UTC (permalink / raw)
To: Wei Gao; +Cc: ltp
Hi Wei,
thank you for sending rebased version.
You could have added my RBT (the code you added didn't change).
Reviewed-by: Petr Vorel <pvorel@suse.cz>
nit (I have suggested in v2): subject should be: "lib: TST_EXP_{FAIL,PASS}_PTR"
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v3 2/2] getcwd01: Implement .test_variants
2024-01-17 12:52 ` [LTP] [PATCH v3 2/2] getcwd01: Implement .test_variants Wei Gao via ltp
@ 2024-01-23 9:45 ` Petr Vorel
0 siblings, 0 replies; 40+ messages in thread
From: Petr Vorel @ 2024-01-23 9:45 UTC (permalink / raw)
To: Wei Gao; +Cc: ltp
Hi Wei,
> Signed-off-by: Wei Gao <wegao@suse.com>
> ---
> testcases/kernel/syscalls/getcwd/getcwd01.c | 80 +++++++++++++++------
> 1 file changed, 60 insertions(+), 20 deletions(-)
> NOTE: Cyril give solution for run the test in a child and pass
> the test both on EFAULT and child being killed by SIGSEGV. But
> currently i have no idea how to do it since no SIGSEGV will hapeen
> if NULL buffer give to getcwd. This file just used for give a real
> user case for TST_EXP_FAIL_PTR.
@Cyril, could you please point out test which uses similar approach?
Maybe these?
testcases/kernel/syscalls/fstat/fstat03.c
testcases/kernel/syscalls/ipc/shmat/shmat01.c
testcases/kernel/syscalls/kill/kill11.c
testcases/kernel/syscalls/setrlimit/setrlimit05.c
Or can the current approach be used?
Below only nits (formatting).
> diff --git a/testcases/kernel/syscalls/getcwd/getcwd01.c b/testcases/kernel/syscalls/getcwd/getcwd01.c
> index 218bf4ef2..879c36206 100644
> --- a/testcases/kernel/syscalls/getcwd/getcwd01.c
> +++ b/testcases/kernel/syscalls/getcwd/getcwd01.c
> @@ -3,21 +3,34 @@
> * Copyright (c) International Business Machines Corp., 2001
IBM in 2001 could be proud on this code :). There should have been some
copyright, I would add:
* Copyright (c) Linux Test Project, 2002-2024
> */
> -/*
> - * DESCRIPTION
> +/*\
> + * [Description]
> + *
> * Testcase to test that getcwd(2) sets errno correctly.
> + *
> + * 1. getcwd(2) fails if buf points to a bad address.
> + * 2. getcwd(2) fails if the size is invalid.
> + * 3. getcwd(2) fails if the size is set to 0.
> + * 4. getcwd(2) fails if the size is set to 1.
> + * 5. getcwd(2) fails if buf points to NULL and the size is set to 1.
> *
> * Expected Result:
> + *
> + * linux syscall
> + *
> + * 1. getcwd(2) should return NULL and set errno to EFAULT.
I don't like repeating "getcwd(2) should return NULL and set errno to"
> + * 2. getcwd(2) should return NULL and set errno to EFAULT.
> + * 3. getcwd(2) should return NULL and set errno to ERANGE.
> + * 4. getcwd(2) should return NULL and set errno to ERANGE.
> + * 5. getcwd(2) should return NULL and set errno to ERANGE.
> + *
> + * glibc and uclibc{,-ng}.
Although in the past LTP developers cared only about glibc, now we generally
don't stick to any libc implementation. Thus it should be "libc syscall wrapper"
> + *
> + * 1. getcwd(2) should return NULL and set errno to EFAULT.
> + * 2. getcwd(2) should return NULL and set errno to ENOMEM.
> + * 3. getcwd(2) should return NULL and set errno to EINVAL.
> + * 4. getcwd(2) should return NULL and set errno to ERANGE.
> + * 5. getcwd(2) should return NULL and set errno to ERANGE.
> */
How about to make it simple like this:
/*\
* [Description]
*
* Testcase to test that getcwd(2) returns NULL and sets errno correctly.
*
* 1. getcwd(2) fails if buf points to a bad address (EFAULT).
* 2. getcwd(2) fails if the size is invalid (syscall: EFAULT, libc wrapper: ENOMEM).
* 3. getcwd(2) fails if the size is set to 0 (syscall: ERANGE, libc wrapper: EINVAL).
* 4. getcwd(2) fails if the size is set to 1 (ERANGE).
* 5. getcwd(2) fails if buf points to NULL and the size is set to 1 (ERANGE).
*/
> #include <errno.h>
> @@ -32,23 +45,50 @@ static struct t_case {
> char *buf;
> size_t size;
> int exp_err;
> + int exp_err_libc;
> } tcases[] = {
> - {(void *)-1, PATH_MAX, EFAULT},
> - {NULL, (size_t)-1, EFAULT},
> - {buffer, 0, ERANGE},
> - {buffer, 1, ERANGE},
> - {NULL, 1, ERANGE}
> + {(void *)-1, PATH_MAX, EFAULT, EFAULT},
> + {NULL, (size_t)-1, EFAULT, ENOMEM},
> + {buffer, 0, ERANGE, EINVAL},
> + {buffer, 1, ERANGE, ERANGE},
> + {NULL, 1, ERANGE, ERANGE},
> };
> +static inline void tst_getcwd(char *buf, size_t size, int exp_err, int exp_err_libc)
> +{
> +
> + if (tst_variant == 0)
> + TST_EXP_FAIL2(tst_syscall(__NR_getcwd, buf, size), exp_err);
> + else
> + TST_EXP_FAIL_PTR(getcwd(buf, size), exp_err_libc);
> +}
+1
> -static void verify_getcwd(unsigned int n)
> +static void run(unsigned int n)
> {
> struct t_case *tc = &tcases[n];
> - TST_EXP_FAIL2(tst_syscall(__NR_getcwd, tc->buf, tc->size), tc->exp_err);
> + /* https://github.com/linux-test-project/ltp/issues/1084 */
IMHO this comment should go to the commit message.
> +#if !defined(__GLIBC__) && !defined(__ANDROID__)
I'll ask AOSP developers to check this.
> + if (tst_variant && !tc->buf) {
> + tst_res(TCONF, "NULL buffer test skipped on MUSL due different implementation");
> + return;
> + }
> +#endif
> +
> + tst_getcwd(tc->buf, tc->size, tc->exp_err, tc->exp_err_libc);
> +}
> +
> +static void setup(void)
> +{
> + if (tst_variant == 0)
> + tst_res(TINFO, "Testing getcwd with raw syscall");
> + else
> + tst_res(TINFO, "Testing getcwd with wrap syscall");
"wrap syscall" => "libc syscall wrapper"
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v3 1/2] lib: TST_EXP_FAIL_PTR
2024-01-17 12:52 ` [LTP] [PATCH v3 1/2] " Wei Gao via ltp
2024-01-23 8:45 ` Petr Vorel
@ 2024-01-23 10:41 ` Cyril Hrubis
2024-01-30 12:20 ` Petr Vorel
1 sibling, 1 reply; 40+ messages in thread
From: Cyril Hrubis @ 2024-01-23 10:41 UTC (permalink / raw)
To: Wei Gao; +Cc: ltp
Hi!
> +#define TST_EXP_FAIL_SILENT_PTR_(SCALL, SSCALL, ERRNOS, ERRNOS_CNT, ...) \
> + do { \
> + TESTPTR(SCALL); \
> + \
> + TST_PASS = 0; \
> + \
> + if (TST_RET_PTR) { \
Unfortunatelly there are two types of calls, one returns NULL on a
failure and the second returns (void *)-1, from the top of my head these
are mmap(), shmat() and possibly other memory related syscalls.
So I suppose that this macro needs another parameter for the actual
value that is returned on a failure:
#define TST_EXP_FAIL_SILENT_PTR_(SCALL, SSCALL, FAIL_PTR_VAL, ERRNOS, ...)
do {
TESTPTR(SCALL);
...
if (TST_RET_PTR == FAILPTR_VAL) {
...
The hard question is if we want to pass this parameter explicitly from the
macros used by the tests, i.e. if each test would need to specify a
FAIL_PTR_VAL or if we want to pass it in the macros, but that would mean
that the number of macros will explode again and we would have to figure
out a good names. So maybe it would be easier to pass them from each
test.
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v3 1/2] lib: TST_EXP_FAIL_PTR
2024-01-23 10:41 ` Cyril Hrubis
@ 2024-01-30 12:20 ` Petr Vorel
0 siblings, 0 replies; 40+ messages in thread
From: Petr Vorel @ 2024-01-30 12:20 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp
Hi Wei, Cyril,
> Hi!
> > +#define TST_EXP_FAIL_SILENT_PTR_(SCALL, SSCALL, ERRNOS, ERRNOS_CNT, ...) \
> > + do { \
> > + TESTPTR(SCALL); \
> > + \
> > + TST_PASS = 0; \
> > + \
> > + if (TST_RET_PTR) { \
> Unfortunatelly there are two types of calls, one returns NULL on a
> failure and the second returns (void *)-1, from the top of my head these
> are mmap(), shmat() and possibly other memory related syscalls.
> So I suppose that this macro needs another parameter for the actual
> value that is returned on a failure:
> #define TST_EXP_FAIL_SILENT_PTR_(SCALL, SSCALL, FAIL_PTR_VAL, ERRNOS, ...)
> do {
> TESTPTR(SCALL);
> ...
> if (TST_RET_PTR == FAILPTR_VAL) {
> ...
+1
> The hard question is if we want to pass this parameter explicitly from the
> macros used by the tests, i.e. if each test would need to specify a
> FAIL_PTR_VAL or if we want to pass it in the macros, but that would mean
> that the number of macros will explode again and we would have to figure
> out a good names. So maybe it would be easier to pass them from each
> test.
Names could be _NULL and _VOID, but I understand you want to limit number of
macros.
Wei, I guess testcases/kernel/syscalls/realpath/realpath01.c could use
TST_EXP_FAIL_PTR().
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v2] Add TST_EXP_FAIL_PTR
2024-01-17 9:49 ` Petr Vorel
@ 2024-01-30 12:21 ` Petr Vorel
0 siblings, 0 replies; 40+ messages in thread
From: Petr Vorel @ 2024-01-30 12:21 UTC (permalink / raw)
To: Wei Gao, ltp
> Hi Wei,
> subject should be: "lib: TST_EXP_{FAIL,PASS}_PTR"
I'm sorry, I did not concentrate enough. It was supposed to be
"lib: Add TST_EXP_FAIL_PTR{,_ARR}"
Kind regards,
Petr
> (can be changed before merge)
> Reviewed-by: Petr Vorel <pvorel@suse.cz>
> Thanks for adding a library test.
> If you send a patch for a test which actually uses these, we can merge it before
> the release. Otherwise I would wait for the merge after the release.
> Kind regards,
> Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* [LTP] [PATCH v4 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
2024-01-17 12:52 ` [LTP] [PATCH v3 0/2] lib: TST_EXP_FAIL_PTR Wei Gao via ltp
2024-01-17 12:52 ` [LTP] [PATCH v3 1/2] " Wei Gao via ltp
2024-01-17 12:52 ` [LTP] [PATCH v3 2/2] getcwd01: Implement .test_variants Wei Gao via ltp
@ 2024-02-08 1:32 ` Wei Gao via ltp
2024-02-08 1:32 ` [LTP] [PATCH v4 1/3] " Wei Gao via ltp
` (3 more replies)
2 siblings, 4 replies; 40+ messages in thread
From: Wei Gao via ltp @ 2024-02-08 1:32 UTC (permalink / raw)
To: ltp
Wei Gao (3):
lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
shmat02.c: Use TST_EXP_FAIL_PTR_VOID
realpath01.c: use TST_EXP_FAIL_PTR_NULL
include/tst_test_macros.h | 59 ++++++++++++++++++
lib/newlib_tests/.gitignore | 1 +
lib/newlib_tests/test_macros07.c | 61 +++++++++++++++++++
testcases/kernel/syscalls/ipc/shmat/shmat02.c | 15 +----
.../kernel/syscalls/realpath/realpath01.c | 11 +---
5 files changed, 123 insertions(+), 24 deletions(-)
create mode 100644 lib/newlib_tests/test_macros07.c
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* [LTP] [PATCH v4 1/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
2024-02-08 1:32 ` [LTP] [PATCH v4 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
@ 2024-02-08 1:32 ` Wei Gao via ltp
2024-03-20 10:47 ` Petr Vorel
2024-03-26 10:54 ` Cyril Hrubis
2024-02-08 1:32 ` [LTP] [PATCH v4 2/3] shmat02.c: Use TST_EXP_FAIL_PTR_VOID Wei Gao via ltp
` (2 subsequent siblings)
3 siblings, 2 replies; 40+ messages in thread
From: Wei Gao via ltp @ 2024-02-08 1:32 UTC (permalink / raw)
To: ltp
Signed-off-by: Wei Gao <wegao@suse.com>
---
include/tst_test_macros.h | 59 ++++++++++++++++++++++++++++++
lib/newlib_tests/.gitignore | 1 +
lib/newlib_tests/test_macros07.c | 61 ++++++++++++++++++++++++++++++++
3 files changed, 121 insertions(+)
create mode 100644 lib/newlib_tests/test_macros07.c
diff --git a/include/tst_test_macros.h b/include/tst_test_macros.h
index d2e50a219..1f5b56d27 100644
--- a/include/tst_test_macros.h
+++ b/include/tst_test_macros.h
@@ -227,6 +227,31 @@ const char *tst_errno_names(char *buf, const int *exp_errs, int exp_errs_cnt);
} \
} while (0)
+#define TST_EXP_FAIL_SILENT_PTR_(SCALL, SSCALL, FAIL_PTR_VAL, \
+ ERRNOS, ERRNOS_CNT, ...) \
+ do { \
+ TESTPTR(SCALL); \
+ \
+ TST_PASS = 0; \
+ \
+ if (TST_RET_PTR != FAIL_PTR_VAL) { \
+ TST_MSG_(TFAIL, " succeeded", SSCALL, ##__VA_ARGS__); \
+ break; \
+ } \
+ \
+ if (!tst_errno_in_set(TST_ERR, ERRNOS, ERRNOS_CNT)) { \
+ char tst_str_buf__[ERRNOS_CNT * 20]; \
+ TST_MSGP_(TFAIL | TTERRNO, " expected %s", \
+ tst_errno_names(tst_str_buf__, \
+ ERRNOS, ERRNOS_CNT), \
+ SSCALL, ##__VA_ARGS__); \
+ break; \
+ } \
+ \
+ TST_PASS = 1; \
+ \
+ } while (0)
+
#define TST_EXP_FAIL_ARR_(SCALL, SSCALL, EXP_ERRS, EXP_ERRS_CNT, ...) \
do { \
TST_EXP_FAIL_SILENT_(TST_RET == 0, SCALL, SSCALL, \
@@ -258,6 +283,40 @@ const char *tst_errno_names(char *buf, const int *exp_errs, int exp_errs_cnt);
TST_EXP_FAIL2_ARR_(SCALL, #SCALL, EXP_ERRS, \
ARRAY_SIZE(EXP_ERRS), ##__VA_ARGS__);
+#define TST_EXP_FAIL_PTR_NULL(SCALL, EXP_ERR, ...) \
+ do { \
+ int tst_exp_err__ = EXP_ERR; \
+ TST_EXP_FAIL_SILENT_PTR_(SCALL, #SCALL, NULL, \
+ &tst_exp_err__, 1, ##__VA_ARGS__); \
+ if (TST_PASS) \
+ TST_MSG_(TPASS | TTERRNO, " ", #SCALL, ##__VA_ARGS__); \
+ } while (0)
+
+#define TST_EXP_FAIL_PTR_ARR_NULL(SCALL, EXP_ERRS, ...) \
+ do { \
+ TST_EXP_FAIL_SILENT_PTR_(SCALL, #SCALL, NULL, \
+ EXP_ERRS, ARRAY_SIZE(EXP_ERRS), ##__VA_ARGS__); \
+ if (TST_PASS) \
+ TST_MSG_(TPASS | TTERRNO, " ", #SCALL, ##__VA_ARGS__); \
+ } while (0)
+
+#define TST_EXP_FAIL_PTR_VOID(SCALL, EXP_ERR, ...) \
+ do { \
+ int tst_exp_err__ = EXP_ERR; \
+ TST_EXP_FAIL_SILENT_PTR_(SCALL, #SCALL, (void *)-1, \
+ &tst_exp_err__, 1, ##__VA_ARGS__); \
+ if (TST_PASS) \
+ TST_MSG_(TPASS | TTERRNO, " ", #SCALL, ##__VA_ARGS__); \
+ } while (0)
+
+#define TST_EXP_FAIL_PTR_ARR_VOID(SCALL, EXP_ERRS, ...) \
+ do { \
+ TST_EXP_FAIL_SILENT_PTR_(SCALL, #SCALL, (void *)-1, \
+ EXP_ERRS, ARRAY_SIZE(EXP_ERRS), ##__VA_ARGS__); \
+ if (TST_PASS) \
+ TST_MSG_(TPASS | TTERRNO, " ", #SCALL, ##__VA_ARGS__); \
+ } while (0)
+
#define TST_EXP_FAIL2(SCALL, EXP_ERR, ...) \
do { \
int tst_exp_err__ = EXP_ERR; \
diff --git a/lib/newlib_tests/.gitignore b/lib/newlib_tests/.gitignore
index a69b29e24..4f43899e5 100644
--- a/lib/newlib_tests/.gitignore
+++ b/lib/newlib_tests/.gitignore
@@ -40,6 +40,7 @@ test_macros03
test_macros04
test_macros05
test_macros06
+test_macros07
tst_fuzzy_sync01
tst_fuzzy_sync02
tst_fuzzy_sync03
diff --git a/lib/newlib_tests/test_macros07.c b/lib/newlib_tests/test_macros07.c
new file mode 100644
index 000000000..ac361fd8e
--- /dev/null
+++ b/lib/newlib_tests/test_macros07.c
@@ -0,0 +1,61 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2024 Wei Gao <wegao@suse.com>
+ */
+
+/*
+ * Test TST_EXP_FAIL_PTR_{NULL,VOID} and TST_EXP_FAIL_PTR_ARR{NULL,VOID} macro.
+ */
+
+#include "tst_test.h"
+
+static char *fail_fn_null(void)
+{
+ errno = EINVAL;
+ return NULL;
+}
+
+static char *fail_fn_void(void)
+{
+ errno = EINVAL;
+ return (void *)-1;
+}
+
+static char *pass_fn(void)
+{
+ return "pass";
+}
+
+static void do_test(void)
+{
+ const int exp_errs_pass[] = {ENOTTY, EINVAL};
+ const int exp_errs_fail[] = {ENOTTY, EISDIR};
+
+ tst_res(TINFO, "Testing TST_EXP_FAIL_PTR_NULL macro");
+ TST_EXP_FAIL_PTR_NULL(fail_fn_null(), EINVAL, "fail_fn_null()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_NULL(fail_fn_null(), ENOTTY, "fail_fn_null()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_NULL(pass_fn(), ENOTTY, "pass_fn()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_ARR_NULL(fail_fn_null(), exp_errs_pass, "fail_fn_null()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_ARR_NULL(fail_fn_null(), exp_errs_fail, "fail_fn()_null");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+
+ tst_res(TINFO, "Testing TST_EXP_FAIL_PTR_VOID macro");
+ TST_EXP_FAIL_PTR_VOID(fail_fn_void(), EINVAL, "fail_fn_void()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_VOID(fail_fn_void(), ENOTTY, "fail_fn_void()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_VOID(pass_fn(), ENOTTY, "pass_fn()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_ARR_VOID(fail_fn_void(), exp_errs_pass, "fail_fn_void()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_ARR_VOID(fail_fn_void(), exp_errs_fail, "fail_fn()_void");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+}
+
+static struct tst_test test = {
+ .test_all = do_test,
+};
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [LTP] [PATCH v4 2/3] shmat02.c: Use TST_EXP_FAIL_PTR_VOID
2024-02-08 1:32 ` [LTP] [PATCH v4 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
2024-02-08 1:32 ` [LTP] [PATCH v4 1/3] " Wei Gao via ltp
@ 2024-02-08 1:32 ` Wei Gao via ltp
2024-03-20 10:47 ` Petr Vorel
2024-02-08 1:32 ` [LTP] [PATCH v4 3/3] realpath01.c: use TST_EXP_FAIL_PTR_NULL Wei Gao via ltp
2024-03-27 3:49 ` [LTP] [PATCH v5 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
3 siblings, 1 reply; 40+ messages in thread
From: Wei Gao via ltp @ 2024-02-08 1:32 UTC (permalink / raw)
To: ltp
Signed-off-by: Wei Gao <wegao@suse.com>
---
testcases/kernel/syscalls/ipc/shmat/shmat02.c | 15 +--------------
1 file changed, 1 insertion(+), 14 deletions(-)
diff --git a/testcases/kernel/syscalls/ipc/shmat/shmat02.c b/testcases/kernel/syscalls/ipc/shmat/shmat02.c
index 53cb6f542..3ad1fd08e 100644
--- a/testcases/kernel/syscalls/ipc/shmat/shmat02.c
+++ b/testcases/kernel/syscalls/ipc/shmat/shmat02.c
@@ -44,20 +44,7 @@ static struct test_case_t {
static void verify_shmat(struct test_case_t *tc)
{
- void *addr;
-
- addr = shmat(*tc->shmid, *tc->shmaddr, 0);
- if (addr != (void *)-1) {
- tst_res(TFAIL, "shmat() succeeded unexpectedly");
- return;
- }
-
- if (errno == tc->exp_err) {
- tst_res(TPASS | TERRNO, "shmat() failed as expected");
- } else {
- tst_res(TFAIL | TERRNO, "shmat() failed unexpectedly, expected: %s",
- tst_strerrno(tc->exp_err));
- }
+ TST_EXP_FAIL_PTR_VOID(shmat(*tc->shmid, *tc->shmaddr, 0), tc->exp_err);
}
static void do_shmat(unsigned int n)
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [LTP] [PATCH v4 3/3] realpath01.c: use TST_EXP_FAIL_PTR_NULL
2024-02-08 1:32 ` [LTP] [PATCH v4 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
2024-02-08 1:32 ` [LTP] [PATCH v4 1/3] " Wei Gao via ltp
2024-02-08 1:32 ` [LTP] [PATCH v4 2/3] shmat02.c: Use TST_EXP_FAIL_PTR_VOID Wei Gao via ltp
@ 2024-02-08 1:32 ` Wei Gao via ltp
2024-03-20 10:47 ` Petr Vorel
2024-03-27 3:49 ` [LTP] [PATCH v5 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
3 siblings, 1 reply; 40+ messages in thread
From: Wei Gao via ltp @ 2024-02-08 1:32 UTC (permalink / raw)
To: ltp
Signed-off-by: Wei Gao <wegao@suse.com>
---
testcases/kernel/syscalls/realpath/realpath01.c | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/testcases/kernel/syscalls/realpath/realpath01.c b/testcases/kernel/syscalls/realpath/realpath01.c
index c0381e9cb..c4c603609 100644
--- a/testcases/kernel/syscalls/realpath/realpath01.c
+++ b/testcases/kernel/syscalls/realpath/realpath01.c
@@ -24,16 +24,7 @@ static void setup(void)
static void run(void)
{
- TESTPTR(realpath(".", NULL));
-
- if (TST_ERR != ENOENT) {
- tst_res(TFAIL | TTERRNO, "returned unexpected errno");
- } else if (TST_RET_PTR != NULL) {
- tst_res(TFAIL, "syscall didn't return NULL: '%s'",
- (char *)TST_RET_PTR);
- } else {
- tst_res(TPASS, "bug not reproduced");
- }
+ TST_EXP_FAIL_PTR_NULL(realpath(".", NULL), ENOENT);
}
static struct tst_test test = {
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v4 1/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
2024-02-08 1:32 ` [LTP] [PATCH v4 1/3] " Wei Gao via ltp
@ 2024-03-20 10:47 ` Petr Vorel
2024-03-26 10:54 ` Cyril Hrubis
1 sibling, 0 replies; 40+ messages in thread
From: Petr Vorel @ 2024-03-20 10:47 UTC (permalink / raw)
To: Wei Gao; +Cc: ltp
Hi Wei,
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v4 2/3] shmat02.c: Use TST_EXP_FAIL_PTR_VOID
2024-02-08 1:32 ` [LTP] [PATCH v4 2/3] shmat02.c: Use TST_EXP_FAIL_PTR_VOID Wei Gao via ltp
@ 2024-03-20 10:47 ` Petr Vorel
0 siblings, 0 replies; 40+ messages in thread
From: Petr Vorel @ 2024-03-20 10:47 UTC (permalink / raw)
To: Wei Gao; +Cc: ltp
Hi Wei,
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v4 3/3] realpath01.c: use TST_EXP_FAIL_PTR_NULL
2024-02-08 1:32 ` [LTP] [PATCH v4 3/3] realpath01.c: use TST_EXP_FAIL_PTR_NULL Wei Gao via ltp
@ 2024-03-20 10:47 ` Petr Vorel
0 siblings, 0 replies; 40+ messages in thread
From: Petr Vorel @ 2024-03-20 10:47 UTC (permalink / raw)
To: Wei Gao; +Cc: ltp
Hi Wei,
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v4 1/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
2024-02-08 1:32 ` [LTP] [PATCH v4 1/3] " Wei Gao via ltp
2024-03-20 10:47 ` Petr Vorel
@ 2024-03-26 10:54 ` Cyril Hrubis
1 sibling, 0 replies; 40+ messages in thread
From: Cyril Hrubis @ 2024-03-26 10:54 UTC (permalink / raw)
To: Wei Gao; +Cc: ltp
Hi!
> +#define TST_EXP_FAIL_SILENT_PTR_(SCALL, SSCALL, FAIL_PTR_VAL, \
> + ERRNOS, ERRNOS_CNT, ...) \
> + do { \
> + TESTPTR(SCALL); \
> + \
> + TST_PASS = 0; \
> + \
> + if (TST_RET_PTR != FAIL_PTR_VAL) { \
> + TST_MSG_(TFAIL, " succeeded", SSCALL, ##__VA_ARGS__); \
> + break; \
> + } \
> + \
> + if (!tst_errno_in_set(TST_ERR, ERRNOS, ERRNOS_CNT)) { \
> + char tst_str_buf__[ERRNOS_CNT * 20]; \
> + TST_MSGP_(TFAIL | TTERRNO, " expected %s", \
> + tst_errno_names(tst_str_buf__, \
> + ERRNOS, ERRNOS_CNT), \
> + SSCALL, ##__VA_ARGS__); \
> + break; \
> + } \
> + \
> + TST_PASS = 1; \
> + \
> + } while (0)
> +
> #define TST_EXP_FAIL_ARR_(SCALL, SSCALL, EXP_ERRS, EXP_ERRS_CNT, ...) \
> do { \
> TST_EXP_FAIL_SILENT_(TST_RET == 0, SCALL, SSCALL, \
> @@ -258,6 +283,40 @@ const char *tst_errno_names(char *buf, const int *exp_errs, int exp_errs_cnt);
> TST_EXP_FAIL2_ARR_(SCALL, #SCALL, EXP_ERRS, \
> ARRAY_SIZE(EXP_ERRS), ##__VA_ARGS__);
>
> +#define TST_EXP_FAIL_PTR_NULL(SCALL, EXP_ERR, ...) \
> + do { \
> + int tst_exp_err__ = EXP_ERR; \
> + TST_EXP_FAIL_SILENT_PTR_(SCALL, #SCALL, NULL, \
> + &tst_exp_err__, 1, ##__VA_ARGS__); \
> + if (TST_PASS) \
> + TST_MSG_(TPASS | TTERRNO, " ", #SCALL, ##__VA_ARGS__); \
> + } while (0)
Given that the if (TST_PASS) message is same in all the cases we could
as well add TST_EX_FAIL_PTR_() and simplify all the
TST_EXP_FAIL_PTR_{NULL,ARR_NULL,VOID,ARR_VOID} to be build on the top of
that.
Other than that it looks good.
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* [LTP] [PATCH v5 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
2024-02-08 1:32 ` [LTP] [PATCH v4 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
` (2 preceding siblings ...)
2024-02-08 1:32 ` [LTP] [PATCH v4 3/3] realpath01.c: use TST_EXP_FAIL_PTR_NULL Wei Gao via ltp
@ 2024-03-27 3:49 ` Wei Gao via ltp
2024-03-27 3:49 ` [LTP] [PATCH v5 1/3] " Wei Gao via ltp
` (3 more replies)
3 siblings, 4 replies; 40+ messages in thread
From: Wei Gao via ltp @ 2024-03-27 3:49 UTC (permalink / raw)
To: ltp
Wei Gao (3):
lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
shmat02.c: Use TST_EXP_FAIL_PTR_VOID
realpath01.c: use TST_EXP_FAIL_PTR_NULL
include/tst_test_macros.h | 61 +++++++++++++++++++
lib/newlib_tests/.gitignore | 1 +
lib/newlib_tests/test_macros07.c | 61 +++++++++++++++++++
testcases/kernel/syscalls/ipc/shmat/shmat02.c | 15 +----
.../kernel/syscalls/realpath/realpath01.c | 11 +---
5 files changed, 125 insertions(+), 24 deletions(-)
create mode 100644 lib/newlib_tests/test_macros07.c
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* [LTP] [PATCH v5 1/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
2024-03-27 3:49 ` [LTP] [PATCH v5 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
@ 2024-03-27 3:49 ` Wei Gao via ltp
2024-03-28 11:29 ` Petr Vorel
` (2 more replies)
2024-03-27 3:49 ` [LTP] [PATCH v5 2/3] shmat02.c: Use TST_EXP_FAIL_PTR_VOID Wei Gao via ltp
` (2 subsequent siblings)
3 siblings, 3 replies; 40+ messages in thread
From: Wei Gao via ltp @ 2024-03-27 3:49 UTC (permalink / raw)
To: ltp
Signed-off-by: Wei Gao <wegao@suse.com>
---
include/tst_test_macros.h | 61 ++++++++++++++++++++++++++++++++
lib/newlib_tests/.gitignore | 1 +
lib/newlib_tests/test_macros07.c | 61 ++++++++++++++++++++++++++++++++
3 files changed, 123 insertions(+)
create mode 100644 lib/newlib_tests/test_macros07.c
diff --git a/include/tst_test_macros.h b/include/tst_test_macros.h
index d2e50a219..c70cad2f4 100644
--- a/include/tst_test_macros.h
+++ b/include/tst_test_macros.h
@@ -227,6 +227,41 @@ const char *tst_errno_names(char *buf, const int *exp_errs, int exp_errs_cnt);
} \
} while (0)
+#define TST_EXP_FAIL_SILENT_PTR_(SCALL, SSCALL, FAIL_PTR_VAL, \
+ ERRNOS, ERRNOS_CNT, ...) \
+ do { \
+ TESTPTR(SCALL); \
+ \
+ TST_PASS = 0; \
+ \
+ if (TST_RET_PTR != FAIL_PTR_VAL) { \
+ TST_MSG_(TFAIL, " succeeded", SSCALL, ##__VA_ARGS__); \
+ break; \
+ } \
+ \
+ if (!tst_errno_in_set(TST_ERR, ERRNOS, ERRNOS_CNT)) { \
+ char tst_str_buf__[ERRNOS_CNT * 20]; \
+ TST_MSGP_(TFAIL | TTERRNO, " expected %s", \
+ tst_errno_names(tst_str_buf__, \
+ ERRNOS, ERRNOS_CNT), \
+ SSCALL, ##__VA_ARGS__); \
+ break; \
+ } \
+ \
+ TST_PASS = 1; \
+ \
+ } while (0)
+
+#define TST_EXP_FAIL_PTR_(SCALL, SSCALL, FAIL_PTR_VAL, \
+ ERRNOS, ERRNOS_CNT, ...) \
+ do { \
+ TST_EXP_FAIL_SILENT_PTR_(SCALL, SSCALL, FAIL_PTR_VAL, \
+ ERRNOS, ERRNOS_CNT, ##__VA_ARGS__); \
+ if (TST_PASS) \
+ TST_MSG_(TPASS | TTERRNO, " ", SSCALL, ##__VA_ARGS__); \
+ } while (0)
+
+
#define TST_EXP_FAIL_ARR_(SCALL, SSCALL, EXP_ERRS, EXP_ERRS_CNT, ...) \
do { \
TST_EXP_FAIL_SILENT_(TST_RET == 0, SCALL, SSCALL, \
@@ -258,6 +293,32 @@ const char *tst_errno_names(char *buf, const int *exp_errs, int exp_errs_cnt);
TST_EXP_FAIL2_ARR_(SCALL, #SCALL, EXP_ERRS, \
ARRAY_SIZE(EXP_ERRS), ##__VA_ARGS__);
+#define TST_EXP_FAIL_PTR_NULL(SCALL, EXP_ERR, ...) \
+ do { \
+ int tst_exp_err__ = EXP_ERR; \
+ TST_EXP_FAIL_PTR_(SCALL, #SCALL, NULL, \
+ &tst_exp_err__, 1, ##__VA_ARGS__); \
+ } while (0)
+
+#define TST_EXP_FAIL_PTR_ARR_NULL(SCALL, EXP_ERRS, ...) \
+ do { \
+ TST_EXP_FAIL_PTR_(SCALL, #SCALL, NULL, \
+ EXP_ERRS, ARRAY_SIZE(EXP_ERRS), ##__VA_ARGS__); \
+ } while (0)
+
+#define TST_EXP_FAIL_PTR_VOID(SCALL, EXP_ERR, ...) \
+ do { \
+ int tst_exp_err__ = EXP_ERR; \
+ TST_EXP_FAIL_PTR_(SCALL, #SCALL, (void *)-1, \
+ &tst_exp_err__, 1, ##__VA_ARGS__); \
+ } while (0)
+
+#define TST_EXP_FAIL_PTR_ARR_VOID(SCALL, EXP_ERRS, ...) \
+ do { \
+ TST_EXP_FAIL_PTR_(SCALL, #SCALL, (void *)-1, \
+ EXP_ERRS, ARRAY_SIZE(EXP_ERRS), ##__VA_ARGS__); \
+ } while (0)
+
#define TST_EXP_FAIL2(SCALL, EXP_ERR, ...) \
do { \
int tst_exp_err__ = EXP_ERR; \
diff --git a/lib/newlib_tests/.gitignore b/lib/newlib_tests/.gitignore
index a69b29e24..4f43899e5 100644
--- a/lib/newlib_tests/.gitignore
+++ b/lib/newlib_tests/.gitignore
@@ -40,6 +40,7 @@ test_macros03
test_macros04
test_macros05
test_macros06
+test_macros07
tst_fuzzy_sync01
tst_fuzzy_sync02
tst_fuzzy_sync03
diff --git a/lib/newlib_tests/test_macros07.c b/lib/newlib_tests/test_macros07.c
new file mode 100644
index 000000000..ac361fd8e
--- /dev/null
+++ b/lib/newlib_tests/test_macros07.c
@@ -0,0 +1,61 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2024 Wei Gao <wegao@suse.com>
+ */
+
+/*
+ * Test TST_EXP_FAIL_PTR_{NULL,VOID} and TST_EXP_FAIL_PTR_ARR{NULL,VOID} macro.
+ */
+
+#include "tst_test.h"
+
+static char *fail_fn_null(void)
+{
+ errno = EINVAL;
+ return NULL;
+}
+
+static char *fail_fn_void(void)
+{
+ errno = EINVAL;
+ return (void *)-1;
+}
+
+static char *pass_fn(void)
+{
+ return "pass";
+}
+
+static void do_test(void)
+{
+ const int exp_errs_pass[] = {ENOTTY, EINVAL};
+ const int exp_errs_fail[] = {ENOTTY, EISDIR};
+
+ tst_res(TINFO, "Testing TST_EXP_FAIL_PTR_NULL macro");
+ TST_EXP_FAIL_PTR_NULL(fail_fn_null(), EINVAL, "fail_fn_null()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_NULL(fail_fn_null(), ENOTTY, "fail_fn_null()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_NULL(pass_fn(), ENOTTY, "pass_fn()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_ARR_NULL(fail_fn_null(), exp_errs_pass, "fail_fn_null()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_ARR_NULL(fail_fn_null(), exp_errs_fail, "fail_fn()_null");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+
+ tst_res(TINFO, "Testing TST_EXP_FAIL_PTR_VOID macro");
+ TST_EXP_FAIL_PTR_VOID(fail_fn_void(), EINVAL, "fail_fn_void()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_VOID(fail_fn_void(), ENOTTY, "fail_fn_void()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_VOID(pass_fn(), ENOTTY, "pass_fn()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_ARR_VOID(fail_fn_void(), exp_errs_pass, "fail_fn_void()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_ARR_VOID(fail_fn_void(), exp_errs_fail, "fail_fn()_void");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+}
+
+static struct tst_test test = {
+ .test_all = do_test,
+};
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [LTP] [PATCH v5 2/3] shmat02.c: Use TST_EXP_FAIL_PTR_VOID
2024-03-27 3:49 ` [LTP] [PATCH v5 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
2024-03-27 3:49 ` [LTP] [PATCH v5 1/3] " Wei Gao via ltp
@ 2024-03-27 3:49 ` Wei Gao via ltp
2024-03-27 3:49 ` [LTP] [PATCH v5 3/3] realpath01.c: use TST_EXP_FAIL_PTR_NULL Wei Gao via ltp
2024-04-03 3:28 ` [LTP] [PATCH v6 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
3 siblings, 0 replies; 40+ messages in thread
From: Wei Gao via ltp @ 2024-03-27 3:49 UTC (permalink / raw)
To: ltp
Signed-off-by: Wei Gao <wegao@suse.com>
Reviewed-by: Petr Vorel <pvorel@suse.cz>
---
testcases/kernel/syscalls/ipc/shmat/shmat02.c | 15 +--------------
1 file changed, 1 insertion(+), 14 deletions(-)
diff --git a/testcases/kernel/syscalls/ipc/shmat/shmat02.c b/testcases/kernel/syscalls/ipc/shmat/shmat02.c
index 53cb6f542..3ad1fd08e 100644
--- a/testcases/kernel/syscalls/ipc/shmat/shmat02.c
+++ b/testcases/kernel/syscalls/ipc/shmat/shmat02.c
@@ -44,20 +44,7 @@ static struct test_case_t {
static void verify_shmat(struct test_case_t *tc)
{
- void *addr;
-
- addr = shmat(*tc->shmid, *tc->shmaddr, 0);
- if (addr != (void *)-1) {
- tst_res(TFAIL, "shmat() succeeded unexpectedly");
- return;
- }
-
- if (errno == tc->exp_err) {
- tst_res(TPASS | TERRNO, "shmat() failed as expected");
- } else {
- tst_res(TFAIL | TERRNO, "shmat() failed unexpectedly, expected: %s",
- tst_strerrno(tc->exp_err));
- }
+ TST_EXP_FAIL_PTR_VOID(shmat(*tc->shmid, *tc->shmaddr, 0), tc->exp_err);
}
static void do_shmat(unsigned int n)
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [LTP] [PATCH v5 3/3] realpath01.c: use TST_EXP_FAIL_PTR_NULL
2024-03-27 3:49 ` [LTP] [PATCH v5 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
2024-03-27 3:49 ` [LTP] [PATCH v5 1/3] " Wei Gao via ltp
2024-03-27 3:49 ` [LTP] [PATCH v5 2/3] shmat02.c: Use TST_EXP_FAIL_PTR_VOID Wei Gao via ltp
@ 2024-03-27 3:49 ` Wei Gao via ltp
2024-04-03 3:28 ` [LTP] [PATCH v6 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
3 siblings, 0 replies; 40+ messages in thread
From: Wei Gao via ltp @ 2024-03-27 3:49 UTC (permalink / raw)
To: ltp
Signed-off-by: Wei Gao <wegao@suse.com>
Reviewed-by: Petr Vorel <pvorel@suse.cz>
---
testcases/kernel/syscalls/realpath/realpath01.c | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/testcases/kernel/syscalls/realpath/realpath01.c b/testcases/kernel/syscalls/realpath/realpath01.c
index c0381e9cb..c4c603609 100644
--- a/testcases/kernel/syscalls/realpath/realpath01.c
+++ b/testcases/kernel/syscalls/realpath/realpath01.c
@@ -24,16 +24,7 @@ static void setup(void)
static void run(void)
{
- TESTPTR(realpath(".", NULL));
-
- if (TST_ERR != ENOENT) {
- tst_res(TFAIL | TTERRNO, "returned unexpected errno");
- } else if (TST_RET_PTR != NULL) {
- tst_res(TFAIL, "syscall didn't return NULL: '%s'",
- (char *)TST_RET_PTR);
- } else {
- tst_res(TPASS, "bug not reproduced");
- }
+ TST_EXP_FAIL_PTR_NULL(realpath(".", NULL), ENOENT);
}
static struct tst_test test = {
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v5 1/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
2024-03-27 3:49 ` [LTP] [PATCH v5 1/3] " Wei Gao via ltp
@ 2024-03-28 11:29 ` Petr Vorel
2024-03-28 11:49 ` Petr Vorel
2024-03-28 12:11 ` Petr Vorel
2 siblings, 0 replies; 40+ messages in thread
From: Petr Vorel @ 2024-03-28 11:29 UTC (permalink / raw)
To: Wei Gao; +Cc: ltp
Hi Wei,
> --- /dev/null
> +++ b/lib/newlib_tests/test_macros07.c
nit: Instead of creating a new test I would add it to existing test_macros02.c
(it would reduce some duplicity).
Also having exp_errs_pass[] and exp_errs_fail[] static and put testing all 4
macros into it's own functions, I'll send a suggestion shortly.
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v5 1/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
2024-03-27 3:49 ` [LTP] [PATCH v5 1/3] " Wei Gao via ltp
2024-03-28 11:29 ` Petr Vorel
@ 2024-03-28 11:49 ` Petr Vorel
2024-03-28 11:57 ` Petr Vorel
2024-03-28 12:11 ` Petr Vorel
2 siblings, 1 reply; 40+ messages in thread
From: Petr Vorel @ 2024-03-28 11:49 UTC (permalink / raw)
To: Wei Gao; +Cc: ltp
Hi Wei,
> --- /dev/null
> +++ b/lib/newlib_tests/test_macros07.c
> @@ -0,0 +1,61 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2024 Wei Gao <wegao@suse.com>
> + */
> +
> +/*
> + * Test TST_EXP_FAIL_PTR_{NULL,VOID} and TST_EXP_FAIL_PTR_ARR{NULL,VOID} macro.
> + */
> +
> +#include "tst_test.h"
> +
> +static char *fail_fn_null(void)
> +{
> + errno = EINVAL;
> + return NULL;
> +}
> +
> +static char *fail_fn_void(void)
> +{
> + errno = EINVAL;
> + return (void *)-1;
> +}
> +
> +static char *pass_fn(void)
> +{
> + return "pass";
> +}
> +
> +static void do_test(void)
> +{
> + const int exp_errs_pass[] = {ENOTTY, EINVAL};
> + const int exp_errs_fail[] = {ENOTTY, EISDIR};
> +
> + tst_res(TINFO, "Testing TST_EXP_FAIL_PTR_NULL macro");
> + TST_EXP_FAIL_PTR_NULL(fail_fn_null(), EINVAL, "fail_fn_null()");
> + tst_res(TINFO, "TST_PASS = %i", TST_PASS);
> + TST_EXP_FAIL_PTR_NULL(fail_fn_null(), ENOTTY, "fail_fn_null()");
> + tst_res(TINFO, "TST_PASS = %i", TST_PASS);
> + TST_EXP_FAIL_PTR_NULL(pass_fn(), ENOTTY, "pass_fn()");
> + tst_res(TINFO, "TST_PASS = %i", TST_PASS);
> + TST_EXP_FAIL_PTR_ARR_NULL(fail_fn_null(), exp_errs_pass, "fail_fn_null()");
> + tst_res(TINFO, "TST_PASS = %i", TST_PASS);
> + TST_EXP_FAIL_PTR_ARR_NULL(fail_fn_null(), exp_errs_fail, "fail_fn()_null");
> + tst_res(TINFO, "TST_PASS = %i", TST_PASS);
> +
> + tst_res(TINFO, "Testing TST_EXP_FAIL_PTR_VOID macro");
> + TST_EXP_FAIL_PTR_VOID(fail_fn_void(), EINVAL, "fail_fn_void()");
> + tst_res(TINFO, "TST_PASS = %i", TST_PASS);
> + TST_EXP_FAIL_PTR_VOID(fail_fn_void(), ENOTTY, "fail_fn_void()");
> + tst_res(TINFO, "TST_PASS = %i", TST_PASS);
> + TST_EXP_FAIL_PTR_VOID(pass_fn(), ENOTTY, "pass_fn()");
> + tst_res(TINFO, "TST_PASS = %i", TST_PASS);
> + TST_EXP_FAIL_PTR_ARR_VOID(fail_fn_void(), exp_errs_pass, "fail_fn_void()");
> + tst_res(TINFO, "TST_PASS = %i", TST_PASS);
> + TST_EXP_FAIL_PTR_ARR_VOID(fail_fn_void(), exp_errs_fail, "fail_fn()_void");
> + tst_res(TINFO, "TST_PASS = %i", TST_PASS);
> +}
> +
> +static struct tst_test test = {
> + .test_all = do_test,
> +};
How about extend test_macros02.c (add testing macro, renaming functions to avoid clash,
add inval_ret_fn_char() which was missing in your version):
static int fail_fn(void)
{
errno = EINVAL;
return -1;
}
static int pass_fn(void)
{
return 0;
}
static int inval_ret_fn(void)
{
return 42;
}
static char *fail_fn_null(void)
{
errno = EINVAL;
return NULL;
}
static char *fail_fn_void(void)
{
errno = EINVAL;
return (void *)-1;
}
static char *inval_ret_fn_char(void)
{
return (void *)-1;
}
static char *pass_fn_char(void)
{
return "pass";
}
#define TEST_MACRO(macro, macro_arr, fail_fn, pass_fn, inval_fn) \
do { \
tst_res(TINFO, "Testing macro macro"); \
macro(fail_fn(), EINVAL, "fail_fn()"); \
tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
macro(fail_fn(), ENOTTY, "fail_fn()"); \
tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
macro(pass_fn(), ENOTTY, "pass_fn()"); \
tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
macro(inval_fn(), ENOTTY, "inval_fn()"); \
tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
macro_arr(fail_fn(), exp_errs_pass, "fail_fn()"); \
tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
macro_arr(fail_fn(), exp_errs_fail, "fail_fn()"); \
tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
} while (0)
static void do_test(void)
{
const int exp_errs_pass[] = {ENOTTY, EINVAL};
const int exp_errs_fail[] = {ENOTTY, EISDIR};
TEST_MACRO(TST_EXP_FAIL, TST_EXP_FAIL_ARR, fail_fn, pass_fn, inval_ret_fn);
TEST_MACRO(TST_EXP_FAIL2, TST_EXP_FAIL2_ARR, fail_fn, pass_fn, inval_ret_fn);
TEST_MACRO(TST_EXP_FAIL_PTR_NULL, TST_EXP_FAIL_PTR_ARR_NULL, fail_fn_null,
pass_fn_char, inval_ret_fn_char);
TEST_MACRO(TST_EXP_FAIL_PTR_VOID, TST_EXP_FAIL_PTR_ARR_VOID, fail_fn_void,
pass_fn_char, inval_ret_fn_char);
}
static struct tst_test test = {
.test_all = do_test,
};
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v5 1/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
2024-03-28 11:49 ` Petr Vorel
@ 2024-03-28 11:57 ` Petr Vorel
0 siblings, 0 replies; 40+ messages in thread
From: Petr Vorel @ 2024-03-28 11:57 UTC (permalink / raw)
To: Wei Gao, ltp
Hi Wei,
> Hi Wei,
...
> #define TEST_MACRO(macro, macro_arr, fail_fn, pass_fn, inval_fn) \
> do { \
> tst_res(TINFO, "Testing macro macro"); \
> macro(fail_fn(), EINVAL, "fail_fn()"); \
> tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
> macro(fail_fn(), ENOTTY, "fail_fn()"); \
> tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
> macro(pass_fn(), ENOTTY, "pass_fn()"); \
> tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
> macro(inval_fn(), ENOTTY, "inval_fn()"); \
> tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
> macro_arr(fail_fn(), exp_errs_pass, "fail_fn()"); \
> tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
> macro_arr(fail_fn(), exp_errs_fail, "fail_fn()"); \
> tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
> } while (0)
Actually this (print real function with #macro and #macro_arr,
2x skip message parameter (to test also macro without error parameter):
#define TEST_MACRO(macro, macro_arr, fail_fn, pass_fn, inval_fn) \
do { \
tst_res(TINFO, "Testing " #macro " macro"); \
macro(fail_fn(), EINVAL, #fail_fn"()"); \
tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
macro(fail_fn(), ENOTTY); /* skip msg parameter */ \
tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
macro(pass_fn(), ENOTTY, #pass_fn"()"); \
tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
macro(inval_fn(), ENOTTY, #inval_fn"()"); \
tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
macro_arr(fail_fn(), exp_errs_pass, #fail_fn"()"); \
tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
macro_arr(fail_fn(), exp_errs_fail); /* skip msg parameter */ \
tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
} while (0)
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v5 1/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
2024-03-27 3:49 ` [LTP] [PATCH v5 1/3] " Wei Gao via ltp
2024-03-28 11:29 ` Petr Vorel
2024-03-28 11:49 ` Petr Vorel
@ 2024-03-28 12:11 ` Petr Vorel
2 siblings, 0 replies; 40+ messages in thread
From: Petr Vorel @ 2024-03-28 12:11 UTC (permalink / raw)
To: Wei Gao; +Cc: ltp
Hi Wei,
...
> #define TST_EXP_FAIL_ARR_(SCALL, SSCALL, EXP_ERRS, EXP_ERRS_CNT, ...) \
> do { \
> TST_EXP_FAIL_SILENT_(TST_RET == 0, SCALL, SSCALL, \
> @@ -258,6 +293,32 @@ const char *tst_errno_names(char *buf, const int *exp_errs, int exp_errs_cnt);
> TST_EXP_FAIL2_ARR_(SCALL, #SCALL, EXP_ERRS, \
> ARRAY_SIZE(EXP_ERRS), ##__VA_ARGS__);
> +#define TST_EXP_FAIL_PTR_NULL(SCALL, EXP_ERR, ...) \
> + do { \
> + int tst_exp_err__ = EXP_ERR; \
> + TST_EXP_FAIL_PTR_(SCALL, #SCALL, NULL, \
> + &tst_exp_err__, 1, ##__VA_ARGS__); \
> + } while (0)
> +
> +#define TST_EXP_FAIL_PTR_ARR_NULL(SCALL, EXP_ERRS, ...) \
> + do { \
> + TST_EXP_FAIL_PTR_(SCALL, #SCALL, NULL, \
> + EXP_ERRS, ARRAY_SIZE(EXP_ERRS), ##__VA_ARGS__); \
FYI I send a patch [1] (Cyril's suggestion) replacing ARRAY_SIZE() with just
size parameter. I.e. moving ARRAY_SIZE() to the caller. This allows to use array
of expected errnos more flexibly, e.g. fanotify14 [2].
Could you please send another version, which will be based on my v3 patchset or
just wait before it's merged and rebase?
Kind regards,
Petr
[1] https://lore.kernel.org/ltp/20240326144145.747735-3-pvorel@suse.cz/
[2] https://lore.kernel.org/ltp/20240326144145.747735-4-pvorel@suse.cz/
[3] https://patchwork.ozlabs.org/project/ltp/list/?series=400495
> + } while (0)
> +
> +#define TST_EXP_FAIL_PTR_VOID(SCALL, EXP_ERR, ...) \
> + do { \
> + int tst_exp_err__ = EXP_ERR; \
> + TST_EXP_FAIL_PTR_(SCALL, #SCALL, (void *)-1, \
> + &tst_exp_err__, 1, ##__VA_ARGS__); \
> + } while (0)
> +
> +#define TST_EXP_FAIL_PTR_ARR_VOID(SCALL, EXP_ERRS, ...) \
> + do { \
> + TST_EXP_FAIL_PTR_(SCALL, #SCALL, (void *)-1, \
> + EXP_ERRS, ARRAY_SIZE(EXP_ERRS), ##__VA_ARGS__); \
> + } while (0)
> +
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* [LTP] [PATCH v6 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
2024-03-27 3:49 ` [LTP] [PATCH v5 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
` (2 preceding siblings ...)
2024-03-27 3:49 ` [LTP] [PATCH v5 3/3] realpath01.c: use TST_EXP_FAIL_PTR_NULL Wei Gao via ltp
@ 2024-04-03 3:28 ` Wei Gao via ltp
2024-04-03 3:28 ` [LTP] [PATCH v6 1/3] " Wei Gao via ltp
` (2 more replies)
3 siblings, 3 replies; 40+ messages in thread
From: Wei Gao via ltp @ 2024-04-03 3:28 UTC (permalink / raw)
To: ltp
Wei Gao (3):
lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
shmat02.c: Use TST_EXP_FAIL_PTR_VOID
realpath01.c: use TST_EXP_FAIL_PTR_NULL
include/tst_test_macros.h | 61 +++++++++++++++++++
lib/newlib_tests/.gitignore | 1 +
lib/newlib_tests/test_macros07.c | 61 +++++++++++++++++++
testcases/kernel/syscalls/ipc/shmat/shmat02.c | 15 +----
.../kernel/syscalls/realpath/realpath01.c | 11 +---
5 files changed, 125 insertions(+), 24 deletions(-)
create mode 100644 lib/newlib_tests/test_macros07.c
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* [LTP] [PATCH v6 1/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
2024-04-03 3:28 ` [LTP] [PATCH v6 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
@ 2024-04-03 3:28 ` Wei Gao via ltp
2024-04-04 13:51 ` Cyril Hrubis
2024-04-03 3:28 ` [LTP] [PATCH v6 2/3] shmat02.c: Use TST_EXP_FAIL_PTR_VOID Wei Gao via ltp
2024-04-03 3:28 ` [LTP] [PATCH v6 3/3] realpath01.c: use TST_EXP_FAIL_PTR_NULL Wei Gao via ltp
2 siblings, 1 reply; 40+ messages in thread
From: Wei Gao via ltp @ 2024-04-03 3:28 UTC (permalink / raw)
To: ltp
Signed-off-by: Wei Gao <wegao@suse.com>
---
include/tst_test_macros.h | 61 ++++++++++++++++++++++++++++++++
lib/newlib_tests/.gitignore | 1 +
lib/newlib_tests/test_macros07.c | 61 ++++++++++++++++++++++++++++++++
3 files changed, 123 insertions(+)
create mode 100644 lib/newlib_tests/test_macros07.c
diff --git a/include/tst_test_macros.h b/include/tst_test_macros.h
index 6a7bcdce5..eff3aef69 100644
--- a/include/tst_test_macros.h
+++ b/include/tst_test_macros.h
@@ -227,6 +227,41 @@ const char *tst_errno_names(char *buf, const int *exp_errs, int exp_errs_cnt);
} \
} while (0)
+#define TST_EXP_FAIL_SILENT_PTR_(SCALL, SSCALL, FAIL_PTR_VAL, \
+ ERRNOS, ERRNOS_CNT, ...) \
+ do { \
+ TESTPTR(SCALL); \
+ \
+ TST_PASS = 0; \
+ \
+ if (TST_RET_PTR != FAIL_PTR_VAL) { \
+ TST_MSG_(TFAIL, " succeeded", SSCALL, ##__VA_ARGS__); \
+ break; \
+ } \
+ \
+ if (!tst_errno_in_set(TST_ERR, ERRNOS, ERRNOS_CNT)) { \
+ char tst_str_buf__[ERRNOS_CNT * 20]; \
+ TST_MSGP_(TFAIL | TTERRNO, " expected %s", \
+ tst_errno_names(tst_str_buf__, \
+ ERRNOS, ERRNOS_CNT), \
+ SSCALL, ##__VA_ARGS__); \
+ break; \
+ } \
+ \
+ TST_PASS = 1; \
+ \
+ } while (0)
+
+#define TST_EXP_FAIL_PTR_(SCALL, SSCALL, FAIL_PTR_VAL, \
+ ERRNOS, ERRNOS_CNT, ...) \
+ do { \
+ TST_EXP_FAIL_SILENT_PTR_(SCALL, SSCALL, FAIL_PTR_VAL, \
+ ERRNOS, ERRNOS_CNT, ##__VA_ARGS__); \
+ if (TST_PASS) \
+ TST_MSG_(TPASS | TTERRNO, " ", SSCALL, ##__VA_ARGS__); \
+ } while (0)
+
+
#define TST_EXP_FAIL_ARR_(SCALL, SSCALL, EXP_ERRS, EXP_ERRS_CNT, ...) \
do { \
TST_EXP_FAIL_SILENT_(TST_RET == 0, SCALL, SSCALL, \
@@ -258,6 +293,32 @@ const char *tst_errno_names(char *buf, const int *exp_errs, int exp_errs_cnt);
TST_EXP_FAIL2_ARR_(SCALL, #SCALL, EXP_ERRS, \
EXP_ERRS_CNT, ##__VA_ARGS__);
+#define TST_EXP_FAIL_PTR_NULL(SCALL, EXP_ERR, ...) \
+ do { \
+ int tst_exp_err__ = EXP_ERR; \
+ TST_EXP_FAIL_PTR_(SCALL, #SCALL, NULL, \
+ &tst_exp_err__, 1, ##__VA_ARGS__); \
+ } while (0)
+
+#define TST_EXP_FAIL_PTR_ARR_NULL(SCALL, EXP_ERRS, ...) \
+ do { \
+ TST_EXP_FAIL_PTR_(SCALL, #SCALL, NULL, \
+ EXP_ERRS, ARRAY_SIZE(EXP_ERRS), ##__VA_ARGS__); \
+ } while (0)
+
+#define TST_EXP_FAIL_PTR_VOID(SCALL, EXP_ERR, ...) \
+ do { \
+ int tst_exp_err__ = EXP_ERR; \
+ TST_EXP_FAIL_PTR_(SCALL, #SCALL, (void *)-1, \
+ &tst_exp_err__, 1, ##__VA_ARGS__); \
+ } while (0)
+
+#define TST_EXP_FAIL_PTR_ARR_VOID(SCALL, EXP_ERRS, ...) \
+ do { \
+ TST_EXP_FAIL_PTR_(SCALL, #SCALL, (void *)-1, \
+ EXP_ERRS, ARRAY_SIZE(EXP_ERRS), ##__VA_ARGS__); \
+ } while (0)
+
#define TST_EXP_FAIL2(SCALL, EXP_ERR, ...) \
do { \
int tst_exp_err__ = EXP_ERR; \
diff --git a/lib/newlib_tests/.gitignore b/lib/newlib_tests/.gitignore
index 6d125f933..ed10d860a 100644
--- a/lib/newlib_tests/.gitignore
+++ b/lib/newlib_tests/.gitignore
@@ -41,6 +41,7 @@ test_macros03
test_macros04
test_macros05
test_macros06
+test_macros07
tst_fuzzy_sync01
tst_fuzzy_sync02
tst_fuzzy_sync03
diff --git a/lib/newlib_tests/test_macros07.c b/lib/newlib_tests/test_macros07.c
new file mode 100644
index 000000000..ac361fd8e
--- /dev/null
+++ b/lib/newlib_tests/test_macros07.c
@@ -0,0 +1,61 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2024 Wei Gao <wegao@suse.com>
+ */
+
+/*
+ * Test TST_EXP_FAIL_PTR_{NULL,VOID} and TST_EXP_FAIL_PTR_ARR{NULL,VOID} macro.
+ */
+
+#include "tst_test.h"
+
+static char *fail_fn_null(void)
+{
+ errno = EINVAL;
+ return NULL;
+}
+
+static char *fail_fn_void(void)
+{
+ errno = EINVAL;
+ return (void *)-1;
+}
+
+static char *pass_fn(void)
+{
+ return "pass";
+}
+
+static void do_test(void)
+{
+ const int exp_errs_pass[] = {ENOTTY, EINVAL};
+ const int exp_errs_fail[] = {ENOTTY, EISDIR};
+
+ tst_res(TINFO, "Testing TST_EXP_FAIL_PTR_NULL macro");
+ TST_EXP_FAIL_PTR_NULL(fail_fn_null(), EINVAL, "fail_fn_null()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_NULL(fail_fn_null(), ENOTTY, "fail_fn_null()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_NULL(pass_fn(), ENOTTY, "pass_fn()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_ARR_NULL(fail_fn_null(), exp_errs_pass, "fail_fn_null()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_ARR_NULL(fail_fn_null(), exp_errs_fail, "fail_fn()_null");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+
+ tst_res(TINFO, "Testing TST_EXP_FAIL_PTR_VOID macro");
+ TST_EXP_FAIL_PTR_VOID(fail_fn_void(), EINVAL, "fail_fn_void()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_VOID(fail_fn_void(), ENOTTY, "fail_fn_void()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_VOID(pass_fn(), ENOTTY, "pass_fn()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_ARR_VOID(fail_fn_void(), exp_errs_pass, "fail_fn_void()");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+ TST_EXP_FAIL_PTR_ARR_VOID(fail_fn_void(), exp_errs_fail, "fail_fn()_void");
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS);
+}
+
+static struct tst_test test = {
+ .test_all = do_test,
+};
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [LTP] [PATCH v6 2/3] shmat02.c: Use TST_EXP_FAIL_PTR_VOID
2024-04-03 3:28 ` [LTP] [PATCH v6 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
2024-04-03 3:28 ` [LTP] [PATCH v6 1/3] " Wei Gao via ltp
@ 2024-04-03 3:28 ` Wei Gao via ltp
2024-04-03 3:28 ` [LTP] [PATCH v6 3/3] realpath01.c: use TST_EXP_FAIL_PTR_NULL Wei Gao via ltp
2 siblings, 0 replies; 40+ messages in thread
From: Wei Gao via ltp @ 2024-04-03 3:28 UTC (permalink / raw)
To: ltp
Signed-off-by: Wei Gao <wegao@suse.com>
---
testcases/kernel/syscalls/ipc/shmat/shmat02.c | 15 +--------------
1 file changed, 1 insertion(+), 14 deletions(-)
diff --git a/testcases/kernel/syscalls/ipc/shmat/shmat02.c b/testcases/kernel/syscalls/ipc/shmat/shmat02.c
index 53cb6f542..3ad1fd08e 100644
--- a/testcases/kernel/syscalls/ipc/shmat/shmat02.c
+++ b/testcases/kernel/syscalls/ipc/shmat/shmat02.c
@@ -44,20 +44,7 @@ static struct test_case_t {
static void verify_shmat(struct test_case_t *tc)
{
- void *addr;
-
- addr = shmat(*tc->shmid, *tc->shmaddr, 0);
- if (addr != (void *)-1) {
- tst_res(TFAIL, "shmat() succeeded unexpectedly");
- return;
- }
-
- if (errno == tc->exp_err) {
- tst_res(TPASS | TERRNO, "shmat() failed as expected");
- } else {
- tst_res(TFAIL | TERRNO, "shmat() failed unexpectedly, expected: %s",
- tst_strerrno(tc->exp_err));
- }
+ TST_EXP_FAIL_PTR_VOID(shmat(*tc->shmid, *tc->shmaddr, 0), tc->exp_err);
}
static void do_shmat(unsigned int n)
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [LTP] [PATCH v6 3/3] realpath01.c: use TST_EXP_FAIL_PTR_NULL
2024-04-03 3:28 ` [LTP] [PATCH v6 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
2024-04-03 3:28 ` [LTP] [PATCH v6 1/3] " Wei Gao via ltp
2024-04-03 3:28 ` [LTP] [PATCH v6 2/3] shmat02.c: Use TST_EXP_FAIL_PTR_VOID Wei Gao via ltp
@ 2024-04-03 3:28 ` Wei Gao via ltp
2 siblings, 0 replies; 40+ messages in thread
From: Wei Gao via ltp @ 2024-04-03 3:28 UTC (permalink / raw)
To: ltp
Signed-off-by: Wei Gao <wegao@suse.com>
---
include/tst_test_macros.h | 8 ++++----
lib/newlib_tests/test_macros07.c | 8 ++++----
testcases/kernel/syscalls/realpath/realpath01.c | 11 +----------
3 files changed, 9 insertions(+), 18 deletions(-)
diff --git a/include/tst_test_macros.h b/include/tst_test_macros.h
index eff3aef69..88c329333 100644
--- a/include/tst_test_macros.h
+++ b/include/tst_test_macros.h
@@ -300,10 +300,10 @@ const char *tst_errno_names(char *buf, const int *exp_errs, int exp_errs_cnt);
&tst_exp_err__, 1, ##__VA_ARGS__); \
} while (0)
-#define TST_EXP_FAIL_PTR_ARR_NULL(SCALL, EXP_ERRS, ...) \
+#define TST_EXP_FAIL_PTR_ARR_NULL(SCALL, EXP_ERRS, EXP_ERRS_CNT, ...) \
do { \
TST_EXP_FAIL_PTR_(SCALL, #SCALL, NULL, \
- EXP_ERRS, ARRAY_SIZE(EXP_ERRS), ##__VA_ARGS__); \
+ EXP_ERRS, EXP_ERRS_CNT, ##__VA_ARGS__); \
} while (0)
#define TST_EXP_FAIL_PTR_VOID(SCALL, EXP_ERR, ...) \
@@ -313,10 +313,10 @@ const char *tst_errno_names(char *buf, const int *exp_errs, int exp_errs_cnt);
&tst_exp_err__, 1, ##__VA_ARGS__); \
} while (0)
-#define TST_EXP_FAIL_PTR_ARR_VOID(SCALL, EXP_ERRS, ...) \
+#define TST_EXP_FAIL_PTR_ARR_VOID(SCALL, EXP_ERRS, EXP_ERRS_CNT, ...) \
do { \
TST_EXP_FAIL_PTR_(SCALL, #SCALL, (void *)-1, \
- EXP_ERRS, ARRAY_SIZE(EXP_ERRS), ##__VA_ARGS__); \
+ EXP_ERRS, EXP_ERRS_CNT, ##__VA_ARGS__); \
} while (0)
#define TST_EXP_FAIL2(SCALL, EXP_ERR, ...) \
diff --git a/lib/newlib_tests/test_macros07.c b/lib/newlib_tests/test_macros07.c
index ac361fd8e..6015988cf 100644
--- a/lib/newlib_tests/test_macros07.c
+++ b/lib/newlib_tests/test_macros07.c
@@ -38,9 +38,9 @@ static void do_test(void)
tst_res(TINFO, "TST_PASS = %i", TST_PASS);
TST_EXP_FAIL_PTR_NULL(pass_fn(), ENOTTY, "pass_fn()");
tst_res(TINFO, "TST_PASS = %i", TST_PASS);
- TST_EXP_FAIL_PTR_ARR_NULL(fail_fn_null(), exp_errs_pass, "fail_fn_null()");
+ TST_EXP_FAIL_PTR_ARR_NULL(fail_fn_null(), exp_errs_pass, ARRAY_SIZE(exp_errs_pass), "fail_fn_null()");
tst_res(TINFO, "TST_PASS = %i", TST_PASS);
- TST_EXP_FAIL_PTR_ARR_NULL(fail_fn_null(), exp_errs_fail, "fail_fn()_null");
+ TST_EXP_FAIL_PTR_ARR_NULL(fail_fn_null(), exp_errs_fail, ARRAY_SIZE(exp_errs_fail), "fail_fn()_null");
tst_res(TINFO, "TST_PASS = %i", TST_PASS);
tst_res(TINFO, "Testing TST_EXP_FAIL_PTR_VOID macro");
@@ -50,9 +50,9 @@ static void do_test(void)
tst_res(TINFO, "TST_PASS = %i", TST_PASS);
TST_EXP_FAIL_PTR_VOID(pass_fn(), ENOTTY, "pass_fn()");
tst_res(TINFO, "TST_PASS = %i", TST_PASS);
- TST_EXP_FAIL_PTR_ARR_VOID(fail_fn_void(), exp_errs_pass, "fail_fn_void()");
+ TST_EXP_FAIL_PTR_ARR_VOID(fail_fn_void(), exp_errs_pass, ARRAY_SIZE(exp_errs_pass), "fail_fn_void()");
tst_res(TINFO, "TST_PASS = %i", TST_PASS);
- TST_EXP_FAIL_PTR_ARR_VOID(fail_fn_void(), exp_errs_fail, "fail_fn()_void");
+ TST_EXP_FAIL_PTR_ARR_VOID(fail_fn_void(), exp_errs_fail, ARRAY_SIZE(exp_errs_fail), "fail_fn()_void");
tst_res(TINFO, "TST_PASS = %i", TST_PASS);
}
diff --git a/testcases/kernel/syscalls/realpath/realpath01.c b/testcases/kernel/syscalls/realpath/realpath01.c
index c0381e9cb..c4c603609 100644
--- a/testcases/kernel/syscalls/realpath/realpath01.c
+++ b/testcases/kernel/syscalls/realpath/realpath01.c
@@ -24,16 +24,7 @@ static void setup(void)
static void run(void)
{
- TESTPTR(realpath(".", NULL));
-
- if (TST_ERR != ENOENT) {
- tst_res(TFAIL | TTERRNO, "returned unexpected errno");
- } else if (TST_RET_PTR != NULL) {
- tst_res(TFAIL, "syscall didn't return NULL: '%s'",
- (char *)TST_RET_PTR);
- } else {
- tst_res(TPASS, "bug not reproduced");
- }
+ TST_EXP_FAIL_PTR_NULL(realpath(".", NULL), ENOENT);
}
static struct tst_test test = {
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v6 1/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
2024-04-03 3:28 ` [LTP] [PATCH v6 1/3] " Wei Gao via ltp
@ 2024-04-04 13:51 ` Cyril Hrubis
2024-04-04 16:01 ` Petr Vorel
0 siblings, 1 reply; 40+ messages in thread
From: Cyril Hrubis @ 2024-04-04 13:51 UTC (permalink / raw)
To: Wei Gao; +Cc: ltp
Hi!
This one looks good, I would wote for merging it now, however the
subject suggests that the TST_EXP_PASS_PTR_* functions are implemented
here as well, which isn't the case.
So I propse to fix the subject to include only EXP_FAIL_ and merge this
then add the EXP_PASS_ variants in another patch.
With that:
Reviewed-by: Cyril Hrubis <chrubis@suse.cz> for the whole patchset.
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v6 1/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
2024-04-04 13:51 ` Cyril Hrubis
@ 2024-04-04 16:01 ` Petr Vorel
2024-04-05 8:53 ` Cyril Hrubis
0 siblings, 1 reply; 40+ messages in thread
From: Petr Vorel @ 2024-04-04 16:01 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp
Hi Cyril, Wei,
> Hi!
> This one looks good, I would wote for merging it now, however the
> subject suggests that the TST_EXP_PASS_PTR_* functions are implemented
> here as well, which isn't the case.
> So I propse to fix the subject to include only EXP_FAIL_ and merge this
> then add the EXP_PASS_ variants in another patch.
Sure, I'll fix that before merge.
BTW I fix that in the v6 patchset which I sent (and I Cc Wei and you) before Wei
sent his v6 (my only change was adding everything into test_macros02 and use
macros to shorten the code as more macros will be added to it in the future. I
suppose you prefer the original code as you acked this).
Kind regards,
Petr
[1] https://patchwork.ozlabs.org/project/ltp/patch/20240328162939.100872-2-pvorel@suse.cz/
> With that:
> Reviewed-by: Cyril Hrubis <chrubis@suse.cz> for the whole patchset.
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v6 1/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
2024-04-04 16:01 ` Petr Vorel
@ 2024-04-05 8:53 ` Cyril Hrubis
2024-04-05 10:28 ` Petr Vorel
0 siblings, 1 reply; 40+ messages in thread
From: Cyril Hrubis @ 2024-04-05 8:53 UTC (permalink / raw)
To: Petr Vorel; +Cc: ltp
Hi!
> > This one looks good, I would wote for merging it now, however the
> > subject suggests that the TST_EXP_PASS_PTR_* functions are implemented
> > here as well, which isn't the case.
>
> > So I propse to fix the subject to include only EXP_FAIL_ and merge this
> > then add the EXP_PASS_ variants in another patch.
>
> Sure, I'll fix that before merge.
>
> BTW I fix that in the v6 patchset which I sent (and I Cc Wei and you) before Wei
> sent his v6 (my only change was adding everything into test_macros02 and use
> macros to shorten the code as more macros will be added to it in the future. I
> suppose you prefer the original code as you acked this).
I'm simply lost in the number of iterations for this patch. Also I do
not think that reducing the duplication in the library test is that
important, but feel free to push that with my reviewed-by as well.
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v6 1/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
2024-04-05 8:53 ` Cyril Hrubis
@ 2024-04-05 10:28 ` Petr Vorel
2024-04-05 11:23 ` Cyril Hrubis
0 siblings, 1 reply; 40+ messages in thread
From: Petr Vorel @ 2024-04-05 10:28 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp
> Hi!
> > > This one looks good, I would wote for merging it now, however the
> > > subject suggests that the TST_EXP_PASS_PTR_* functions are implemented
> > > here as well, which isn't the case.
> > > So I propse to fix the subject to include only EXP_FAIL_ and merge this
> > > then add the EXP_PASS_ variants in another patch.
> > Sure, I'll fix that before merge.
> > BTW I fix that in the v6 patchset which I sent (and I Cc Wei and you) before Wei
> > sent his v6 (my only change was adding everything into test_macros02 and use
> > macros to shorten the code as more macros will be added to it in the future. I
> > suppose you prefer the original code as you acked this).
> I'm simply lost in the number of iterations for this patch. Also I do
> not think that reducing the duplication in the library test is that
> important, but feel free to push that with my reviewed-by as well.
Thanks, merged with that extra commit.
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v6 1/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
2024-04-05 10:28 ` Petr Vorel
@ 2024-04-05 11:23 ` Cyril Hrubis
2024-04-05 14:03 ` Petr Vorel
0 siblings, 1 reply; 40+ messages in thread
From: Cyril Hrubis @ 2024-04-05 11:23 UTC (permalink / raw)
To: Petr Vorel; +Cc: ltp
Hi!
Also is anybody going to work on the PASS variant? Looks like the huge*
tests would need that...
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v6 1/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
2024-04-05 11:23 ` Cyril Hrubis
@ 2024-04-05 14:03 ` Petr Vorel
2024-04-07 23:31 ` Wei Gao via ltp
0 siblings, 1 reply; 40+ messages in thread
From: Petr Vorel @ 2024-04-05 14:03 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp
Hi Cyril, Wei,
merged with the cleanup commit before.
> Hi!
> Also is anybody going to work on the PASS variant? Looks like the huge*
> tests would need that...
@Wei I suppose you plan to work on it. If not, please let us know.
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [LTP] [PATCH v6 1/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID}
2024-04-05 14:03 ` Petr Vorel
@ 2024-04-07 23:31 ` Wei Gao via ltp
0 siblings, 0 replies; 40+ messages in thread
From: Wei Gao via ltp @ 2024-04-07 23:31 UTC (permalink / raw)
To: Petr Vorel; +Cc: ltp
On Fri, Apr 05, 2024 at 04:03:25PM +0200, Petr Vorel wrote:
> Hi Cyril, Wei,
>
> merged with the cleanup commit before.
>
> > Hi!
> > Also is anybody going to work on the PASS variant? Looks like the huge*
> > tests would need that...
>
> @Wei I suppose you plan to work on it. If not, please let us know.
Sure, i will work on this.
>
> Kind regards,
> Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 40+ messages in thread
end of thread, other threads:[~2024-04-07 23:32 UTC | newest]
Thread overview: 40+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-11 1:26 [LTP] [PATCH v1] Add TST_EXP_FAIL_PTR Wei Gao via ltp
2024-01-16 17:49 ` Petr Vorel
2024-01-17 8:07 ` Wei Gao via ltp
2024-01-17 8:04 ` [LTP] [PATCH v2] " Wei Gao via ltp
2024-01-17 9:49 ` Petr Vorel
2024-01-30 12:21 ` Petr Vorel
2024-01-17 12:52 ` [LTP] [PATCH v3 0/2] lib: TST_EXP_FAIL_PTR Wei Gao via ltp
2024-01-17 12:52 ` [LTP] [PATCH v3 1/2] " Wei Gao via ltp
2024-01-23 8:45 ` Petr Vorel
2024-01-23 10:41 ` Cyril Hrubis
2024-01-30 12:20 ` Petr Vorel
2024-01-17 12:52 ` [LTP] [PATCH v3 2/2] getcwd01: Implement .test_variants Wei Gao via ltp
2024-01-23 9:45 ` Petr Vorel
2024-02-08 1:32 ` [LTP] [PATCH v4 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
2024-02-08 1:32 ` [LTP] [PATCH v4 1/3] " Wei Gao via ltp
2024-03-20 10:47 ` Petr Vorel
2024-03-26 10:54 ` Cyril Hrubis
2024-02-08 1:32 ` [LTP] [PATCH v4 2/3] shmat02.c: Use TST_EXP_FAIL_PTR_VOID Wei Gao via ltp
2024-03-20 10:47 ` Petr Vorel
2024-02-08 1:32 ` [LTP] [PATCH v4 3/3] realpath01.c: use TST_EXP_FAIL_PTR_NULL Wei Gao via ltp
2024-03-20 10:47 ` Petr Vorel
2024-03-27 3:49 ` [LTP] [PATCH v5 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
2024-03-27 3:49 ` [LTP] [PATCH v5 1/3] " Wei Gao via ltp
2024-03-28 11:29 ` Petr Vorel
2024-03-28 11:49 ` Petr Vorel
2024-03-28 11:57 ` Petr Vorel
2024-03-28 12:11 ` Petr Vorel
2024-03-27 3:49 ` [LTP] [PATCH v5 2/3] shmat02.c: Use TST_EXP_FAIL_PTR_VOID Wei Gao via ltp
2024-03-27 3:49 ` [LTP] [PATCH v5 3/3] realpath01.c: use TST_EXP_FAIL_PTR_NULL Wei Gao via ltp
2024-04-03 3:28 ` [LTP] [PATCH v6 0/3] lib: TST_EXP_{FAIL,PASS}_PTR_{NULL,VOID} Wei Gao via ltp
2024-04-03 3:28 ` [LTP] [PATCH v6 1/3] " Wei Gao via ltp
2024-04-04 13:51 ` Cyril Hrubis
2024-04-04 16:01 ` Petr Vorel
2024-04-05 8:53 ` Cyril Hrubis
2024-04-05 10:28 ` Petr Vorel
2024-04-05 11:23 ` Cyril Hrubis
2024-04-05 14:03 ` Petr Vorel
2024-04-07 23:31 ` Wei Gao via ltp
2024-04-03 3:28 ` [LTP] [PATCH v6 2/3] shmat02.c: Use TST_EXP_FAIL_PTR_VOID Wei Gao via ltp
2024-04-03 3:28 ` [LTP] [PATCH v6 3/3] realpath01.c: use TST_EXP_FAIL_PTR_NULL Wei Gao via ltp
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox