From: Petr Vorel <pvorel@suse.cz>
To: Andrea Cervesato <andrea.cervesato@suse.de>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH v2] Add rename15 test
Date: Tue, 30 Jul 2024 08:57:15 +0200 [thread overview]
Message-ID: <20240730065715.GA1314377@pevik> (raw)
In-Reply-To: <20240424092357.11207-1-andrea.cervesato@suse.de>
Hi Andrea,
...
> +++ b/runtest/smoketest
> @@ -10,7 +10,7 @@ write01 write01
> symlink01 symlink01
> stat04 symlink01 -T stat04
> utime01A symlink01 -T utime01
> -rename01A symlink01 -T rename01
> +rename15 rename15
FYI this needs to be rebased now.
> splice02 splice02 -s 20
> df01_sh df01.sh
> shell_test01 echo "SUCCESS" | shell_pipe01.sh
> diff --git a/runtest/syscalls b/runtest/syscalls
> index b9dd9fec6..f515d46aa 100644
> --- a/runtest/syscalls
> +++ b/runtest/syscalls
> @@ -1156,7 +1156,6 @@ removexattr01 removexattr01
> removexattr02 removexattr02
> rename01 rename01
> -rename01A symlink01 -T rename01
> rename03 rename03
> rename04 rename04
> rename05 rename05
> @@ -1169,6 +1168,7 @@ rename11 rename11
> rename12 rename12
> rename13 rename13
> rename14 rename14
> +rename15 rename15
> #renameat test cases
nit: maybe while at it remove this useless comment above?
> 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..d410758a2
> --- /dev/null
> +++ b/testcases/kernel/syscalls/rename/rename15.c
> @@ -0,0 +1,100 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
> + * Author: David Fenner
> + * Copilot: Jon Hendrickson
> + * Copyright (C) 2024 Andrea Cervesato andrea.cervesato@suse.com
very nit:
* 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 <stdlib.h>
> +#include "tst_test.h"
> +
> +#define OLDNAME "msymlink0"
> +#define NEWNAME "asymlink0"
> +
> +static char *tmpdir;
> +
> +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);
> +
> + 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);
> +
> + SAFE_UNLINK(NEWNAME);
> +}
> +
> +static void test_creat(void)
> +{
> + tst_res(TINFO, "Test rename() on symlink pointing to a path created lately");
> +
> + char *objpath = "object";
nit: why not above:
#define OBJPATH "object"
and use this definition.
Not really important, but definitions are more common and you would be
consistent.
> + struct stat path_stat;
int fd;
(see below)
> +
> + SAFE_SYMLINK(objpath, OLDNAME);
> + TST_EXP_FAIL(stat(OLDNAME, &path_stat), ENOENT);
> +
> + tst_res(TINFO, "Create object file");
> +
> + SAFE_CREAT(objpath, 0700);
> + SAFE_RENAME(OLDNAME, NEWNAME);
> + TST_EXP_PASS(stat(NEWNAME, &path_stat));
> +
> + SAFE_UNLINK(objpath);
> + SAFE_UNLINK(NEWNAME);
You need to close(), because with too high -i it fails:
./rename15 -i1200
rename15.c:25: TINFO: Test rename() on symlink pointing to an existent path
rename15.c:36: TPASS: oldsym_stat.st_ino == newsym_stat.st_ino (92519)
rename15.c:37: TPASS: oldsym_stat.st_dev == newsym_stat.st_dev (40)
rename15.c:59: TINFO: Test rename() on symlink pointing to a path created lately
rename15.c:65: TPASS: stat(OLDNAME, &path_stat) : ENOENT (2)
rename15.c:67: TINFO: Create object file
rename15.c:69: TBROK: creat(object,0700) failed: EMFILE (24)
fd = SAFE_CREAT(OBJPATH, 0700);
if (fd >= 0)
SAFE_CLOSE(fd);
> +}
> +
> +static void run(void)
> +{
> + test_existing();
> + test_creat();
> + test_non_existing();
> +}
> +
> +static void setup(void)
> +{
> + tmpdir = tst_get_tmpdir();
This will need to be replaced to tst_tmpdir_path();
> +}
> +
> +static void cleanup(void)
> +{
> + free(tmpdir);
> +}
And you now don't need a cleanup function now (done by library).
With fixed this and -i and ideally with the other diff below (but it is up to
you) you may add:
Reviewed-by: Petr Vorel <pvorel@suse.cz>
> +
> +static struct tst_test test = {
> + .setup = setup,
> + .cleanup = cleanup,
> + .test_all = run,
> + .needs_tmpdir = 1,
I also wonder why we don't run this on all filesystems as we do on most of other
rename tests.
> +};
Kind regards,
Petr
diff --git testcases/kernel/syscalls/rename/rename15.c testcases/kernel/syscalls/rename/rename15.c
index d410758a20..8bda162e56 100644
--- testcases/kernel/syscalls/rename/rename15.c
+++ testcases/kernel/syscalls/rename/rename15.c
@@ -1,9 +1,8 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- * Author: David Fenner
- * Copilot: Jon Hendrickson
- * Copyright (C) 2024 Andrea Cervesato andrea.cervesato@suse.com
+ * Authors: David Fenner, Jon Hendrickson
+ * Copyright (C) 2024 Andrea Cervesato <andrea.cervesato@suse.com>
*/
/*\
@@ -16,6 +15,7 @@
#include <stdlib.h>
#include "tst_test.h"
+#define OBJPATH "object"
#define OLDNAME "msymlink0"
#define NEWNAME "asymlink0"
@@ -59,19 +59,22 @@ static void test_creat(void)
{
tst_res(TINFO, "Test rename() on symlink pointing to a path created lately");
- char *objpath = "object";
struct stat path_stat;
+ int fd;
- SAFE_SYMLINK(objpath, OLDNAME);
+ SAFE_SYMLINK(OBJPATH, OLDNAME);
TST_EXP_FAIL(stat(OLDNAME, &path_stat), ENOENT);
tst_res(TINFO, "Create object file");
- SAFE_CREAT(objpath, 0700);
+ fd = SAFE_CREAT(OBJPATH, 0700);
+ if (fd >= 0)
+ SAFE_CLOSE(fd);
+
SAFE_RENAME(OLDNAME, NEWNAME);
TST_EXP_PASS(stat(NEWNAME, &path_stat));
- SAFE_UNLINK(objpath);
+ SAFE_UNLINK(OBJPATH);
SAFE_UNLINK(NEWNAME);
}
@@ -84,17 +87,11 @@ static void run(void)
static void setup(void)
{
- tmpdir = tst_get_tmpdir();
-}
-
-static void cleanup(void)
-{
- free(tmpdir);
+ tmpdir = tst_tmpdir_path();
}
static struct tst_test test = {
.setup = setup,
- .cleanup = cleanup,
.test_all = run,
.needs_tmpdir = 1,
};
--
Mailing list info: https://lists.linux.it/listinfo/ltp
prev parent reply other threads:[~2024-07-30 6:57 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-24 9:23 [LTP] [PATCH v2] Add rename15 test Andrea Cervesato
2024-07-30 6:57 ` Petr Vorel [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=20240730065715.GA1314377@pevik \
--to=pvorel@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.