From: Cyril Hrubis <chrubis@suse.cz>
To: Andrea Cervesato <andrea.cervesato@suse.de>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH v3] Add rename15 test
Date: Tue, 10 Sep 2024 16:20:09 +0200 [thread overview]
Message-ID: <ZuBVmXDo99opXjdk@yuki.lan> (raw)
In-Reply-To: <20240801135023.22125-1-andrea.cervesato@suse.de>
Hi!
> This test has been extracted from symlink01 and it verifies that
> rename() is working correctly on symlink() generated files, renaming
> symbolic link and checking if stat() information are preserved.
>
> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
> ---
> - tst_tmpdir_path/tst_tmpdir_mkpath usage
> - use absolute paths
> - add all_filesystems = 1
>
> runtest/syscalls | 2 +-
> testcases/kernel/syscalls/rename/.gitignore | 1 +
> testcases/kernel/syscalls/rename/rename15.c | 109 ++++++++++++++++++++
> 3 files changed, 111 insertions(+), 1 deletion(-)
> create mode 100644 testcases/kernel/syscalls/rename/rename15.c
>
> diff --git a/runtest/syscalls b/runtest/syscalls
> index 9b3cba667..6028c57c3 100644
> --- a/runtest/syscalls
> +++ b/runtest/syscalls
> @@ -1173,7 +1173,6 @@ removexattr01 removexattr01
> removexattr02 removexattr02
>
> rename01 rename01
> -rename01A symlink01 -T rename01
> rename03 rename03
> rename04 rename04
> rename05 rename05
> @@ -1186,6 +1185,7 @@ rename11 rename11
> rename12 rename12
> rename13 rename13
> rename14 rename14
> +rename15 rename15
>
> #renameat test cases
> renameat01 renameat01
> diff --git a/testcases/kernel/syscalls/rename/.gitignore b/testcases/kernel/syscalls/rename/.gitignore
> index f95cf7d21..d17b80f09 100644
> --- a/testcases/kernel/syscalls/rename/.gitignore
> +++ b/testcases/kernel/syscalls/rename/.gitignore
> @@ -11,3 +11,4 @@
> /rename12
> /rename13
> /rename14
> +/rename15
> diff --git a/testcases/kernel/syscalls/rename/rename15.c b/testcases/kernel/syscalls/rename/rename15.c
> new file mode 100644
> index 000000000..234632879
> --- /dev/null
> +++ b/testcases/kernel/syscalls/rename/rename15.c
> @@ -0,0 +1,109 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
> + * Authors: David Fenner, Jon Hendrickson
> + * Copyright (C) 2024 Andrea Cervesato andrea.cervesato@suse.com
> + */
> +
> +/*\
> + * [Description]
> + *
> + * This test verifies that rename() is working correctly on symlink()
> + * generated files.
> + */
> +
> +#include "tst_test.h"
> +#include "tst_tmpdir.h"
> +
> +#define MNTPOINT "mnt"
> +#define OLDNAME MNTPOINT"/msymlink0"
> +#define NEWNAME MNTPOINT"/asymlink0"
> +#define OBJNAME MNTPOINT"/object"
> +
> +static char *tmpdir;
> +static char *oldname;
> +static char *newname;
> +static char *objname;
> +
> +static void test_existing(void)
> +{
> + tst_res(TINFO, "Test rename() on symlink pointing to an existent path");
> +
> + struct stat oldsym_stat;
> + struct stat newsym_stat;
> +
> + SAFE_SYMLINK(tmpdir, oldname);
> + SAFE_STAT(oldname, &oldsym_stat);
> +
> + SAFE_RENAME(oldname, newname);
> + SAFE_STAT(newname, &newsym_stat);
> +
> + TST_EXP_EQ_LI(oldsym_stat.st_ino, newsym_stat.st_ino);
> + TST_EXP_EQ_LI(oldsym_stat.st_dev, newsym_stat.st_dev);
Here we should test that the oldname is not there anymore.
> + SAFE_UNLINK(newname);
> +}
> +
> +static void test_non_existing(void)
> +{
> + tst_res(TINFO, "Test rename() on symlink pointing to a non-existent path");
> +
> + struct stat path_stat;
> +
> + SAFE_SYMLINK("this_path_doesnt_exist", oldname);
> + TST_EXP_FAIL(stat(oldname, &path_stat), ENOENT);
> +
> + SAFE_RENAME(oldname, newname);
> + TST_EXP_FAIL(stat(newname, &path_stat), ENOENT);
I guess that we should use lstat() here to at least make sure that the
symlinks are present when they should be.
> + SAFE_UNLINK(newname);
> +}
> +
> +static void test_creat(void)
> +{
> +
> + tst_res(TINFO, "Test rename() on symlink pointing to a path created lately");
> +
> + struct stat path_stat;
> +
> + SAFE_SYMLINK(objname, oldname);
> + TST_EXP_FAIL(stat(oldname, &path_stat), ENOENT);
> +
> + tst_res(TINFO, "Create object file");
> +
> + int fd;
> +
> + fd = SAFE_CREAT(objname, 0700);
> + if (fd >= 0)
> + SAFE_CLOSE(fd);
> +
> + SAFE_RENAME(oldname, newname);
> + TST_EXP_PASS(stat(newname, &path_stat));
Shouldn't we also check here that:
- oldname is not there anymore
- objname is still there
> + SAFE_UNLINK(objname);
> + SAFE_UNLINK(newname);
> +}
> +
> +static void run(void)
> +{
> + test_existing();
> + test_creat();
> + test_non_existing();
> +}
> +
> +static void setup(void)
> +{
> + tmpdir = tst_tmpdir_path();
> + oldname = tst_tmpdir_mkpath(OLDNAME);
> + newname = tst_tmpdir_mkpath(NEWNAME);
> + objname = tst_tmpdir_mkpath(OBJNAME);
> +}
> +
> +static struct tst_test test = {
> + .setup = setup,
> + .test_all = run,
> + .all_filesystems = 1,
> + .mntpoint = MNTPOINT,
> + .format_device = 1,
> + .needs_root = 1,
> +};
> --
> 2.43.0
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
prev parent reply other threads:[~2024-09-10 14:21 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-01 13:50 [LTP] [PATCH v3] Add rename15 test Andrea Cervesato
2024-09-10 6:50 ` Li Wang
2024-09-10 14:20 ` Cyril Hrubis [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZuBVmXDo99opXjdk@yuki.lan \
--to=chrubis@suse.cz \
--cc=andrea.cervesato@suse.de \
--cc=ltp@lists.linux.it \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.