ltp.lists.linux.it archive mirror
 help / color / mirror / Atom feed
* [LTP] [PATCH] syscalls: rename11: Convert test to new API
@ 2026-08-13 19:26 Avinesh Kumar via ltp
  2026-08-13 20:44 ` [LTP] " linuxtestproject.agent
  0 siblings, 1 reply; 2+ messages in thread
From: Avinesh Kumar via ltp @ 2026-08-13 19:26 UTC (permalink / raw)
  To: ltp

From: Avinesh Kumar <avinesh.kumar@suse.com>

Signed-off-by: Avinesh Kumar <avinesh.kumar@suse.com>
---
 testcases/kernel/syscalls/rename/rename11.c | 215 +++++++-------------
 1 file changed, 71 insertions(+), 144 deletions(-)

diff --git a/testcases/kernel/syscalls/rename/rename11.c b/testcases/kernel/syscalls/rename/rename11.c
index 26e324d646db..88dd7e2a86c7 100644
--- a/testcases/kernel/syscalls/rename/rename11.c
+++ b/testcases/kernel/syscalls/rename/rename11.c
@@ -1,187 +1,114 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (c) 2014 Fujitsu Ltd.
  * Author: Xiaoguang Wang <wangxg.fnst@cn.fujitsu.com>
- *
- * This program is free software;  you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY;  without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program;  if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Copyright (c) 2026 Avinesh Kumar <avinesh.kumar@suse.com>
  */
 
-/*
- * Test Description:
- *  Verify that,
- *   1. rename() fails with -1 return value and sets errno to ELOOP, if too
- *      many symbolic links were encountered in resolving oldpath or newpath.
- *   2. rename() fails with -1 return value and sets errno to EROFS,
- *      if the file is on a read-only file system.
- *   3. rename() fails with -1 return value and sets errno to EMLINK,
- *	if the file named by old is a directory and the link count of
- *	the parent directory of new would exceed {LINK_MAX}.
+/*\
+ * Verify that :manpage:`rename(2)` fails with:
+ *
+ * - ``ELOOP`` when too many symbolic links are encountered while resolving
+ *   oldpath or newpath.
+ * - ``EROFS`` when the file is on a read-only file system.
+ * - ``EMLINK`` when oldpath is a directory and the link count of the parent
+ *   directory of newpath would exceed ``LINK_MAX``.
  */
 
-#include <stdio.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
 #include <sys/mount.h>
 
-#include "test.h"
-#include "tso_safe_macros.h"
-
-char *TCID = "rename11";
+#include "tst_test.h"
 
 #define MNTPOINT	"mntpoint"
-#define TEST_EROFS	"mntpoint/test_erofs"
-#define TEST_NEW_EROFS	"mntpoint/new_test_erofs"
+#define TEST_EROFS	MNTPOINT "/test_erofs"
+#define TEST_NEW_EROFS	MNTPOINT "/new_test_erofs"
 
 #define TEST_EMLINK	"test_emlink"
 #define TEST_NEW_EMLINK	"emlink_dir/testdir"
 
 #define TEST_NEW_ELOOP	"new_test_eloop"
-#define ELOPFILE	"/test_eloop"
-static char elooppathname[sizeof(ELOPFILE) * 43] = ".";
-static int max_subdirs;
+#define ELOOPFILE	"/test_eloop"
 
-static const char *device;
-static const char *fs_type;
-static int mount_flag;
-
-static void cleanup(void);
-static void setup(void);
-static void test_eloop(void);
-static void test_erofs(void);
-static void test_emlink(void);
-
-static void (*testfunc[])(void) = { test_eloop, test_erofs, test_emlink };
-
-int TST_TOTAL = ARRAY_SIZE(testfunc);
+static char elooppathname[sizeof(ELOOPFILE) * 43] = ".";
+static int max_subdirs;
 
-int main(int ac, char **av)
+static void test_eloop(void)
 {
-	int lc, i;
-
-	tst_parse_opts(ac, av, NULL, NULL);
+	TST_EXP_FAIL(rename(elooppathname, TEST_NEW_ELOOP), ELOOP);
 
-	setup();
-
-	for (lc = 0; TEST_LOOPING(lc); lc++) {
-		tst_count = 0;
-
-		for (i = 0; i < TST_TOTAL; i++)
-			(*testfunc[i])();
-	}
-
-	cleanup();
-	tst_exit();
+	if (!TST_RET)
+		SAFE_UNLINK(TEST_NEW_ELOOP);
 }
 
-static void setup(void)
+static void test_erofs(void)
 {
-	int i;
-
-	tst_sig(FORK, DEF_HANDLER, cleanup);
-
-	tst_require_root();
-
-	tst_tmpdir();
-
-	TEST_PAUSE;
-
-	fs_type = tst_dev_fs_type();
-	device = tst_acquire_device(cleanup);
-
-	if (!device)
-		tst_brkm(TCONF, cleanup, "Failed to obtain block device");
+	SAFE_MOUNT(tst_device->dev, MNTPOINT, tst_device->fs_type,
+		   MS_REMOUNT | MS_RDONLY, NULL);
 
-	tst_mkfs(cleanup, device, fs_type, NULL, NULL);
+	TST_EXP_FAIL(rename(TEST_EROFS, TEST_NEW_EROFS), EROFS);
 
-	SAFE_MKDIR(cleanup, MNTPOINT, 0755);
-	SAFE_MOUNT(cleanup, device, MNTPOINT, fs_type, 0, NULL);
-	mount_flag = 1;
-	SAFE_TOUCH(cleanup, TEST_EROFS, 0644, NULL);
+	if (!TST_RET)
+		SAFE_UNLINK(TEST_NEW_EROFS);
 
-	SAFE_MKDIR(cleanup, TEST_EMLINK, 0755);
-	max_subdirs = tst_fs_fill_subdirs(cleanup, "emlink_dir");
-	/*
-	 * NOTE: the ELOOP test is written based on that the consecutive
-	 * symlinks limits in kernel is hardwired to 40.
-	 */
-	SAFE_MKDIR(cleanup, "test_eloop", 0644);
-	SAFE_SYMLINK(cleanup, "../test_eloop", "test_eloop/test_eloop");
-	for (i = 0; i < 43; i++)
-		strcat(elooppathname, ELOPFILE);
+	SAFE_MOUNT(tst_device->dev, MNTPOINT, tst_device->fs_type,
+		   MS_REMOUNT, NULL);
 }
 
-static void check_and_print(int expected_errno)
+static void test_emlink(void)
 {
-	if (TEST_RETURN == -1) {
-		if (TEST_ERRNO == expected_errno) {
-			tst_resm(TPASS | TTERRNO, "failed as expected");
-		} else {
-			tst_resm(TFAIL | TTERRNO,
-				 "failed unexpectedly; expected - %d : %s",
-				 expected_errno, strerror(expected_errno));
-		}
-	} else {
-		tst_resm(TFAIL, "rename succeeded unexpectedly");
+	if (!max_subdirs) {
+		tst_res(TCONF, "EMLINK test is not appropriate");
+		return;
 	}
-}
 
-static void test_eloop(void)
-{
-	TEST(rename(elooppathname, TEST_NEW_ELOOP));
-	check_and_print(ELOOP);
+	TST_EXP_FAIL(rename(TEST_EMLINK, TEST_NEW_EMLINK), EMLINK);
 
-	if (TEST_RETURN == 0)
-		SAFE_UNLINK(cleanup, TEST_NEW_ELOOP);
+	if (!TST_RET)
+		SAFE_RMDIR(TEST_NEW_EMLINK);
 }
 
-static void test_erofs(void)
-{
-	SAFE_MOUNT(cleanup, device, MNTPOINT, fs_type, MS_REMOUNT | MS_RDONLY,
-		   NULL);
-
-	TEST(rename(TEST_EROFS, TEST_NEW_EROFS));
-	check_and_print(EROFS);
-
-	if (TEST_RETURN == 0)
-		SAFE_UNLINK(cleanup, TEST_NEW_EROFS);
+static struct tcase {
+	void (*run)(void);
+	const char *tname;
+} tcases[] = {
+	{test_eloop, "eloop"},
+	{test_erofs, "erofs"},
+	{test_emlink, "emlink"},
+};
 
-	SAFE_MOUNT(cleanup, device, MNTPOINT, fs_type, MS_REMOUNT, NULL);
-}
-
-static void test_emlink(void)
+static void run(unsigned int n)
 {
-	if (max_subdirs == 0) {
-		tst_resm(TCONF, "EMLINK test is not appropriate");
-		return;
-	}
-
-	TEST(rename(TEST_EMLINK, TEST_NEW_EMLINK));
-	check_and_print(EMLINK);
+	struct tcase *tc = &tcases[n];
 
-	if (TEST_RETURN == 0)
-		SAFE_RMDIR(cleanup, TEST_NEW_EMLINK);
+	tst_res(TINFO, "Testing %s", tc->tname);
+	tc->run();
 }
 
-static void cleanup(void)
+static void setup(void)
 {
-	if (mount_flag && tst_umount(MNTPOINT) < 0)
-		tst_resm(TWARN | TERRNO, "umount device:%s failed", device);
+	unsigned int i;
+
+	SAFE_TOUCH(TEST_EROFS, 0644, NULL);
 
-	if (device)
-		tst_release_device(device);
+	SAFE_MKDIR(TEST_EMLINK, 0755);
+	max_subdirs = tst_fs_fill_subdirs("emlink_dir");
 
-	tst_rmdir();
+	/*
+	 * The ELOOP test assumes the kernel's consecutive symlink resolution
+	 * limit (MAXSYMLINKS) is hardcoded to 40.
+	 */
+	SAFE_MKDIR("test_eloop", 0644);
+	SAFE_SYMLINK("../test_eloop", "test_eloop/test_eloop");
+	for (i = 0; i < 43; i++)
+		strcat(elooppathname, ELOOPFILE);
 }
+
+static struct tst_test test = {
+	.test = run,
+	.tcnt = ARRAY_SIZE(tcases),
+	.setup = setup,
+	.needs_root = 1,
+	.needs_tmpdir = 1,
+	.mount_device = 1,
+	.mntpoint = MNTPOINT
+};
-- 
2.55.0


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

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

end of thread, other threads:[~2026-08-13 20:44 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-13 19:26 [LTP] [PATCH] syscalls: rename11: Convert test to new API Avinesh Kumar via ltp
2026-08-13 20:44 ` [LTP] " linuxtestproject.agent

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).