[LTP] [PATCH v3 3/4] tree: Use TST_EXP_PASS_OR_FAIL() and TST_EXP_FD_OR_FAIL()

Petr Vorel pvorel@suse.cz
Tue Aug 11 17:52:01 CEST 2026


Shorten code with test macros.

Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
 testcases/kernel/syscalls/access/access01.c   |   9 +-
 .../kernel/syscalls/arch_prctl/arch_prctl01.c |   9 +-
 testcases/kernel/syscalls/bind/bind01.c       |   9 +-
 .../kernel/syscalls/epoll_ctl/epoll_ctl06.c   |  12 +-
 .../syscalls/finit_module/finit_module01.c    |   7 +-
 .../syscalls/init_module/init_module01.c      |   7 +-
 .../kernel/syscalls/landlock/landlock08.c     |  18 +--
 .../kernel/syscalls/landlock/landlock09.c     |  10 +-
 .../kernel/syscalls/landlock/landlock10.c     |   8 +-
 .../syscalls/landlock/landlock_tester.h       | 129 ++++++------------
 10 files changed, 66 insertions(+), 152 deletions(-)

diff --git a/testcases/kernel/syscalls/access/access01.c b/testcases/kernel/syscalls/access/access01.c
index 66907d1279..e8d81b392f 100644
--- a/testcases/kernel/syscalls/access/access01.c
+++ b/testcases/kernel/syscalls/access/access01.c
@@ -236,13 +236,8 @@ static struct tcase {
 
 static void access_test(struct tcase *tc, const char *user)
 {
-	if (tc->exp_errno) {
-		TST_EXP_FAIL(access(tc->fname, tc->mode), tc->exp_errno,
-		             "access(%s, %s) as %s", tc->fname, tc->name, user);
-	} else {
-		TST_EXP_PASS(access(tc->fname, tc->mode),
-		             "access(%s, %s) as %s", tc->fname, tc->name, user);
-	}
+	TST_EXP_PASS_OR_FAIL(access(tc->fname, tc->mode), tc->exp_errno,
+				 "access(%s, %s) as %s", tc->fname, tc->name, user);
 }
 
 static void verify_access(unsigned int n)
diff --git a/testcases/kernel/syscalls/arch_prctl/arch_prctl01.c b/testcases/kernel/syscalls/arch_prctl/arch_prctl01.c
index 8ce905c6ce..851a5cf50a 100644
--- a/testcases/kernel/syscalls/arch_prctl/arch_prctl01.c
+++ b/testcases/kernel/syscalls/arch_prctl/arch_prctl01.c
@@ -50,10 +50,9 @@ static void setup(void)
 
 static void run(unsigned int index)
 {
-	if (tag)
-		TST_EXP_PASS(arch_prctl_set(ARCH_SET_CPUID, index));
-	else
-		TST_EXP_FAIL(arch_prctl_set(ARCH_SET_CPUID, index), ENODEV);
+	int err = tag ? 0 : ENODEV;
+
+	TST_EXP_PASS_OR_FAIL(arch_prctl_set(ARCH_SET_CPUID, index), err);
 
 	// if cpu has cpuid_fault flag, ARCH_GET_CPUID returns what has been
 	// set: index, otherwise, returns default status: 1
@@ -61,7 +60,7 @@ static void run(unsigned int index)
 
 	TEST(arch_prctl_get(ARCH_GET_CPUID));
 	if (TST_RET == exp)
-		tst_res(TPASS, "get cpuid succeed.");
+		tst_res(TPASS, "get cpuid succeed");
 	else
 		tst_res(TFAIL, "get wrong cpuid status");
 }
diff --git a/testcases/kernel/syscalls/bind/bind01.c b/testcases/kernel/syscalls/bind/bind01.c
index 1bf55e898d..7f27bf3b7c 100644
--- a/testcases/kernel/syscalls/bind/bind01.c
+++ b/testcases/kernel/syscalls/bind/bind01.c
@@ -69,12 +69,9 @@ static void verify_bind(unsigned int nr)
 {
 	struct test_case *tcase = &tcases[nr];
 
-	if (tcase->experrno) {
-		TST_EXP_FAIL(bind(*tcase->socket_fd, tcase->sockaddr, tcase->salen),
-				tcase->experrno, "%s", tcase->desc);
-	} else {
-		TST_EXP_PASS(bind(*tcase->socket_fd, tcase->sockaddr, tcase->salen),
-				"%s", tcase->desc);
+	TST_EXP_PASS_OR_FAIL(bind(*tcase->socket_fd, tcase->sockaddr, tcase->salen),
+			tcase->experrno, "%s", tcase->desc);
+	if (TST_PASS) {
 		SAFE_CLOSE(inet_socket);
 		inet_socket = SAFE_SOCKET(PF_INET, SOCK_STREAM, 0);
 	}
diff --git a/testcases/kernel/syscalls/epoll_ctl/epoll_ctl06.c b/testcases/kernel/syscalls/epoll_ctl/epoll_ctl06.c
index a06d996e02..69321582f1 100644
--- a/testcases/kernel/syscalls/epoll_ctl/epoll_ctl06.c
+++ b/testcases/kernel/syscalls/epoll_ctl/epoll_ctl06.c
@@ -52,15 +52,9 @@ static void run(void)
 		ev.data.fd = fd.fd;
 		err = exp_errno(fd.type);
 
-		if (err) {
-			TST_EXP_FAIL(epoll_ctl(efd, EPOLL_CTL_ADD,
-				     fd.fd, &ev), err,
-				     "epoll_ctl() on %s", tst_fd_desc(&fd));
-		} else {
-			TST_EXP_PASS(epoll_ctl(efd, EPOLL_CTL_ADD,
-				     fd.fd, &ev),
-				     "epoll_ctl() on %s", tst_fd_desc(&fd));
-		}
+		TST_EXP_PASS_OR_FAIL(epoll_ctl(efd, EPOLL_CTL_ADD,
+				 fd.fd, &ev), err,
+				 "epoll_ctl() on %s", tst_fd_desc(&fd));
 
 		SAFE_CLOSE(efd);
 	}
diff --git a/testcases/kernel/syscalls/finit_module/finit_module01.c b/testcases/kernel/syscalls/finit_module/finit_module01.c
index 397d5a1ae4..ec14a42588 100644
--- a/testcases/kernel/syscalls/finit_module/finit_module01.c
+++ b/testcases/kernel/syscalls/finit_module/finit_module01.c
@@ -34,12 +34,9 @@ static void setup(void)
 
 static void run(void)
 {
-	if (sig_enforce == 1) {
-		TST_EXP_FAIL(finit_module(fd, "status=valid", 0), EKEYREJECTED);
-		return;
-	}
+	int err = sig_enforce == 1 ? EKEYREJECTED : 0;
 
-	TST_EXP_PASS(finit_module(fd, "status=valid", 0));
+	TST_EXP_PASS_OR_FAIL(finit_module(fd, "status=valid", 0), err);
 	if (!TST_PASS)
 		return;
 
diff --git a/testcases/kernel/syscalls/init_module/init_module01.c b/testcases/kernel/syscalls/init_module/init_module01.c
index a0d4792c95..171e360f89 100644
--- a/testcases/kernel/syscalls/init_module/init_module01.c
+++ b/testcases/kernel/syscalls/init_module/init_module01.c
@@ -39,12 +39,9 @@ static void setup(void)
 
 static void run(void)
 {
-	if (sig_enforce == 1) {
-		TST_EXP_FAIL(init_module(buf, sb.st_size, "status=valid"), EKEYREJECTED);
-		return;
-	}
+	int err = sig_enforce == 1 ? EKEYREJECTED : 0;
 
-	TST_EXP_PASS(init_module(buf, sb.st_size, "status=valid"));
+	TST_EXP_PASS_OR_FAIL(init_module(buf, sb.st_size, "status=valid"), err);
 	if (!TST_PASS)
 		return;
 
diff --git a/testcases/kernel/syscalls/landlock/landlock08.c b/testcases/kernel/syscalls/landlock/landlock08.c
index 770061ba0b..052b016be6 100644
--- a/testcases/kernel/syscalls/landlock/landlock08.c
+++ b/testcases/kernel/syscalls/landlock/landlock08.c
@@ -102,13 +102,8 @@ static void test_bind(const struct tcase *tc, const in_port_t port, const int ex
 	create_socket(&socket, tc->family, port, tc->type);
 	getsocket_addr(&socket, tc->family, &addr);
 
-	if (exp_err) {
-		TST_EXP_FAIL(bind(socket.fd, addr, socket.address_size),
-			     exp_err, "bind() access on port %u", port);
-	} else {
-		TST_EXP_PASS(bind(socket.fd, addr, socket.address_size),
-			     "bind() access on port %u", port);
-	}
+	TST_EXP_PASS_OR_FAIL(bind(socket.fd, addr, socket.address_size),
+		exp_err, "bind() access on port %u", port);
 
 	SAFE_CLOSE(socket.fd);
 }
@@ -121,13 +116,8 @@ static void test_connect(const struct tcase *tc, const in_port_t port, const int
 	create_socket(&socket, tc->family, port, tc->type);
 	getsocket_addr(&socket, tc->family, &addr);
 
-	if (exp_err) {
-		TST_EXP_FAIL(connect(socket.fd, addr, socket.address_size),
-			     exp_err, "connect() on port %u", port);
-	} else {
-		TST_EXP_PASS(connect(socket.fd, addr, socket.address_size),
-			     "connect() on port %u", port);
-	}
+	TST_EXP_PASS_OR_FAIL(connect(socket.fd, addr, socket.address_size),
+		exp_err, "connect() on port %u", port);
 
 	SAFE_CLOSE(socket.fd);
 }
diff --git a/testcases/kernel/syscalls/landlock/landlock09.c b/testcases/kernel/syscalls/landlock/landlock09.c
index 09a762bb1b..c2d73a7085 100644
--- a/testcases/kernel/syscalls/landlock/landlock09.c
+++ b/testcases/kernel/syscalls/landlock/landlock09.c
@@ -35,6 +35,8 @@ static void scoped_sandbox(const char *from)
 
 static void run_client(void)
 {
+	int err = tst_variant == DOMAIN_CLIENT ? EPERM : 0;
+
 	if (tst_variant == DOMAIN_CLIENT)
 		scoped_sandbox("client");
 
@@ -47,14 +49,8 @@ static void run_client(void)
 	TST_CHECKPOINT_WAIT(0);
 
 	tst_res(TINFO, "Connecting to UNIX socket");
-
 	sendsock = SAFE_SOCKET(AF_UNIX, SOCK_STREAM, 0);
-
-	if (tst_variant != DOMAIN_CLIENT)
-		TST_EXP_PASS(connect(sendsock, (struct sockaddr *)&addr, SOCKET_LENGTH));
-	else
-		TST_EXP_FAIL(connect(sendsock, (struct sockaddr *)&addr, SOCKET_LENGTH), EPERM);
-
+	TST_EXP_PASS_OR_FAIL(connect(sendsock, (struct sockaddr *)&addr, SOCKET_LENGTH), err);
 	SAFE_CLOSE(sendsock);
 
 	TST_CHECKPOINT_WAKE(0);
diff --git a/testcases/kernel/syscalls/landlock/landlock10.c b/testcases/kernel/syscalls/landlock/landlock10.c
index a29e3bca82..96ee40bc79 100644
--- a/testcases/kernel/syscalls/landlock/landlock10.c
+++ b/testcases/kernel/syscalls/landlock/landlock10.c
@@ -30,6 +30,8 @@ static void scoped_sandbox(const char *from)
 
 static void run(void)
 {
+	int err = tst_variant == DOMAIN_KILLER ? EPERM : 0;
+
 	/* isolate test inside a process so we won't stack too many
 	 * layers (-E2BIG) when there are multiple test's iterations
 	 */
@@ -62,11 +64,7 @@ static void run(void)
 
 		TST_CHECKPOINT_WAKE(0);
 
-		if (tst_variant == DOMAIN_KILLER)
-			TST_EXP_FAIL(kill(paused_pid, SIGKILL), EPERM);
-		else
-			TST_EXP_PASS(kill(paused_pid, SIGKILL));
-
+		TST_EXP_PASS_OR_FAIL(kill(paused_pid, SIGKILL), err);
 		exit(0);
 	}
 
diff --git a/testcases/kernel/syscalls/landlock/landlock_tester.h b/testcases/kernel/syscalls/landlock/landlock_tester.h
index 4e77e8a61f..3e2abd2e78 100644
--- a/testcases/kernel/syscalls/landlock/landlock_tester.h
+++ b/testcases/kernel/syscalls/landlock/landlock_tester.h
@@ -145,7 +145,7 @@ static void tester_cleanup_files(void)
 	_remove_file(FILE_REGULAR);
 }
 
-static void _test_exec(const int result)
+static void _test_exec(const int exp_err)
 {
 	int status;
 	pid_t pid;
@@ -155,16 +155,7 @@ static void _test_exec(const int result)
 
 	pid = SAFE_FORK();
 	if (!pid) {
-		int rval;
-
-		if (result == TPASS) {
-			rval = execve(FILE_EXEC, args, NULL);
-			if (rval == -1)
-				tst_res(TFAIL | TERRNO, "Failed to execute test binary");
-		} else {
-			TST_EXP_FAIL(execve(FILE_EXEC, args, NULL), EACCES);
-		}
-
+		TST_EXP_PASS_OR_FAIL(execve(FILE_EXEC, args, NULL), exp_err);
 		_exit(1);
 	}
 
@@ -172,31 +163,23 @@ static void _test_exec(const int result)
 	if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
 		return;
 
-	tst_res(result, "Test binary has been executed");
+	tst_res(exp_err ? TFAIL : TPASS, "Test binary has been executed");
 }
 
-static void _test_write(const int result)
+static void _test_write(const int exp_err)
 {
 	tst_res(TINFO, "Test writing file");
 
-	if (result == TPASS)
-		TST_EXP_FD(open(FILE_WRITE, O_WRONLY, PERM_MODE));
-	else
-		TST_EXP_FAIL(open(FILE_WRITE, O_WRONLY, PERM_MODE), EACCES);
-
+	TST_EXP_FD_OR_FAIL(open(FILE_WRITE, O_WRONLY, PERM_MODE), exp_err);
 	if (TST_RET != -1)
 		SAFE_CLOSE(TST_RET);
 }
 
-static void _test_read(const int result)
+static void _test_read(const int exp_err)
 {
 	tst_res(TINFO, "Test reading file");
 
-	if (result == TPASS)
-		TST_EXP_FD(open(FILE_READ, O_RDONLY, PERM_MODE));
-	else
-		TST_EXP_FAIL(open(FILE_READ, O_RDONLY, PERM_MODE), EACCES);
-
+	TST_EXP_FD_OR_FAIL(open(FILE_READ, O_RDONLY, PERM_MODE), exp_err);
 	if (TST_RET != -1)
 		SAFE_CLOSE(TST_RET);
 }
@@ -239,122 +222,90 @@ static void _test_readdir(const int result)
 	TST_EXP_EQ_LI(files_counted, ARRAY_SIZE(readdir_files));
 }
 
-static void _test_rmdir(const int result)
+static void _test_rmdir(const int exp_err)
 {
 	tst_res(TINFO, "Test removing directory");
-
-	if (result == TPASS)
-		TST_EXP_PASS(rmdir(DIR_RMDIR));
-	else
-		TST_EXP_FAIL(rmdir(DIR_RMDIR), EACCES);
+	TST_EXP_PASS_OR_FAIL(rmdir(DIR_RMDIR), exp_err);
 }
 
-static void _test_rmfile(const int result)
+static void _test_rmfile(const int exp_err)
 {
 	tst_res(TINFO, "Test removing file");
-
-	if (result == TPASS) {
-		TST_EXP_PASS(unlink(FILE_UNLINK));
-		TST_EXP_PASS(remove(FILE_REMOVE));
-	} else {
-		TST_EXP_FAIL(unlink(FILE_UNLINK), EACCES);
-		TST_EXP_FAIL(remove(FILE_REMOVE), EACCES);
-	}
+	TST_EXP_PASS_OR_FAIL(unlink(FILE_UNLINK), exp_err);
+	TST_EXP_PASS_OR_FAIL(remove(FILE_REMOVE), exp_err);
 }
 
-static void _test_make(const char *path, const int type, const int dev, const int result)
+static void _test_make(const char *path, const int type, const int dev, const int exp_err)
 {
 	tst_res(TINFO, "Test normal or special files creation");
-
-	if (result == TPASS)
-		TST_EXP_PASS(mknod(path, type | 0400, dev));
-	else
-		TST_EXP_FAIL(mknod(path, type | 0400, dev), EACCES);
+	TST_EXP_PASS_OR_FAIL(mknod(path, type | 0400, dev), exp_err);
 }
 
-static void _test_symbolic(const int result)
+static void _test_symbolic(const int exp_err)
 {
 	tst_res(TINFO, "Test symbolic links");
-
-	if (result == TPASS)
-		TST_EXP_PASS(symlink(FILE_SYM0, FILE_SYM1));
-	else
-		TST_EXP_FAIL(symlink(FILE_SYM0, FILE_SYM1), EACCES);
+	TST_EXP_PASS_OR_FAIL(symlink(FILE_SYM0, FILE_SYM1), exp_err);
 }
 
-static void _test_truncate(const int result)
+static void _test_truncate(const int exp_err)
 {
 	int fd;
 
 	tst_res(TINFO, "Test truncating file");
 
-	if (result == TPASS) {
-		TST_EXP_PASS(truncate(FILE_TRUNCATE, 10));
-
-		fd = SAFE_OPEN(FILE_TRUNCATE, O_WRONLY, PERM_MODE);
-		if (fd != -1) {
-			TST_EXP_PASS(ftruncate(fd, 10));
-			SAFE_CLOSE(fd);
-		}
-
-		fd = TST_EXP_FD(open(FILE_TRUNCATE, O_WRONLY | O_TRUNC, PERM_MODE));
-		if (fd != -1)
-			SAFE_CLOSE(fd);
-	} else {
-		TST_EXP_FAIL(truncate(FILE_TRUNCATE, 10), EACCES);
-
-		fd = open(FILE_TRUNCATE, O_WRONLY, PERM_MODE);
-		if (fd != -1) {
-			TST_EXP_FAIL(ftruncate(fd, 10), EACCES);
-			SAFE_CLOSE(fd);
-		}
-
-		TST_EXP_FAIL(open(FILE_TRUNCATE, O_WRONLY | O_TRUNC, PERM_MODE), EACCES);
-
-		if (TST_RET != -1)
-			SAFE_CLOSE(TST_RET);
+	TST_EXP_PASS_OR_FAIL(truncate(FILE_TRUNCATE, 10), exp_err);
+	TST_EXP_FD_OR_FAIL(fd = open(FILE_TRUNCATE, O_WRONLY | O_TRUNC, PERM_MODE), exp_err);
+	if (fd != -1) {
+		TST_EXP_PASS_OR_FAIL(ftruncate(fd, 10), exp_err);
+		SAFE_CLOSE(fd);
 	}
+
+	TST_EXP_FD_OR_FAIL(fd = open(FILE_TRUNCATE, O_WRONLY | O_TRUNC, PERM_MODE), exp_err);
+	if (fd != -1)
+		SAFE_CLOSE(TST_RET);
 }
 
 static void tester_run_fs_rules(const int rules, const int result)
 {
+	int exp_err = result == TPASS ? 0 : EACCES;
+
 	if (rules & LANDLOCK_ACCESS_FS_EXECUTE)
-		_test_exec(result);
+		_test_exec(exp_err);
 
 	if (rules & LANDLOCK_ACCESS_FS_WRITE_FILE)
-		_test_write(result);
+		_test_write(exp_err);
 
 	if (rules & LANDLOCK_ACCESS_FS_READ_FILE)
-		_test_read(result);
+		_test_read(exp_err);
 
 	if (rules & LANDLOCK_ACCESS_FS_READ_DIR)
 		_test_readdir(result);
 
 	if (rules & LANDLOCK_ACCESS_FS_REMOVE_DIR)
-		_test_rmdir(result);
+		_test_rmdir(exp_err);
 
 	if (rules & LANDLOCK_ACCESS_FS_REMOVE_FILE)
-		_test_rmfile(result);
+		_test_rmfile(exp_err);
 
 	if (rules & LANDLOCK_ACCESS_FS_MAKE_REG)
-		_test_make(FILE_REGULAR, S_IFREG, 0, result);
+		_test_make(FILE_REGULAR, S_IFREG, 0, exp_err);
 
 	if (strcmp(tst_device->fs_type, "vfat") &&
 	    strcmp(tst_device->fs_type, "exfat")) {
 		if (rules & LANDLOCK_ACCESS_FS_MAKE_CHAR)
-			_test_make(DEV_CHAR0, S_IFCHR, dev_chr, result);
+			_test_make(DEV_CHAR0, S_IFCHR, dev_chr, exp_err);
 
 		if (rules & LANDLOCK_ACCESS_FS_MAKE_BLOCK)
-			_test_make(DEV_BLK0, S_IFBLK, dev_blk, result);
+			_test_make(DEV_BLK0, S_IFBLK, dev_blk, exp_err);
 
 		if (rules & LANDLOCK_ACCESS_FS_MAKE_SOCK)
-			_test_make(FILE_SOCKET, S_IFSOCK, 0, result);
+			_test_make(FILE_SOCKET, S_IFSOCK, 0, exp_err);
 
 		if (rules & LANDLOCK_ACCESS_FS_MAKE_FIFO)
-			_test_make(FILE_FIFO, S_IFIFO, 0, result);
+			_test_make(FILE_FIFO, S_IFIFO, 0, exp_err);
 
 		if (rules & LANDLOCK_ACCESS_FS_MAKE_SYM)
-			_test_symbolic(result);
+			_test_symbolic(exp_err);
 	}
 
 	if (rules & LANDLOCK_ACCESS_FS_TRUNCATE) {
@@ -366,7 +317,7 @@ static void tester_run_fs_rules(const int rules, const int result)
 			return;
 		}
 
-		_test_truncate(result);
+		_test_truncate(exp_err);
 	}
 }
 
-- 
2.55.0



More information about the ltp mailing list