All of lore.kernel.org
 help / color / mirror / Atom feed
* [LTP] [PATCH v1] getcwd01: Implement .test_variants
@ 2023-12-06 10:53 Wei Gao via ltp
  2023-12-15 19:47 ` Petr Vorel
  2023-12-22 10:06 ` [LTP] [PATCH v2] " Wei Gao via ltp
  0 siblings, 2 replies; 12+ messages in thread
From: Wei Gao via ltp @ 2023-12-06 10:53 UTC (permalink / raw)
  To: ltp

Signed-off-by: Wei Gao <wegao@suse.com>
---
 testcases/kernel/syscalls/getcwd/getcwd01.c | 81 ++++++++++++++-------
 1 file changed, 55 insertions(+), 26 deletions(-)

diff --git a/testcases/kernel/syscalls/getcwd/getcwd01.c b/testcases/kernel/syscalls/getcwd/getcwd01.c
index 218bf4ef2..e62254deb 100644
--- a/testcases/kernel/syscalls/getcwd/getcwd01.c
+++ b/testcases/kernel/syscalls/getcwd/getcwd01.c
@@ -1,23 +1,12 @@
 // SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (c) International Business Machines Corp., 2001
+ * Copyright (c) 2023 Wei Gao <wegao@suse.com>
  */
 
 /*
  * 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:
- * 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.
+ * Testcase to test that getcwd() sets errno correctly.
  */
 
 #include <errno.h>
@@ -27,28 +16,68 @@
 #include "lapi/syscalls.h"
 
 static char buffer[5];
-
-static struct t_case {
+struct getcwd_variants {
+	void (*getcwd)(char *buf, size_t size, int exp_err);
 	char *buf;
 	size_t size;
 	int exp_err;
-} tcases[] = {
-	{(void *)-1, PATH_MAX, EFAULT},
-	{NULL, (size_t)-1, EFAULT},
-	{buffer, 0, ERANGE},
-	{buffer, 1, ERANGE},
-	{NULL, 1, ERANGE}
 };
 
+static void verify_getcwd_raw_syscall(char *buf, size_t size, int exp_err);
+static void verify_getcwd(char *buf, size_t size, int exp_err);
+
+static struct getcwd_variants variants[] = {
+#ifdef __GLIBC__
+	{ .getcwd = verify_getcwd, .buf = NULL, .size = (size_t)-1, .exp_err = ENOMEM},
+	{ .getcwd = verify_getcwd, .buf = NULL, .size = 1, .exp_err = ERANGE},
+#endif
+	{ .getcwd = verify_getcwd, .buf = (void *)-1, .size = PATH_MAX, .exp_err = EFAULT},
+	{ .getcwd = verify_getcwd, .buf = buffer, .size = 0, .exp_err = EINVAL},
+	{ .getcwd = verify_getcwd, .buf = buffer, .size = 1, .exp_err = ERANGE},
+	{ .getcwd = verify_getcwd_raw_syscall, .buf = buffer, .size = 0, .exp_err = ERANGE},
+	{ .getcwd = verify_getcwd_raw_syscall, .buf = (void *)-1, .size = PATH_MAX, .exp_err = EFAULT},
+	{ .getcwd = verify_getcwd_raw_syscall, .buf = NULL, .size = (size_t)-1, .exp_err = EFAULT},
+	{ .getcwd = verify_getcwd_raw_syscall, .buf = buffer, .size = 0, .exp_err = ERANGE},
+	{ .getcwd = verify_getcwd_raw_syscall, .buf = buffer, .size = 1, .exp_err = ERANGE},
+	{ .getcwd = verify_getcwd_raw_syscall, .buf = NULL, .size = 1, .exp_err = ERANGE},
+};
+
+static void verify_getcwd(char *buf, size_t size, int exp_err)
+{
+	char *res;
+
+	errno = 0;
+	res = getcwd(buf, size);
+	TST_ERR = errno;
+	if (res) {
+		tst_res(TFAIL, "getcwd() succeeded unexpectedly");
+		return;
+	}
+
+	if (TST_ERR != exp_err) {
+		tst_res(TFAIL | TTERRNO, "getcwd() failed unexpectedly, expected %s",
+				tst_strerrno(exp_err));
+		return;
+	}
+
+	tst_res(TPASS | TTERRNO, "getcwd() failed as expected");
+
+}
+
+static void verify_getcwd_raw_syscall(char *buf, size_t size, int exp_err)
+{
+
+	TST_EXP_FAIL2(tst_syscall(__NR_getcwd, buf, size), exp_err);
+}
 
-static void verify_getcwd(unsigned int n)
+static void verify(void)
 {
-	struct t_case *tc = &tcases[n];
+	struct getcwd_variants *tv = &variants[tst_variant];
 
-	TST_EXP_FAIL2(tst_syscall(__NR_getcwd, tc->buf, tc->size), tc->exp_err);
+	tv->getcwd(tv->buf, tv->size, tv->exp_err);
 }
 
 static struct tst_test test = {
-	.tcnt = ARRAY_SIZE(tcases),
-	.test = verify_getcwd
+	.test_variants = ARRAY_SIZE(variants),
+	.test_all = verify,
 };
-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2024-01-04  2:40 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-06 10:53 [LTP] [PATCH v1] getcwd01: Implement .test_variants Wei Gao via ltp
2023-12-15 19:47 ` Petr Vorel
2023-12-22 10:06 ` [LTP] [PATCH v2] " Wei Gao via ltp
2023-12-27 13:21   ` Petr Vorel
2023-12-27 14:48     ` Petr Vorel
2024-01-03  8:21       ` Cyril Hrubis
2024-01-03  8:44         ` Petr Vorel
2024-01-03  9:32           ` Wei Gao via ltp
2024-01-04  2:23             ` Wei Gao via ltp
2024-01-03  8:39     ` Wei Gao via ltp
2024-01-03  8:48       ` Petr Vorel
2024-01-04  2:40   ` [LTP] [PATCH v3] " Wei Gao via ltp

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.