* [LTP] [PATCH 0/5] symlink01 split
@ 2024-07-02 14:12 Andrea Cervesato
2024-07-02 14:12 ` [LTP] [PATCH 1/5] Add stat04 test Andrea Cervesato
` (4 more replies)
0 siblings, 5 replies; 20+ messages in thread
From: Andrea Cervesato @ 2024-07-02 14:12 UTC (permalink / raw)
To: ltp
This is a developement series (requested by Petr Vorel) that handle
symlink01 split, which has been already merged in the master branch.
In this series we face the next part of symlink01 split that
includes stat04, lstat03, open15 and chmod08.
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
Andrea Cervesato (5):
Add stat04 test
Fix TST_EXP_EXTR() stringification
Add lstat03 test
Add chmod08 test
Add open15 test
include/tst_test_macros.h | 5 +-
runtest/smoketest | 4 +-
runtest/syscalls | 11 +--
testcases/kernel/syscalls/chmod/.gitignore | 1 +
testcases/kernel/syscalls/chmod/chmod08.c | 45 +++++++++++
testcases/kernel/syscalls/fork/fork04.c | 6 +-
testcases/kernel/syscalls/lstat/.gitignore | 2 +
testcases/kernel/syscalls/lstat/lstat03.c | 102 ++++++++++++++++++++++++
testcases/kernel/syscalls/open/.gitignore | 1 +
testcases/kernel/syscalls/open/open15.c | 86 ++++++++++++++++++++
testcases/kernel/syscalls/stat/.gitignore | 2 +
testcases/kernel/syscalls/stat/stat04.c | 121 +++++++++++++++++++++++++++++
12 files changed, 374 insertions(+), 12 deletions(-)
---
base-commit: 072f359ac54395af1d5ade4ca8cc347c5afe6310
change-id: 20240702-stat04-ceeb58b80910
Best regards,
--
Andrea Cervesato <andrea.cervesato@suse.com>
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 20+ messages in thread
* [LTP] [PATCH 1/5] Add stat04 test
2024-07-02 14:12 [LTP] [PATCH 0/5] symlink01 split Andrea Cervesato
@ 2024-07-02 14:12 ` Andrea Cervesato
2024-07-04 7:06 ` Li Wang
2024-07-02 14:12 ` [LTP] [PATCH 2/5] Fix TST_EXP_EXTR() stringification Andrea Cervesato
` (3 subsequent siblings)
4 siblings, 1 reply; 20+ messages in thread
From: Andrea Cervesato @ 2024-07-02 14:12 UTC (permalink / raw)
To: ltp
From: Andrea Cervesato <andrea.cervesato@suse.com>
This test has been extracted from symlink01 test and it checks that
stat() executed on file provide the same information of symlink linking
to it.
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
runtest/smoketest | 4 +-
runtest/syscalls | 4 +-
testcases/kernel/syscalls/stat/.gitignore | 2 +
testcases/kernel/syscalls/stat/stat04.c | 121 ++++++++++++++++++++++++++++++
4 files changed, 127 insertions(+), 4 deletions(-)
diff --git a/runtest/smoketest b/runtest/smoketest
index f6f14fd2b..5608417f9 100644
--- a/runtest/smoketest
+++ b/runtest/smoketest
@@ -8,8 +8,8 @@ time01 time01
wait02 wait02
write01 write01
symlink01 symlink01
-stat04 symlink01 -T stat04
-utime07 utime07
+stat04 stat04
+utime01A symlink01 -T utime01
rename01A symlink01 -T rename01
splice02 splice02 -s 20
df01_sh df01.sh
diff --git a/runtest/syscalls b/runtest/syscalls
index 44a577db3..3e7a5ca1b 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -1535,8 +1535,8 @@ stat02 stat02
stat02_64 stat02_64
stat03 stat03
stat03_64 stat03_64
-stat04 symlink01 -T stat04
-stat04_64 symlink01 -T stat04_64
+stat04 stat04
+stat04_64 stat04_64
statfs01 statfs01
statfs01_64 statfs01_64
diff --git a/testcases/kernel/syscalls/stat/.gitignore b/testcases/kernel/syscalls/stat/.gitignore
index fa0a4ce9f..0a62dc6ee 100644
--- a/testcases/kernel/syscalls/stat/.gitignore
+++ b/testcases/kernel/syscalls/stat/.gitignore
@@ -4,3 +4,5 @@
/stat02_64
/stat03
/stat03_64
+/stat04
+/stat04_64
diff --git a/testcases/kernel/syscalls/stat/stat04.c b/testcases/kernel/syscalls/stat/stat04.c
new file mode 100644
index 000000000..ee635dbd9
--- /dev/null
+++ b/testcases/kernel/syscalls/stat/stat04.c
@@ -0,0 +1,121 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
+ * Author: David Fenner, Jon Hendrickson
+ * Copyright (C) 2024 Andrea Cervesato <andrea.cervesato@suse.com>
+ */
+
+/*\
+ * [Description]
+ *
+ * This test checks that stat() executed on file provide the same information
+ * of symlink linking to it.
+ */
+
+#include <stdlib.h>
+#include "tst_test.h"
+
+#define FILENAME "file.txt"
+#define MNTPOINT "mntpoint"
+#define SYMBNAME MNTPOINT"/file_symlink"
+
+static struct stat *file_stat;
+static struct stat *symb_stat;
+static char *tmpdir;
+
+static void run(void)
+{
+ TST_EXP_EQ_LI(file_stat->st_dev, symb_stat->st_dev);
+ TST_EXP_EQ_LI(file_stat->st_mode, symb_stat->st_mode);
+ TST_EXP_EQ_LI(file_stat->st_nlink, symb_stat->st_nlink);
+ TST_EXP_EQ_LI(file_stat->st_uid, symb_stat->st_uid);
+ TST_EXP_EQ_LI(file_stat->st_gid, symb_stat->st_gid);
+ TST_EXP_EQ_LI(file_stat->st_size, symb_stat->st_size);
+ TST_EXP_EQ_LI(file_stat->st_atime, symb_stat->st_atime);
+ TST_EXP_EQ_LI(file_stat->st_mtime, symb_stat->st_mtime);
+ TST_EXP_EQ_LI(file_stat->st_ctime, symb_stat->st_ctime);
+}
+
+static void setup(void)
+{
+ char opt_bsize[32];
+ char symb_path[PATH_MAX];
+ char file_path[PATH_MAX];
+ const char *const fs_opts[] = {opt_bsize, NULL};
+ struct stat sb;
+ int pagesize;
+ int fd;
+
+ tmpdir = tst_get_tmpdir();
+
+ if (strlen(tmpdir) >= (PATH_MAX - strlen(FILENAME))) {
+ tst_brk(TCONF, "Temporary folder name is too long. "
+ "Can't create file");
+ }
+
+ if (strlen(tmpdir) >= (PATH_MAX - strlen(SYMBNAME))) {
+ tst_brk(TCONF, "Temporary folder name is too long. "
+ "Can't create symbolic link");
+ }
+
+ /* change st_blksize / st_dev */
+ SAFE_STAT(".", &sb);
+ pagesize = sb.st_blksize == 4096 ? 1024 : 4096;
+
+ snprintf(opt_bsize, sizeof(opt_bsize), "-b %i", pagesize);
+ SAFE_MKFS(tst_device->dev, tst_device->fs_type, fs_opts, NULL);
+ SAFE_MOUNT(tst_device->dev, MNTPOINT, tst_device->fs_type, 0, 0);
+
+ SAFE_TOUCH(FILENAME, 0777, NULL);
+
+ /* change st_nlink */
+ SAFE_LINK(FILENAME, "linked_file");
+
+ /* change st_uid and st_gid */
+ SAFE_CHOWN(FILENAME, 1000, 1000);
+
+ /* change st_size */
+ fd = SAFE_OPEN(FILENAME, O_WRONLY, 0777);
+ tst_fill_fd(fd, 'a', TST_KB, 500);
+ SAFE_CLOSE(fd);
+
+ /* change st_atime / st_mtime / st_ctime */
+ sleep(1);
+
+ memset(file_path, 0, PATH_MAX);
+ snprintf(file_path, PATH_MAX, "%s/%s", tmpdir, FILENAME);
+
+ memset(symb_path, 0, PATH_MAX);
+ snprintf(symb_path, PATH_MAX, "%s/%s", tmpdir, SYMBNAME);
+
+ SAFE_SYMLINK(file_path, symb_path);
+
+ SAFE_STAT(file_path, file_stat);
+ SAFE_STAT(symb_path, symb_stat);
+}
+
+static void cleanup(void)
+{
+ free(tmpdir);
+
+ SAFE_UNLINK(SYMBNAME);
+
+ if (tst_is_mounted(MNTPOINT))
+ SAFE_UMOUNT(MNTPOINT);
+}
+
+static struct tst_test test = {
+ .setup = setup,
+ .cleanup = cleanup,
+ .test_all = run,
+ .needs_root = 1,
+ .needs_tmpdir = 1,
+ .needs_device = 1,
+ .mntpoint = MNTPOINT,
+ .dev_fs_type = "ext2",
+ .bufs = (struct tst_buffers []) {
+ {&file_stat, .size = sizeof(struct stat)},
+ {&symb_stat, .size = sizeof(struct stat)},
+ {}
+ }
+};
--
2.43.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [LTP] [PATCH 2/5] Fix TST_EXP_EXTR() stringification
2024-07-02 14:12 [LTP] [PATCH 0/5] symlink01 split Andrea Cervesato
2024-07-02 14:12 ` [LTP] [PATCH 1/5] Add stat04 test Andrea Cervesato
@ 2024-07-02 14:12 ` Andrea Cervesato
2024-07-04 7:11 ` Li Wang
2024-07-04 9:19 ` Cyril Hrubis
2024-07-02 14:12 ` [LTP] [PATCH 3/5] Add lstat03 test Andrea Cervesato
` (2 subsequent siblings)
4 siblings, 2 replies; 20+ messages in thread
From: Andrea Cervesato @ 2024-07-02 14:12 UTC (permalink / raw)
To: ltp
From: Andrea Cervesato <andrea.cervesato@suse.com>
Follow the TST_* macros standards when it comes to stringification of
the expressions.
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
include/tst_test_macros.h | 5 +++--
testcases/kernel/syscalls/fork/fork04.c | 6 +++---
2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/include/tst_test_macros.h b/include/tst_test_macros.h
index 22b39fb14..7a443c803 100644
--- a/include/tst_test_macros.h
+++ b/include/tst_test_macros.h
@@ -340,8 +340,9 @@ const char *tst_errno_names(char *buf, const int *exp_errs, int exp_errs_cnt);
&tst_exp_err__, 1, ##__VA_ARGS__); \
} while (0)
-#define TST_EXP_EXPR(EXPR, FMT, ...) \
- tst_res_(__FILE__, __LINE__, (EXPR) ? TPASS : TFAIL, "Expect: " FMT, ##__VA_ARGS__);
+#define TST_EXP_EXPR(EXPR, ...) \
+ tst_res_(__FILE__, __LINE__, (EXPR) ? TPASS : TFAIL, "Expect: " \
+ TST_FMT_(TST_2_(dummy, ##__VA_ARGS__, #EXPR), __VA_ARGS__));
#define TST_EXP_EQ_(VAL_A, SVAL_A, VAL_B, SVAL_B, TYPE, PFS) do {\
TYPE tst_tmp_a__ = VAL_A; \
diff --git a/testcases/kernel/syscalls/fork/fork04.c b/testcases/kernel/syscalls/fork/fork04.c
index b0c6bebe0..413cd5eb4 100644
--- a/testcases/kernel/syscalls/fork/fork04.c
+++ b/testcases/kernel/syscalls/fork/fork04.c
@@ -29,7 +29,7 @@ static void run_child(void)
TST_EXP_EXPR(strcmp(ENV_VAL0, val) == 0,
"%s environ variable has been inherited by the child",
- ENV_KEY)
+ ENV_KEY);
tst_res(TINFO, "Unset %s environ variable inside child", ENV_KEY);
@@ -72,7 +72,7 @@ static void run(void)
} else {
TST_EXP_EXPR(strcmp(ENV_VAL0, val) == 0,
"%s environ variable is still present inside parent",
- ENV_KEY)
+ ENV_KEY);
}
TST_CHECKPOINT_WAKE_AND_WAIT(0);
@@ -85,7 +85,7 @@ static void run(void)
else {
TST_EXP_EXPR(strcmp(ENV_VAL0, val) == 0,
"%s environ variable didn't change inside parent",
- ENV_KEY)
+ ENV_KEY);
}
}
--
2.43.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [LTP] [PATCH 3/5] Add lstat03 test
2024-07-02 14:12 [LTP] [PATCH 0/5] symlink01 split Andrea Cervesato
2024-07-02 14:12 ` [LTP] [PATCH 1/5] Add stat04 test Andrea Cervesato
2024-07-02 14:12 ` [LTP] [PATCH 2/5] Fix TST_EXP_EXTR() stringification Andrea Cervesato
@ 2024-07-02 14:12 ` Andrea Cervesato
2024-07-04 6:36 ` Li Wang
2024-07-02 14:12 ` [LTP] [PATCH 4/5] Add chmod08 test Andrea Cervesato
2024-07-02 14:12 ` [LTP] [PATCH 5/5] Add open15 test Andrea Cervesato
4 siblings, 1 reply; 20+ messages in thread
From: Andrea Cervesato @ 2024-07-02 14:12 UTC (permalink / raw)
To: ltp
From: Andrea Cervesato <andrea.cervesato@suse.com>
This test has been extracted from symlink01 test and it checks that
lstat() provides the right information, according with device, access
time, block size, ownership, etc.
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
runtest/syscalls | 4 +-
testcases/kernel/syscalls/lstat/.gitignore | 2 +
testcases/kernel/syscalls/lstat/lstat03.c | 102 +++++++++++++++++++++++++++++
3 files changed, 106 insertions(+), 2 deletions(-)
diff --git a/runtest/syscalls b/runtest/syscalls
index 3e7a5ca1b..d78b6822b 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -725,12 +725,12 @@ lseek02 lseek02
lseek07 lseek07
lseek11 lseek11
-lstat01A symlink01 -T lstat01
-lstat01A_64 symlink01 -T lstat01_64
lstat01 lstat01
lstat01_64 lstat01_64
lstat02 lstat02
lstat02_64 lstat02_64
+lstat03 lstat03
+lstat03_64 lstat03_64
mallinfo02 mallinfo02
diff --git a/testcases/kernel/syscalls/lstat/.gitignore b/testcases/kernel/syscalls/lstat/.gitignore
index a497a445f..72cba871f 100644
--- a/testcases/kernel/syscalls/lstat/.gitignore
+++ b/testcases/kernel/syscalls/lstat/.gitignore
@@ -2,3 +2,5 @@
/lstat01_64
/lstat02
/lstat02_64
+/lstat03
+/lstat03_64
diff --git a/testcases/kernel/syscalls/lstat/lstat03.c b/testcases/kernel/syscalls/lstat/lstat03.c
new file mode 100644
index 000000000..b52ba0c35
--- /dev/null
+++ b/testcases/kernel/syscalls/lstat/lstat03.c
@@ -0,0 +1,102 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
+ * Author: David Fenner, Jon Hendrickson
+ * Copyright (C) 2024 Andrea Cervesato andrea.cervesato@suse.com
+ */
+
+/*\
+ * [Description]
+ *
+ * This test verifies that lstat() provides correct information according
+ * with device, access time, block size, ownership, etc.
+ * The implementation provides a set of tests which are specific for each one
+ * of the `struct stat` used to read file and symlink information.
+ */
+
+#include "tst_test.h"
+
+#define FILENAME "file.txt"
+#define MNTPOINT "mntpoint"
+#define SYMBNAME MNTPOINT"/file_symlink"
+
+static struct stat *file_stat;
+static struct stat *symb_stat;
+
+static void run(void)
+{
+ TST_EXP_EXPR(file_stat->st_dev != symb_stat->st_dev);
+ TST_EXP_EXPR(file_stat->st_mode != symb_stat->st_mode);
+ TST_EXP_EXPR(file_stat->st_nlink != symb_stat->st_nlink);
+ TST_EXP_EXPR(file_stat->st_ino != symb_stat->st_ino);
+ TST_EXP_EXPR(file_stat->st_uid != symb_stat->st_uid);
+ TST_EXP_EXPR(file_stat->st_gid != symb_stat->st_gid);
+ TST_EXP_EXPR(file_stat->st_size != symb_stat->st_size);
+ TST_EXP_EXPR(file_stat->st_blocks != symb_stat->st_blocks);
+ TST_EXP_EXPR(file_stat->st_blksize != symb_stat->st_blksize);
+ TST_EXP_EXPR(file_stat->st_atime != symb_stat->st_atime);
+ TST_EXP_EXPR(file_stat->st_mtime != symb_stat->st_mtime);
+ TST_EXP_EXPR(file_stat->st_ctime != symb_stat->st_ctime);
+}
+
+static void setup(void)
+{
+ char opt_bsize[32];
+ const char *const fs_opts[] = {opt_bsize, NULL};
+ struct stat sb;
+ int pagesize;
+ int fd;
+
+ /* change st_blksize / st_dev */
+ SAFE_STAT(".", &sb);
+ pagesize = sb.st_blksize == 4096 ? 1024 : 4096;
+
+ snprintf(opt_bsize, sizeof(opt_bsize), "-b %i", pagesize);
+ SAFE_MKFS(tst_device->dev, tst_device->fs_type, fs_opts, NULL);
+ SAFE_MOUNT(tst_device->dev, MNTPOINT, tst_device->fs_type, 0, 0);
+
+ SAFE_TOUCH(FILENAME, 0777, NULL);
+
+ /* change st_nlink */
+ SAFE_LINK(FILENAME, "linked_file");
+
+ /* change st_uid and st_gid */
+ SAFE_CHOWN(FILENAME, 1000, 1000);
+
+ /* change st_size */
+ fd = SAFE_OPEN(FILENAME, O_WRONLY, 0777);
+ tst_fill_fd(fd, 'a', TST_KB, 500);
+ SAFE_CLOSE(fd);
+
+ /* change st_atime / st_mtime / st_ctime */
+ sleep(1);
+
+ SAFE_SYMLINK(FILENAME, SYMBNAME);
+
+ SAFE_LSTAT(FILENAME, file_stat);
+ SAFE_LSTAT(SYMBNAME, symb_stat);
+}
+
+static void cleanup(void)
+{
+ SAFE_UNLINK(SYMBNAME);
+
+ if (tst_is_mounted(MNTPOINT))
+ SAFE_UMOUNT(MNTPOINT);
+}
+
+static struct tst_test test = {
+ .setup = setup,
+ .cleanup = cleanup,
+ .test_all = run,
+ .needs_root = 1,
+ .needs_tmpdir = 1,
+ .needs_device = 1,
+ .mntpoint = MNTPOINT,
+ .dev_fs_type = "ext2",
+ .bufs = (struct tst_buffers []) {
+ {&file_stat, .size = sizeof(struct stat)},
+ {&symb_stat, .size = sizeof(struct stat)},
+ {}
+ }
+};
--
2.43.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [LTP] [PATCH 4/5] Add chmod08 test
2024-07-02 14:12 [LTP] [PATCH 0/5] symlink01 split Andrea Cervesato
` (2 preceding siblings ...)
2024-07-02 14:12 ` [LTP] [PATCH 3/5] Add lstat03 test Andrea Cervesato
@ 2024-07-02 14:12 ` Andrea Cervesato
2024-07-04 7:12 ` Li Wang
2024-07-02 14:12 ` [LTP] [PATCH 5/5] Add open15 test Andrea Cervesato
4 siblings, 1 reply; 20+ messages in thread
From: Andrea Cervesato @ 2024-07-02 14:12 UTC (permalink / raw)
To: ltp
From: Andrea Cervesato <andrea.cervesato@suse.com>
This test has been extracted from symlink01 and it verifies that
chmod() is working correctly on symlink() generated files.
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
runtest/syscalls | 1 +
testcases/kernel/syscalls/chmod/.gitignore | 1 +
testcases/kernel/syscalls/chmod/chmod08.c | 45 ++++++++++++++++++++++++++++++
3 files changed, 47 insertions(+)
diff --git a/runtest/syscalls b/runtest/syscalls
index d78b6822b..928e75f9b 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -72,6 +72,7 @@ chmod03 chmod03
chmod05 chmod05
chmod06 chmod06
chmod07 chmod07
+chmod08 chmod08
chown01 chown01
chown01_16 chown01_16
diff --git a/testcases/kernel/syscalls/chmod/.gitignore b/testcases/kernel/syscalls/chmod/.gitignore
index 27ddfce16..f295f4dcb 100644
--- a/testcases/kernel/syscalls/chmod/.gitignore
+++ b/testcases/kernel/syscalls/chmod/.gitignore
@@ -3,3 +3,4 @@
/chmod05
/chmod06
/chmod07
+/chmod08
diff --git a/testcases/kernel/syscalls/chmod/chmod08.c b/testcases/kernel/syscalls/chmod/chmod08.c
new file mode 100644
index 000000000..7ef396348
--- /dev/null
+++ b/testcases/kernel/syscalls/chmod/chmod08.c
@@ -0,0 +1,45 @@
+// 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
+ */
+
+/*\
+ * [Description]
+ *
+ * This test verifies that chmod() is working correctly on symlink()
+ * generated files.
+ */
+
+#include "tst_test.h"
+
+#define PERMS 01777
+#define TESTFILE "myobject"
+
+static void run(void)
+{
+ char *symname = "my_symlink0";
+ struct stat oldsym_stat;
+ struct stat newsym_stat;
+
+ SAFE_TOUCH(TESTFILE, 0644, NULL);
+ SAFE_SYMLINK(TESTFILE, symname);
+ SAFE_STAT(symname, &oldsym_stat);
+
+ TST_EXP_PASS(chmod(symname, PERMS));
+ SAFE_STAT(symname, &newsym_stat);
+
+ TST_EXP_EQ_LI(newsym_stat.st_mode & PERMS, PERMS);
+ TST_EXP_EXPR(oldsym_stat.st_mode != newsym_stat.st_mode,
+ "file mode has changed");
+
+ SAFE_UNLINK(symname);
+ SAFE_UNLINK(TESTFILE);
+}
+
+static struct tst_test test = {
+ .test_all = run,
+ .needs_tmpdir = 1,
+};
--
2.43.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [LTP] [PATCH 5/5] Add open15 test
2024-07-02 14:12 [LTP] [PATCH 0/5] symlink01 split Andrea Cervesato
` (3 preceding siblings ...)
2024-07-02 14:12 ` [LTP] [PATCH 4/5] Add chmod08 test Andrea Cervesato
@ 2024-07-02 14:12 ` Andrea Cervesato
2024-07-04 7:18 ` Li Wang
4 siblings, 1 reply; 20+ messages in thread
From: Andrea Cervesato @ 2024-07-02 14:12 UTC (permalink / raw)
To: ltp
From: Andrea Cervesato <andrea.cervesato@suse.com>
This test has been extracted from symlink01 and it verifies that
open() is working correctly on symlink() generated files.
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
runtest/syscalls | 2 +-
testcases/kernel/syscalls/open/.gitignore | 1 +
testcases/kernel/syscalls/open/open15.c | 86 +++++++++++++++++++++++++++++++
3 files changed, 88 insertions(+), 1 deletion(-)
diff --git a/runtest/syscalls b/runtest/syscalls
index 928e75f9b..47efac158 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -923,7 +923,6 @@ nice04 nice04
nice05 nice05
open01 open01
-open01A symlink01 -T open01
open02 open02
open03 open03
open04 open04
@@ -936,6 +935,7 @@ open11 open11
open12 open12
open13 open13
open14 open14
+open15 open15
openat01 openat01
openat02 openat02
diff --git a/testcases/kernel/syscalls/open/.gitignore b/testcases/kernel/syscalls/open/.gitignore
index 001d874d6..af5997572 100644
--- a/testcases/kernel/syscalls/open/.gitignore
+++ b/testcases/kernel/syscalls/open/.gitignore
@@ -12,3 +12,4 @@
/open12_child
/open13
/open14
+/open15
diff --git a/testcases/kernel/syscalls/open/open15.c b/testcases/kernel/syscalls/open/open15.c
new file mode 100644
index 000000000..cbe2d62a4
--- /dev/null
+++ b/testcases/kernel/syscalls/open/open15.c
@@ -0,0 +1,86 @@
+// 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
+ */
+
+/*\
+ * [Description]
+ *
+ * This test verifies that open() is working correctly on symlink()
+ * generated files.
+ */
+
+#include "tst_test.h"
+
+#define FILENAME "myfile.txt"
+#define BIG_STRING "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
+
+static void test_open_symlink(void)
+{
+ int fd;
+ int str_size;
+ char buff[128];
+ char *symname = "my_symlink0";
+
+ str_size = strlen(BIG_STRING);
+
+ SAFE_SYMLINK(FILENAME, symname);
+
+ fd = SAFE_OPEN(symname, O_CREAT | O_RDWR, 0777);
+ SAFE_WRITE(SAFE_WRITE_ALL, fd, BIG_STRING, str_size);
+ SAFE_LSEEK(fd, 0, 0);
+ SAFE_READ(1, fd, buff, str_size);
+ SAFE_CLOSE(fd);
+
+ TST_EXP_EXPR(!strncmp(buff, BIG_STRING, str_size),
+ "symlink generated file can be opened to write data");
+
+ SAFE_UNLINK(symname);
+ SAFE_UNLINK(FILENAME);
+}
+
+static void test_open_compare(void)
+{
+ int fd_file, fd_symlink;
+ int str_size;
+ char buff_file[128];
+ char buff_symlink[128];
+ char *symname = "my_symlink1";
+
+ str_size = strlen(BIG_STRING);
+
+ fd_file = SAFE_OPEN(FILENAME, O_CREAT | O_RDWR, 0777);
+ SAFE_WRITE(SAFE_WRITE_ALL, fd_file, BIG_STRING, str_size);
+
+ SAFE_SYMLINK(FILENAME, symname);
+
+ SAFE_LSEEK(fd_file, 0, 0);
+ SAFE_READ(1, fd_file, buff_file, str_size);
+
+ fd_symlink = SAFE_OPEN(symname, O_RDWR, 0777);
+ SAFE_LSEEK(fd_symlink, 0, 0);
+ SAFE_READ(1, fd_symlink, buff_symlink, str_size);
+
+ TST_EXP_EXPR(!strncmp(buff_file, buff_symlink, str_size),
+ "file data is the equivalent to symlink generated file data");
+
+ SAFE_CLOSE(fd_file);
+ SAFE_CLOSE(fd_symlink);
+
+ SAFE_UNLINK(symname);
+ SAFE_UNLINK(FILENAME);
+}
+
+static void run(void)
+{
+ test_open_symlink();
+ test_open_compare();
+}
+
+static struct tst_test test = {
+ .test_all = run,
+ .needs_tmpdir = 1,
+};
--
2.43.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [LTP] [PATCH 3/5] Add lstat03 test
2024-07-02 14:12 ` [LTP] [PATCH 3/5] Add lstat03 test Andrea Cervesato
@ 2024-07-04 6:36 ` Li Wang
2024-07-04 6:56 ` Li Wang
0 siblings, 1 reply; 20+ messages in thread
From: Li Wang @ 2024-07-04 6:36 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
On Tue, Jul 2, 2024 at 10:15 PM Andrea Cervesato <andrea.cervesato@suse.de>
wrote:
> From: Andrea Cervesato <andrea.cervesato@suse.com>
>
> This test has been extracted from symlink01 test and it checks that
> lstat() provides the right information, according with device, access
> time, block size, ownership, etc.
>
> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
> ---
> runtest/syscalls | 4 +-
> testcases/kernel/syscalls/lstat/.gitignore | 2 +
> testcases/kernel/syscalls/lstat/lstat03.c | 102
> +++++++++++++++++++++++++++++
> 3 files changed, 106 insertions(+), 2 deletions(-)
>
> diff --git a/runtest/syscalls b/runtest/syscalls
> index 3e7a5ca1b..d78b6822b 100644
> --- a/runtest/syscalls
> +++ b/runtest/syscalls
> @@ -725,12 +725,12 @@ lseek02 lseek02
> lseek07 lseek07
> lseek11 lseek11
>
> -lstat01A symlink01 -T lstat01
> -lstat01A_64 symlink01 -T lstat01_64
> lstat01 lstat01
> lstat01_64 lstat01_64
> lstat02 lstat02
> lstat02_64 lstat02_64
> +lstat03 lstat03
> +lstat03_64 lstat03_64
>
> mallinfo02 mallinfo02
>
> diff --git a/testcases/kernel/syscalls/lstat/.gitignore
> b/testcases/kernel/syscalls/lstat/.gitignore
> index a497a445f..72cba871f 100644
> --- a/testcases/kernel/syscalls/lstat/.gitignore
> +++ b/testcases/kernel/syscalls/lstat/.gitignore
> @@ -2,3 +2,5 @@
> /lstat01_64
> /lstat02
> /lstat02_64
> +/lstat03
> +/lstat03_64
> diff --git a/testcases/kernel/syscalls/lstat/lstat03.c
> b/testcases/kernel/syscalls/lstat/lstat03.c
> new file mode 100644
> index 000000000..b52ba0c35
> --- /dev/null
> +++ b/testcases/kernel/syscalls/lstat/lstat03.c
> @@ -0,0 +1,102 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
> + * Author: David Fenner, Jon Hendrickson
> + * Copyright (C) 2024 Andrea Cervesato andrea.cervesato@suse.com
> + */
> +
> +/*\
> + * [Description]
> + *
> + * This test verifies that lstat() provides correct information according
> + * with device, access time, block size, ownership, etc.
> + * The implementation provides a set of tests which are specific for each
> one
> + * of the `struct stat` used to read file and symlink information.
> + */
> +
> +#include "tst_test.h"
> +
> +#define FILENAME "file.txt"
> +#define MNTPOINT "mntpoint"
> +#define SYMBNAME MNTPOINT"/file_symlink"
> +
> +static struct stat *file_stat;
> +static struct stat *symb_stat;
> +
> +static void run(void)
> +{
> + TST_EXP_EXPR(file_stat->st_dev != symb_stat->st_dev);
> + TST_EXP_EXPR(file_stat->st_mode != symb_stat->st_mode);
> + TST_EXP_EXPR(file_stat->st_nlink != symb_stat->st_nlink);
> + TST_EXP_EXPR(file_stat->st_ino != symb_stat->st_ino);
> + TST_EXP_EXPR(file_stat->st_uid != symb_stat->st_uid);
> + TST_EXP_EXPR(file_stat->st_gid != symb_stat->st_gid);
> + TST_EXP_EXPR(file_stat->st_size != symb_stat->st_size);
> + TST_EXP_EXPR(file_stat->st_blocks != symb_stat->st_blocks);
> + TST_EXP_EXPR(file_stat->st_blksize != symb_stat->st_blksize);
> + TST_EXP_EXPR(file_stat->st_atime != symb_stat->st_atime);
> + TST_EXP_EXPR(file_stat->st_mtime != symb_stat->st_mtime);
> + TST_EXP_EXPR(file_stat->st_ctime != symb_stat->st_ctime);
> +}
> +
> +static void setup(void)
> +{
> + char opt_bsize[32];
> + const char *const fs_opts[] = {opt_bsize, NULL};
> + struct stat sb;
> + int pagesize;
> + int fd;
> +
> + /* change st_blksize / st_dev */
> + SAFE_STAT(".", &sb);
> + pagesize = sb.st_blksize == 4096 ? 1024 : 4096;
> +
> + snprintf(opt_bsize, sizeof(opt_bsize), "-b %i", pagesize);
> + SAFE_MKFS(tst_device->dev, tst_device->fs_type, fs_opts, NULL);
> + SAFE_MOUNT(tst_device->dev, MNTPOINT, tst_device->fs_type, 0, 0);
> +
> + SAFE_TOUCH(FILENAME, 0777, NULL);
> +
> + /* change st_nlink */
> + SAFE_LINK(FILENAME, "linked_file");
> +
> + /* change st_uid and st_gid */
> + SAFE_CHOWN(FILENAME, 1000, 1000);
> +
> + /* change st_size */
> + fd = SAFE_OPEN(FILENAME, O_WRONLY, 0777);
> + tst_fill_fd(fd, 'a', TST_KB, 500);
> + SAFE_CLOSE(fd);
> +
> + /* change st_atime / st_mtime / st_ctime */
> + sleep(1);
> +
> + SAFE_SYMLINK(FILENAME, SYMBNAME);
> +
>
> + SAFE_LSTAT(FILENAME, file_stat);
> + SAFE_LSTAT(SYMBNAME, symb_stat);
>
Maybe it would be better to move those two lines into run() function.
It makes the test real performed again when using '-i 2' parameter.
> +}
> +
> +static void cleanup(void)
> +{
> + SAFE_UNLINK(SYMBNAME);
> +
> + if (tst_is_mounted(MNTPOINT))
> + SAFE_UMOUNT(MNTPOINT);
> +}
> +
> +static struct tst_test test = {
> + .setup = setup,
> + .cleanup = cleanup,
> + .test_all = run,
> + .needs_root = 1,
> + .needs_tmpdir = 1,
> + .needs_device = 1,
> + .mntpoint = MNTPOINT,
> + .dev_fs_type = "ext2",
> + .bufs = (struct tst_buffers []) {
> + {&file_stat, .size = sizeof(struct stat)},
> + {&symb_stat, .size = sizeof(struct stat)},
> + {}
> + }
> +};
>
> --
> 2.43.0
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
>
>
--
Regards,
Li Wang
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [LTP] [PATCH 3/5] Add lstat03 test
2024-07-04 6:36 ` Li Wang
@ 2024-07-04 6:56 ` Li Wang
0 siblings, 0 replies; 20+ messages in thread
From: Li Wang @ 2024-07-04 6:56 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
On Thu, Jul 4, 2024 at 2:36 PM Li Wang <liwang@redhat.com> wrote:
>
>
> On Tue, Jul 2, 2024 at 10:15 PM Andrea Cervesato <andrea.cervesato@suse.de>
> wrote:
>
>> From: Andrea Cervesato <andrea.cervesato@suse.com>
>>
>> This test has been extracted from symlink01 test and it checks that
>> lstat() provides the right information, according with device, access
>> time, block size, ownership, etc.
>>
>> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
>> ---
>> runtest/syscalls | 4 +-
>> testcases/kernel/syscalls/lstat/.gitignore | 2 +
>> testcases/kernel/syscalls/lstat/lstat03.c | 102
>> +++++++++++++++++++++++++++++
>> 3 files changed, 106 insertions(+), 2 deletions(-)
>>
>> diff --git a/runtest/syscalls b/runtest/syscalls
>> index 3e7a5ca1b..d78b6822b 100644
>> --- a/runtest/syscalls
>> +++ b/runtest/syscalls
>> @@ -725,12 +725,12 @@ lseek02 lseek02
>> lseek07 lseek07
>> lseek11 lseek11
>>
>> -lstat01A symlink01 -T lstat01
>> -lstat01A_64 symlink01 -T lstat01_64
>> lstat01 lstat01
>> lstat01_64 lstat01_64
>> lstat02 lstat02
>> lstat02_64 lstat02_64
>> +lstat03 lstat03
>> +lstat03_64 lstat03_64
>>
>> mallinfo02 mallinfo02
>>
>> diff --git a/testcases/kernel/syscalls/lstat/.gitignore
>> b/testcases/kernel/syscalls/lstat/.gitignore
>> index a497a445f..72cba871f 100644
>> --- a/testcases/kernel/syscalls/lstat/.gitignore
>> +++ b/testcases/kernel/syscalls/lstat/.gitignore
>> @@ -2,3 +2,5 @@
>> /lstat01_64
>> /lstat02
>> /lstat02_64
>> +/lstat03
>> +/lstat03_64
>> diff --git a/testcases/kernel/syscalls/lstat/lstat03.c
>> b/testcases/kernel/syscalls/lstat/lstat03.c
>> new file mode 100644
>> index 000000000..b52ba0c35
>> --- /dev/null
>> +++ b/testcases/kernel/syscalls/lstat/lstat03.c
>> @@ -0,0 +1,102 @@
>> +// SPDX-License-Identifier: GPL-2.0-or-later
>> +/*
>> + * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
>> + * Author: David Fenner, Jon Hendrickson
>> + * Copyright (C) 2024 Andrea Cervesato andrea.cervesato@suse.com
>> + */
>> +
>> +/*\
>> + * [Description]
>> + *
>> + * This test verifies that lstat() provides correct information according
>> + * with device, access time, block size, ownership, etc.
>> + * The implementation provides a set of tests which are specific for
>> each one
>> + * of the `struct stat` used to read file and symlink information.
>> + */
>> +
>> +#include "tst_test.h"
>> +
>> +#define FILENAME "file.txt"
>> +#define MNTPOINT "mntpoint"
>> +#define SYMBNAME MNTPOINT"/file_symlink"
>> +
>> +static struct stat *file_stat;
>> +static struct stat *symb_stat;
>> +
>> +static void run(void)
>> +{
>> + TST_EXP_EXPR(file_stat->st_dev != symb_stat->st_dev);
>> + TST_EXP_EXPR(file_stat->st_mode != symb_stat->st_mode);
>> + TST_EXP_EXPR(file_stat->st_nlink != symb_stat->st_nlink);
>> + TST_EXP_EXPR(file_stat->st_ino != symb_stat->st_ino);
>> + TST_EXP_EXPR(file_stat->st_uid != symb_stat->st_uid);
>> + TST_EXP_EXPR(file_stat->st_gid != symb_stat->st_gid);
>> + TST_EXP_EXPR(file_stat->st_size != symb_stat->st_size);
>> + TST_EXP_EXPR(file_stat->st_blocks != symb_stat->st_blocks);
>> + TST_EXP_EXPR(file_stat->st_blksize != symb_stat->st_blksize);
>> + TST_EXP_EXPR(file_stat->st_atime != symb_stat->st_atime);
>> + TST_EXP_EXPR(file_stat->st_mtime != symb_stat->st_mtime);
>> + TST_EXP_EXPR(file_stat->st_ctime != symb_stat->st_ctime);
>> +}
>> +
>> +static void setup(void)
>> +{
>> + char opt_bsize[32];
>> + const char *const fs_opts[] = {opt_bsize, NULL};
>> + struct stat sb;
>> + int pagesize;
>> + int fd;
>> +
>> + /* change st_blksize / st_dev */
>> + SAFE_STAT(".", &sb);
>> + pagesize = sb.st_blksize == 4096 ? 1024 : 4096;
>> +
>> + snprintf(opt_bsize, sizeof(opt_bsize), "-b %i", pagesize);
>> + SAFE_MKFS(tst_device->dev, tst_device->fs_type, fs_opts, NULL);
>> + SAFE_MOUNT(tst_device->dev, MNTPOINT, tst_device->fs_type, 0, 0);
>> +
>> + SAFE_TOUCH(FILENAME, 0777, NULL);
>> +
>> + /* change st_nlink */
>> + SAFE_LINK(FILENAME, "linked_file");
>> +
>> + /* change st_uid and st_gid */
>> + SAFE_CHOWN(FILENAME, 1000, 1000);
>> +
>> + /* change st_size */
>> + fd = SAFE_OPEN(FILENAME, O_WRONLY, 0777);
>> + tst_fill_fd(fd, 'a', TST_KB, 500);
>> + SAFE_CLOSE(fd);
>> +
>> + /* change st_atime / st_mtime / st_ctime */
>> + sleep(1);
>>
>
And, I would suggest using usleep(1001000) instead of 1sec especial
for such atime checking test.
To avoid problem like:
https://github.com/linux-test-project/ltp/commit/ff60156bc02f255fa08934b95223e29a6637eb6a
> +
>> + SAFE_SYMLINK(FILENAME, SYMBNAME);
>> +
>>
>
>
>
>> + SAFE_LSTAT(FILENAME, file_stat);
>> + SAFE_LSTAT(SYMBNAME, symb_stat);
>>
>
> Maybe it would be better to move those two lines into run() function.
> It makes the test real performed again when using '-i 2' parameter.
>
>
>
>> +}
>> +
>> +static void cleanup(void)
>> +{
>> + SAFE_UNLINK(SYMBNAME);
>> +
>> + if (tst_is_mounted(MNTPOINT))
>> + SAFE_UMOUNT(MNTPOINT);
>> +}
>> +
>> +static struct tst_test test = {
>> + .setup = setup,
>> + .cleanup = cleanup,
>> + .test_all = run,
>> + .needs_root = 1,
>> + .needs_tmpdir = 1,
>> + .needs_device = 1,
>> + .mntpoint = MNTPOINT,
>> + .dev_fs_type = "ext2",
>> + .bufs = (struct tst_buffers []) {
>> + {&file_stat, .size = sizeof(struct stat)},
>> + {&symb_stat, .size = sizeof(struct stat)},
>> + {}
>> + }
>> +};
>>
>> --
>> 2.43.0
>>
>>
>> --
>> Mailing list info: https://lists.linux.it/listinfo/ltp
>>
>>
>
> --
> Regards,
> Li Wang
>
--
Regards,
Li Wang
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [LTP] [PATCH 1/5] Add stat04 test
2024-07-02 14:12 ` [LTP] [PATCH 1/5] Add stat04 test Andrea Cervesato
@ 2024-07-04 7:06 ` Li Wang
2024-07-04 9:17 ` Cyril Hrubis
0 siblings, 1 reply; 20+ messages in thread
From: Li Wang @ 2024-07-04 7:06 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
On Tue, Jul 2, 2024 at 10:15 PM Andrea Cervesato <andrea.cervesato@suse.de>
wrote:
> From: Andrea Cervesato <andrea.cervesato@suse.com>
>
> This test has been extracted from symlink01 test and it checks that
> stat() executed on file provide the same information of symlink linking
> to it.
>
> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
> ---
> runtest/smoketest | 4 +-
> runtest/syscalls | 4 +-
> testcases/kernel/syscalls/stat/.gitignore | 2 +
> testcases/kernel/syscalls/stat/stat04.c | 121
> ++++++++++++++++++++++++++++++
> 4 files changed, 127 insertions(+), 4 deletions(-)
>
> diff --git a/runtest/smoketest b/runtest/smoketest
> index f6f14fd2b..5608417f9 100644
> --- a/runtest/smoketest
> +++ b/runtest/smoketest
> @@ -8,8 +8,8 @@ time01 time01
> wait02 wait02
> write01 write01
> symlink01 symlink01
> -stat04 symlink01 -T stat04
> -utime07 utime07
> +stat04 stat04
> +utime01A symlink01 -T utime01
> rename01A symlink01 -T rename01
> splice02 splice02 -s 20
> df01_sh df01.sh
> diff --git a/runtest/syscalls b/runtest/syscalls
> index 44a577db3..3e7a5ca1b 100644
> --- a/runtest/syscalls
> +++ b/runtest/syscalls
> @@ -1535,8 +1535,8 @@ stat02 stat02
> stat02_64 stat02_64
> stat03 stat03
> stat03_64 stat03_64
> -stat04 symlink01 -T stat04
> -stat04_64 symlink01 -T stat04_64
> +stat04 stat04
> +stat04_64 stat04_64
>
> statfs01 statfs01
> statfs01_64 statfs01_64
> diff --git a/testcases/kernel/syscalls/stat/.gitignore
> b/testcases/kernel/syscalls/stat/.gitignore
> index fa0a4ce9f..0a62dc6ee 100644
> --- a/testcases/kernel/syscalls/stat/.gitignore
> +++ b/testcases/kernel/syscalls/stat/.gitignore
> @@ -4,3 +4,5 @@
> /stat02_64
> /stat03
> /stat03_64
> +/stat04
> +/stat04_64
> diff --git a/testcases/kernel/syscalls/stat/stat04.c
> b/testcases/kernel/syscalls/stat/stat04.c
> new file mode 100644
> index 000000000..ee635dbd9
> --- /dev/null
> +++ b/testcases/kernel/syscalls/stat/stat04.c
> @@ -0,0 +1,121 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
> + * Author: David Fenner, Jon Hendrickson
> + * Copyright (C) 2024 Andrea Cervesato <andrea.cervesato@suse.com>
> + */
> +
> +/*\
> + * [Description]
> + *
> + * This test checks that stat() executed on file provide the same
> information
> + * of symlink linking to it.
> + */
> +
> +#include <stdlib.h>
> +#include "tst_test.h"
> +
> +#define FILENAME "file.txt"
> +#define MNTPOINT "mntpoint"
> +#define SYMBNAME MNTPOINT"/file_symlink"
> +
> +static struct stat *file_stat;
> +static struct stat *symb_stat;
> +static char *tmpdir;
> +
> +static void run(void)
> +{
> + TST_EXP_EQ_LI(file_stat->st_dev, symb_stat->st_dev);
> + TST_EXP_EQ_LI(file_stat->st_mode, symb_stat->st_mode);
> + TST_EXP_EQ_LI(file_stat->st_nlink, symb_stat->st_nlink);
> + TST_EXP_EQ_LI(file_stat->st_uid, symb_stat->st_uid);
> + TST_EXP_EQ_LI(file_stat->st_gid, symb_stat->st_gid);
> + TST_EXP_EQ_LI(file_stat->st_size, symb_stat->st_size);
> + TST_EXP_EQ_LI(file_stat->st_atime, symb_stat->st_atime);
> + TST_EXP_EQ_LI(file_stat->st_mtime, symb_stat->st_mtime);
> + TST_EXP_EQ_LI(file_stat->st_ctime, symb_stat->st_ctime);
> +}
> +
> +static void setup(void)
> +{
> + char opt_bsize[32];
> + char symb_path[PATH_MAX];
> + char file_path[PATH_MAX];
> + const char *const fs_opts[] = {opt_bsize, NULL};
> + struct stat sb;
> + int pagesize;
> + int fd;
> +
> + tmpdir = tst_get_tmpdir();
> +
> + if (strlen(tmpdir) >= (PATH_MAX - strlen(FILENAME))) {
> + tst_brk(TCONF, "Temporary folder name is too long. "
> + "Can't create file");
> + }
> +
> + if (strlen(tmpdir) >= (PATH_MAX - strlen(SYMBNAME))) {
> + tst_brk(TCONF, "Temporary folder name is too long. "
> + "Can't create symbolic link");
> + }
> +
> + /* change st_blksize / st_dev */
> + SAFE_STAT(".", &sb);
> + pagesize = sb.st_blksize == 4096 ? 1024 : 4096;
> +
> + snprintf(opt_bsize, sizeof(opt_bsize), "-b %i", pagesize);
> + SAFE_MKFS(tst_device->dev, tst_device->fs_type, fs_opts, NULL);
> + SAFE_MOUNT(tst_device->dev, MNTPOINT, tst_device->fs_type, 0, 0);
> +
> + SAFE_TOUCH(FILENAME, 0777, NULL);
> +
> + /* change st_nlink */
> + SAFE_LINK(FILENAME, "linked_file");
> +
> + /* change st_uid and st_gid */
> + SAFE_CHOWN(FILENAME, 1000, 1000);
> +
> + /* change st_size */
> + fd = SAFE_OPEN(FILENAME, O_WRONLY, 0777);
> + tst_fill_fd(fd, 'a', TST_KB, 500);
> + SAFE_CLOSE(fd);
> +
> + /* change st_atime / st_mtime / st_ctime */
> + sleep(1);
>
Does this 1sec sleep make real sense to the test? Can we remove it?
> +
> + memset(file_path, 0, PATH_MAX);
> + snprintf(file_path, PATH_MAX, "%s/%s", tmpdir, FILENAME);
> +
> + memset(symb_path, 0, PATH_MAX);
> + snprintf(symb_path, PATH_MAX, "%s/%s", tmpdir, SYMBNAME);
> +
> + SAFE_SYMLINK(file_path, symb_path);
> +
> + SAFE_STAT(file_path, file_stat);
> + SAFE_STAT(symb_path, symb_stat);
> +}
> +
> +static void cleanup(void)
> +{
> + free(tmpdir);
> +
> + SAFE_UNLINK(SYMBNAME);
> +
> + if (tst_is_mounted(MNTPOINT))
> + SAFE_UMOUNT(MNTPOINT);
> +}
> +
> +static struct tst_test test = {
> + .setup = setup,
> + .cleanup = cleanup,
> + .test_all = run,
> + .needs_root = 1,
> + .needs_tmpdir = 1,
> + .needs_device = 1,
> + .mntpoint = MNTPOINT,
> + .dev_fs_type = "ext2",
> + .bufs = (struct tst_buffers []) {
> + {&file_stat, .size = sizeof(struct stat)},
> + {&symb_stat, .size = sizeof(struct stat)},
> + {}
> + }
> +};
>
> --
> 2.43.0
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
>
>
--
Regards,
Li Wang
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [LTP] [PATCH 2/5] Fix TST_EXP_EXTR() stringification
2024-07-02 14:12 ` [LTP] [PATCH 2/5] Fix TST_EXP_EXTR() stringification Andrea Cervesato
@ 2024-07-04 7:11 ` Li Wang
2024-07-04 9:19 ` Cyril Hrubis
1 sibling, 0 replies; 20+ messages in thread
From: Li Wang @ 2024-07-04 7:11 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
On Tue, Jul 2, 2024 at 10:15 PM Andrea Cervesato <andrea.cervesato@suse.de>
wrote:
> From: Andrea Cervesato <andrea.cervesato@suse.com>
>
> Follow the TST_* macros standards when it comes to stringification of
> the expressions.
>
> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
>
Reviewed-by: Li Wang <liwang@redhat.com>
---
> include/tst_test_macros.h | 5 +++--
> testcases/kernel/syscalls/fork/fork04.c | 6 +++---
> 2 files changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/include/tst_test_macros.h b/include/tst_test_macros.h
> index 22b39fb14..7a443c803 100644
> --- a/include/tst_test_macros.h
> +++ b/include/tst_test_macros.h
> @@ -340,8 +340,9 @@ const char *tst_errno_names(char *buf, const int
> *exp_errs, int exp_errs_cnt);
> &tst_exp_err__, 1, ##__VA_ARGS__);
> \
> } while (0)
>
> -#define TST_EXP_EXPR(EXPR, FMT, ...)
> \
> - tst_res_(__FILE__, __LINE__, (EXPR) ? TPASS : TFAIL, "Expect: "
> FMT, ##__VA_ARGS__);
> +#define TST_EXP_EXPR(EXPR, ...)
> \
> + tst_res_(__FILE__, __LINE__, (EXPR) ? TPASS : TFAIL, "Expect: "
> \
> + TST_FMT_(TST_2_(dummy, ##__VA_ARGS__, #EXPR),
> __VA_ARGS__));
>
> #define TST_EXP_EQ_(VAL_A, SVAL_A, VAL_B, SVAL_B, TYPE, PFS) do {\
> TYPE tst_tmp_a__ = VAL_A; \
> diff --git a/testcases/kernel/syscalls/fork/fork04.c
> b/testcases/kernel/syscalls/fork/fork04.c
> index b0c6bebe0..413cd5eb4 100644
> --- a/testcases/kernel/syscalls/fork/fork04.c
> +++ b/testcases/kernel/syscalls/fork/fork04.c
> @@ -29,7 +29,7 @@ static void run_child(void)
>
> TST_EXP_EXPR(strcmp(ENV_VAL0, val) == 0,
> "%s environ variable has been inherited by the child",
> - ENV_KEY)
> + ENV_KEY);
>
> tst_res(TINFO, "Unset %s environ variable inside child", ENV_KEY);
>
> @@ -72,7 +72,7 @@ static void run(void)
> } else {
> TST_EXP_EXPR(strcmp(ENV_VAL0, val) == 0,
> "%s environ variable is still present inside
> parent",
> - ENV_KEY)
> + ENV_KEY);
> }
>
> TST_CHECKPOINT_WAKE_AND_WAIT(0);
> @@ -85,7 +85,7 @@ static void run(void)
> else {
> TST_EXP_EXPR(strcmp(ENV_VAL0, val) == 0,
> "%s environ variable didn't change inside parent",
> - ENV_KEY)
> + ENV_KEY);
> }
> }
>
>
> --
> 2.43.0
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
>
>
--
Regards,
Li Wang
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [LTP] [PATCH 4/5] Add chmod08 test
2024-07-02 14:12 ` [LTP] [PATCH 4/5] Add chmod08 test Andrea Cervesato
@ 2024-07-04 7:12 ` Li Wang
0 siblings, 0 replies; 20+ messages in thread
From: Li Wang @ 2024-07-04 7:12 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
On Tue, Jul 2, 2024 at 10:15 PM Andrea Cervesato <andrea.cervesato@suse.de>
wrote:
> From: Andrea Cervesato <andrea.cervesato@suse.com>
>
> This test has been extracted from symlink01 and it verifies that
> chmod() is working correctly on symlink() generated files.
>
> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
>
Reviewed-by: Li Wang <liwang@redhat.com>
---
> runtest/syscalls | 1 +
> testcases/kernel/syscalls/chmod/.gitignore | 1 +
> testcases/kernel/syscalls/chmod/chmod08.c | 45
> ++++++++++++++++++++++++++++++
> 3 files changed, 47 insertions(+)
>
> diff --git a/runtest/syscalls b/runtest/syscalls
> index d78b6822b..928e75f9b 100644
> --- a/runtest/syscalls
> +++ b/runtest/syscalls
> @@ -72,6 +72,7 @@ chmod03 chmod03
> chmod05 chmod05
> chmod06 chmod06
> chmod07 chmod07
> +chmod08 chmod08
>
> chown01 chown01
> chown01_16 chown01_16
> diff --git a/testcases/kernel/syscalls/chmod/.gitignore
> b/testcases/kernel/syscalls/chmod/.gitignore
> index 27ddfce16..f295f4dcb 100644
> --- a/testcases/kernel/syscalls/chmod/.gitignore
> +++ b/testcases/kernel/syscalls/chmod/.gitignore
> @@ -3,3 +3,4 @@
> /chmod05
> /chmod06
> /chmod07
> +/chmod08
> diff --git a/testcases/kernel/syscalls/chmod/chmod08.c
> b/testcases/kernel/syscalls/chmod/chmod08.c
> new file mode 100644
> index 000000000..7ef396348
> --- /dev/null
> +++ b/testcases/kernel/syscalls/chmod/chmod08.c
> @@ -0,0 +1,45 @@
> +// 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
> + */
> +
> +/*\
> + * [Description]
> + *
> + * This test verifies that chmod() is working correctly on symlink()
> + * generated files.
> + */
> +
> +#include "tst_test.h"
> +
> +#define PERMS 01777
> +#define TESTFILE "myobject"
> +
> +static void run(void)
> +{
> + char *symname = "my_symlink0";
> + struct stat oldsym_stat;
> + struct stat newsym_stat;
> +
> + SAFE_TOUCH(TESTFILE, 0644, NULL);
> + SAFE_SYMLINK(TESTFILE, symname);
> + SAFE_STAT(symname, &oldsym_stat);
> +
> + TST_EXP_PASS(chmod(symname, PERMS));
> + SAFE_STAT(symname, &newsym_stat);
> +
> + TST_EXP_EQ_LI(newsym_stat.st_mode & PERMS, PERMS);
> + TST_EXP_EXPR(oldsym_stat.st_mode != newsym_stat.st_mode,
> + "file mode has changed");
> +
> + SAFE_UNLINK(symname);
> + SAFE_UNLINK(TESTFILE);
> +}
> +
> +static struct tst_test test = {
> + .test_all = run,
> + .needs_tmpdir = 1,
> +};
>
> --
> 2.43.0
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
>
>
--
Regards,
Li Wang
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [LTP] [PATCH 5/5] Add open15 test
2024-07-02 14:12 ` [LTP] [PATCH 5/5] Add open15 test Andrea Cervesato
@ 2024-07-04 7:18 ` Li Wang
2024-07-04 7:32 ` Li Wang
0 siblings, 1 reply; 20+ messages in thread
From: Li Wang @ 2024-07-04 7:18 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
On Tue, Jul 2, 2024 at 10:15 PM Andrea Cervesato <andrea.cervesato@suse.de>
wrote:
> From: Andrea Cervesato <andrea.cervesato@suse.com>
>
> This test has been extracted from symlink01 and it verifies that
> open() is working correctly on symlink() generated files.
>
> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
> ---
> runtest/syscalls | 2 +-
> testcases/kernel/syscalls/open/.gitignore | 1 +
> testcases/kernel/syscalls/open/open15.c | 86
> +++++++++++++++++++++++++++++++
> 3 files changed, 88 insertions(+), 1 deletion(-)
>
> diff --git a/runtest/syscalls b/runtest/syscalls
> index 928e75f9b..47efac158 100644
> --- a/runtest/syscalls
> +++ b/runtest/syscalls
> @@ -923,7 +923,6 @@ nice04 nice04
> nice05 nice05
>
> open01 open01
> -open01A symlink01 -T open01
> open02 open02
> open03 open03
> open04 open04
> @@ -936,6 +935,7 @@ open11 open11
> open12 open12
> open13 open13
> open14 open14
> +open15 open15
>
> openat01 openat01
> openat02 openat02
> diff --git a/testcases/kernel/syscalls/open/.gitignore
> b/testcases/kernel/syscalls/open/.gitignore
> index 001d874d6..af5997572 100644
> --- a/testcases/kernel/syscalls/open/.gitignore
> +++ b/testcases/kernel/syscalls/open/.gitignore
> @@ -12,3 +12,4 @@
> /open12_child
> /open13
> /open14
> +/open15
> diff --git a/testcases/kernel/syscalls/open/open15.c
> b/testcases/kernel/syscalls/open/open15.c
> new file mode 100644
> index 000000000..cbe2d62a4
> --- /dev/null
> +++ b/testcases/kernel/syscalls/open/open15.c
> @@ -0,0 +1,86 @@
> +// 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
> + */
> +
> +/*\
> + * [Description]
> + *
> + * This test verifies that open() is working correctly on symlink()
> + * generated files.
> + */
> +
> +#include "tst_test.h"
> +
> +#define FILENAME "myfile.txt"
> +#define BIG_STRING "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
> +
> +static void test_open_symlink(void)
> +{
> + int fd;
> + int str_size;
> + char buff[128];
> + char *symname = "my_symlink0";
> +
> + str_size = strlen(BIG_STRING);
> +
> + SAFE_SYMLINK(FILENAME, symname);
> +
> + fd = SAFE_OPEN(symname, O_CREAT | O_RDWR, 0777);
> + SAFE_WRITE(SAFE_WRITE_ALL, fd, BIG_STRING, str_size);
> + SAFE_LSEEK(fd, 0, 0);
> + SAFE_READ(1, fd, buff, str_size);
> + SAFE_CLOSE(fd);
> +
> + TST_EXP_EXPR(!strncmp(buff, BIG_STRING, str_size),
> + "symlink generated file can be opened to write data");
> +
> + SAFE_UNLINK(symname);
> + SAFE_UNLINK(FILENAME);
> +}
> +
> +static void test_open_compare(void)
+{
> + int fd_file, fd_symlink;
> + int str_size;
> + char buff_file[128];
> + char buff_symlink[128];
> + char *symname = "my_symlink1";
> +
> + str_size = strlen(BIG_STRING);
> +
> + fd_file = SAFE_OPEN(FILENAME, O_CREAT | O_RDWR, 0777);
> + SAFE_WRITE(SAFE_WRITE_ALL, fd_file, BIG_STRING, str_size);
> +
> + SAFE_SYMLINK(FILENAME, symname);
> +
> + SAFE_LSEEK(fd_file, 0, 0);
> + SAFE_READ(1, fd_file, buff_file, str_size);
> +
> + fd_symlink = SAFE_OPEN(symname, O_RDWR, 0777);
> + SAFE_LSEEK(fd_symlink, 0, 0);
> + SAFE_READ(1, fd_symlink, buff_symlink, str_size);
>
Isn't this tst_open_compare already cover the open symlink test?
Maybe we could remove the test_open_symlink?
> +
> + TST_EXP_EXPR(!strncmp(buff_file, buff_symlink, str_size),
> + "file data is the equivalent to symlink generated file
> data");
> +
> + SAFE_CLOSE(fd_file);
> + SAFE_CLOSE(fd_symlink);
> +
> + SAFE_UNLINK(symname);
> + SAFE_UNLINK(FILENAME);
> +}
> +
> +static void run(void)
> +{
> + test_open_symlink();
> + test_open_compare();
> +}
> +
> +static struct tst_test test = {
> + .test_all = run,
> + .needs_tmpdir = 1,
> +};
>
> --
> 2.43.0
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
>
>
--
Regards,
Li Wang
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [LTP] [PATCH 5/5] Add open15 test
2024-07-04 7:18 ` Li Wang
@ 2024-07-04 7:32 ` Li Wang
2024-07-09 10:31 ` Andrea Cervesato via ltp
0 siblings, 1 reply; 20+ messages in thread
From: Li Wang @ 2024-07-04 7:32 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
On Thu, Jul 4, 2024 at 3:18 PM Li Wang <liwang@redhat.com> wrote:
>
>
> On Tue, Jul 2, 2024 at 10:15 PM Andrea Cervesato <andrea.cervesato@suse.de>
> wrote:
>
>> From: Andrea Cervesato <andrea.cervesato@suse.com>
>>
>> This test has been extracted from symlink01 and it verifies that
>> open() is working correctly on symlink() generated files.
>>
>> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
>> ---
>> runtest/syscalls | 2 +-
>> testcases/kernel/syscalls/open/.gitignore | 1 +
>> testcases/kernel/syscalls/open/open15.c | 86
>> +++++++++++++++++++++++++++++++
>> 3 files changed, 88 insertions(+), 1 deletion(-)
>>
>> diff --git a/runtest/syscalls b/runtest/syscalls
>> index 928e75f9b..47efac158 100644
>> --- a/runtest/syscalls
>> +++ b/runtest/syscalls
>> @@ -923,7 +923,6 @@ nice04 nice04
>> nice05 nice05
>>
>> open01 open01
>> -open01A symlink01 -T open01
>> open02 open02
>> open03 open03
>> open04 open04
>> @@ -936,6 +935,7 @@ open11 open11
>> open12 open12
>> open13 open13
>> open14 open14
>> +open15 open15
>>
>> openat01 openat01
>> openat02 openat02
>> diff --git a/testcases/kernel/syscalls/open/.gitignore
>> b/testcases/kernel/syscalls/open/.gitignore
>> index 001d874d6..af5997572 100644
>> --- a/testcases/kernel/syscalls/open/.gitignore
>> +++ b/testcases/kernel/syscalls/open/.gitignore
>> @@ -12,3 +12,4 @@
>> /open12_child
>> /open13
>> /open14
>> +/open15
>> diff --git a/testcases/kernel/syscalls/open/open15.c
>> b/testcases/kernel/syscalls/open/open15.c
>> new file mode 100644
>> index 000000000..cbe2d62a4
>> --- /dev/null
>> +++ b/testcases/kernel/syscalls/open/open15.c
>> @@ -0,0 +1,86 @@
>> +// 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
>> + */
>> +
>> +/*\
>> + * [Description]
>> + *
>> + * This test verifies that open() is working correctly on symlink()
>> + * generated files.
>> + */
>> +
>> +#include "tst_test.h"
>> +
>> +#define FILENAME "myfile.txt"
>> +#define BIG_STRING "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
>> +
>> +static void test_open_symlink(void)
>> +{
>> + int fd;
>> + int str_size;
>> + char buff[128];
>> + char *symname = "my_symlink0";
>> +
>> + str_size = strlen(BIG_STRING);
>> +
>> + SAFE_SYMLINK(FILENAME, symname);
>> +
>> + fd = SAFE_OPEN(symname, O_CREAT | O_RDWR, 0777);
>> + SAFE_WRITE(SAFE_WRITE_ALL, fd, BIG_STRING, str_size);
>> + SAFE_LSEEK(fd, 0, 0);
>> + SAFE_READ(1, fd, buff, str_size);
>> + SAFE_CLOSE(fd);
>> +
>> + TST_EXP_EXPR(!strncmp(buff, BIG_STRING, str_size),
>> + "symlink generated file can be opened to write data");
>> +
>> + SAFE_UNLINK(symname);
>> + SAFE_UNLINK(FILENAME);
>> +}
>> +
>> +static void test_open_compare(void)
>
> +{
>> + int fd_file, fd_symlink;
>> + int str_size;
>> + char buff_file[128];
>> + char buff_symlink[128];
>> + char *symname = "my_symlink1";
>> +
>> + str_size = strlen(BIG_STRING);
>> +
>> + fd_file = SAFE_OPEN(FILENAME, O_CREAT | O_RDWR, 0777);
>> + SAFE_WRITE(SAFE_WRITE_ALL, fd_file, BIG_STRING, str_size);
>> +
>> + SAFE_SYMLINK(FILENAME, symname);
>> +
>> + SAFE_LSEEK(fd_file, 0, 0);
>> + SAFE_READ(1, fd_file, buff_file, str_size);
>> +
>> + fd_symlink = SAFE_OPEN(symname, O_RDWR, 0777);
>> + SAFE_LSEEK(fd_symlink, 0, 0);
>> + SAFE_READ(1, fd_symlink, buff_symlink, str_size);
>>
>
> Isn't this tst_open_compare already cover the open symlink test?
> Maybe we could remove the test_open_symlink?
>
But if we want to check that open() working correctly on symlink() create
file,
so just reversing the order of some code inside tst_open_compare should be
fine?
static void test_open_compare(void)
{
...
str_size = strlen(BIG_STRING);
SAFE_SYMLINK(FILENAME, symname);
fd_symlink = SAFE_OPEN(symname, O_CREAT | O_RDWR, 0777);
SAFE_WRITE(SAFE_WRITE_ALL, fd_symlink, BIG_STRING, str_size);
SAFE_LSEEK(fd_symlink, 0, 0);
SAFE_READ(1, fd_symlink, buff_symlink, str_size);
fd_file = SAFE_OPEN(FILENAME, O_RDWR, 0777);
SAFE_LSEEK(fd_file, 0, 0);
SAFE_READ(1, fd_file, buff_file, str_size);
TST_EXP_EXPR(!strncmp(buff_file, buff_symlink, str_size),
"file data is the equivalent to symlink generated file data");
...
}
>
>
>> +
>> + TST_EXP_EXPR(!strncmp(buff_file, buff_symlink, str_size),
>> + "file data is the equivalent to symlink generated file
>> data");
>> +
>> + SAFE_CLOSE(fd_file);
>> + SAFE_CLOSE(fd_symlink);
>> +
>> + SAFE_UNLINK(symname);
>> + SAFE_UNLINK(FILENAME);
>> +}
>> +
>> +static void run(void)
>> +{
>> + test_open_symlink();
>> + test_open_compare();
>> +}
>> +
>> +static struct tst_test test = {
>> + .test_all = run,
>> + .needs_tmpdir = 1,
>> +};
>>
>> --
>> 2.43.0
>>
>>
>> --
>> Mailing list info: https://lists.linux.it/listinfo/ltp
>>
>>
>
> --
> Regards,
> Li Wang
>
--
Regards,
Li Wang
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [LTP] [PATCH 1/5] Add stat04 test
2024-07-04 7:06 ` Li Wang
@ 2024-07-04 9:17 ` Cyril Hrubis
2024-07-04 9:23 ` Cyril Hrubis
0 siblings, 1 reply; 20+ messages in thread
From: Cyril Hrubis @ 2024-07-04 9:17 UTC (permalink / raw)
To: Li Wang; +Cc: ltp
Hi!
> > + /* change st_atime / st_mtime / st_ctime */
> > + sleep(1);
> >
>
> Does this 1sec sleep make real sense to the test? Can we remove it?
With utimensat we can easily change access time and modification time
but you can't change status change time. So we either sleep here or set
the system clock back, change the file and then reset the system clock
back.
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [LTP] [PATCH 2/5] Fix TST_EXP_EXTR() stringification
2024-07-02 14:12 ` [LTP] [PATCH 2/5] Fix TST_EXP_EXTR() stringification Andrea Cervesato
2024-07-04 7:11 ` Li Wang
@ 2024-07-04 9:19 ` Cyril Hrubis
1 sibling, 0 replies; 20+ messages in thread
From: Cyril Hrubis @ 2024-07-04 9:19 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
Hi!
> Follow the TST_* macros standards when it comes to stringification of
> the expressions.
You should probably add either of:
Suggested-by: Cyril Hrubis <chrubis@suse.cz>
or
Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
Here as well.
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [LTP] [PATCH 1/5] Add stat04 test
2024-07-04 9:17 ` Cyril Hrubis
@ 2024-07-04 9:23 ` Cyril Hrubis
2024-07-04 11:27 ` Li Wang
0 siblings, 1 reply; 20+ messages in thread
From: Cyril Hrubis @ 2024-07-04 9:23 UTC (permalink / raw)
To: Li Wang; +Cc: ltp
Hi!
> > > + /* change st_atime / st_mtime / st_ctime */
> > > + sleep(1);
> > >
> >
> > Does this 1sec sleep make real sense to the test? Can we remove it?
>
> With utimensat we can easily change access time and modification time
> but you can't change status change time. So we either sleep here or set
> the system clock back, change the file and then reset the system clock
> back.
And if you are asking if the test will run fine without the sleep, it
will run and it will pass, but the timestamps will be same for the link
and the file, so if kernel picks up wrong timestamp we will not find
out.
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [LTP] [PATCH 1/5] Add stat04 test
2024-07-04 9:23 ` Cyril Hrubis
@ 2024-07-04 11:27 ` Li Wang
2024-07-04 11:55 ` Cyril Hrubis
0 siblings, 1 reply; 20+ messages in thread
From: Li Wang @ 2024-07-04 11:27 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp
On Thu, Jul 4, 2024 at 5:23 PM Cyril Hrubis <chrubis@suse.cz> wrote:
> Hi!
> > > > + /* change st_atime / st_mtime / st_ctime */
> > > > + sleep(1);
> > > >
> > >
> > > Does this 1sec sleep make real sense to the test? Can we remove it?
> >
> > With utimensat we can easily change access time and modification time
> > but you can't change status change time. So we either sleep here or set
> > the system clock back, change the file and then reset the system clock
> > back.
>
> And if you are asking if the test will run fine without the sleep, it
> will run and it will pass, but the timestamps will be same for the link
> and the file, so if kernel picks up wrong timestamp we will not find
> out.
>
I'm confused, do you mean if the kernel sets a wrong timestamp it could
report TFAIL?
From what I can tell, the stat(sym_path,) also retrieves information of
the target file,
shouldn't that always equal the stat(file_path,) timestamp? As long as the
stat()
works correctly, with sleep(1) or not won't impact anything.
--
Regards,
Li Wang
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [LTP] [PATCH 1/5] Add stat04 test
2024-07-04 11:27 ` Li Wang
@ 2024-07-04 11:55 ` Cyril Hrubis
2024-07-04 12:02 ` Li Wang
0 siblings, 1 reply; 20+ messages in thread
From: Cyril Hrubis @ 2024-07-04 11:55 UTC (permalink / raw)
To: Li Wang; +Cc: ltp
Hi!
> > And if you are asking if the test will run fine without the sleep, it
> > will run and it will pass, but the timestamps will be same for the link
> > and the file, so if kernel picks up wrong timestamp we will not find
> > out.
> >
>
> I'm confused, do you mean if the kernel sets a wrong timestamp it could
> report TFAIL?
>
> From what I can tell, the stat(sym_path,) also retrieves information of
> the target file,
> shouldn't that always equal the stat(file_path,) timestamp? As long as the
> stat()
> works correctly, with sleep(1) or not won't impact anything.
The test tries to assert that stat() follows the symlink and this test
is a unit test for this assertion. However if we do not spend some
effort on making the link and target attributes actually diffferent the
test would pass even if kernel returned the attributes for the symlink
instead.
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [LTP] [PATCH 1/5] Add stat04 test
2024-07-04 11:55 ` Cyril Hrubis
@ 2024-07-04 12:02 ` Li Wang
0 siblings, 0 replies; 20+ messages in thread
From: Li Wang @ 2024-07-04 12:02 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp
On Thu, Jul 4, 2024 at 7:56 PM Cyril Hrubis <chrubis@suse.cz> wrote:
> Hi!
> > > And if you are asking if the test will run fine without the sleep, it
> > > will run and it will pass, but the timestamps will be same for the link
> > > and the file, so if kernel picks up wrong timestamp we will not find
> > > out.
> > >
> >
> > I'm confused, do you mean if the kernel sets a wrong timestamp it could
> > report TFAIL?
> >
> > From what I can tell, the stat(sym_path,) also retrieves information of
> > the target file,
> > shouldn't that always equal the stat(file_path,) timestamp? As long as
> the
> > stat()
> > works correctly, with sleep(1) or not won't impact anything.
>
> The test tries to assert that stat() follows the symlink and this test
> is a unit test for this assertion. However if we do not spend some
> effort on making the link and target attributes actually diffferent the
> test would pass even if kernel returned the attributes for the symlink
> instead.
>
Oh yes, I see. That wait a moment is quite necessary, thanks!
Reviewed-by: Li Wang <liwang@redhat.com>
--
Regards,
Li Wang
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [LTP] [PATCH 5/5] Add open15 test
2024-07-04 7:32 ` Li Wang
@ 2024-07-09 10:31 ` Andrea Cervesato via ltp
0 siblings, 0 replies; 20+ messages in thread
From: Andrea Cervesato via ltp @ 2024-07-09 10:31 UTC (permalink / raw)
To: Li Wang, Andrea Cervesato; +Cc: ltp
Hi!
On 7/4/24 09:32, Li Wang wrote:
>
>
> On Thu, Jul 4, 2024 at 3:18 PM Li Wang <liwang@redhat.com> wrote:
>
>
>
> On Tue, Jul 2, 2024 at 10:15 PM Andrea Cervesato
> <andrea.cervesato@suse.de> wrote:
>
> From: Andrea Cervesato <andrea.cervesato@suse.com>
>
> This test has been extracted from symlink01 and it verifies that
> open() is working correctly on symlink() generated files.
>
> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
> ---
> runtest/syscalls | 2 +-
> testcases/kernel/syscalls/open/.gitignore | 1 +
> testcases/kernel/syscalls/open/open15.c | 86
> +++++++++++++++++++++++++++++++
> 3 files changed, 88 insertions(+), 1 deletion(-)
>
> diff --git a/runtest/syscalls b/runtest/syscalls
> index 928e75f9b..47efac158 100644
> --- a/runtest/syscalls
> +++ b/runtest/syscalls
> @@ -923,7 +923,6 @@ nice04 nice04
> nice05 nice05
>
> open01 open01
> -open01A symlink01 -T open01
> open02 open02
> open03 open03
> open04 open04
> @@ -936,6 +935,7 @@ open11 open11
> open12 open12
> open13 open13
> open14 open14
> +open15 open15
>
> openat01 openat01
> openat02 openat02
> diff --git a/testcases/kernel/syscalls/open/.gitignore
> b/testcases/kernel/syscalls/open/.gitignore
> index 001d874d6..af5997572 100644
> --- a/testcases/kernel/syscalls/open/.gitignore
> +++ b/testcases/kernel/syscalls/open/.gitignore
> @@ -12,3 +12,4 @@
> /open12_child
> /open13
> /open14
> +/open15
> diff --git a/testcases/kernel/syscalls/open/open15.c
> b/testcases/kernel/syscalls/open/open15.c
> new file mode 100644
> index 000000000..cbe2d62a4
> --- /dev/null
> +++ b/testcases/kernel/syscalls/open/open15.c
> @@ -0,0 +1,86 @@
> +// 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
> + */
> +
> +/*\
> + * [Description]
> + *
> + * This test verifies that open() is working correctly on
> symlink()
> + * generated files.
> + */
> +
> +#include "tst_test.h"
> +
> +#define FILENAME "myfile.txt"
> +#define BIG_STRING
> "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
> +
> +static void test_open_symlink(void)
> +{
> + int fd;
> + int str_size;
> + char buff[128];
> + char *symname = "my_symlink0";
> +
> + str_size = strlen(BIG_STRING);
> +
> + SAFE_SYMLINK(FILENAME, symname);
> +
> + fd = SAFE_OPEN(symname, O_CREAT | O_RDWR, 0777);
> + SAFE_WRITE(SAFE_WRITE_ALL, fd, BIG_STRING, str_size);
> + SAFE_LSEEK(fd, 0, 0);
> + SAFE_READ(1, fd, buff, str_size);
> + SAFE_CLOSE(fd);
> +
> + TST_EXP_EXPR(!strncmp(buff, BIG_STRING, str_size),
> + "symlink generated file can be opened to write
> data");
> +
> + SAFE_UNLINK(symname);
> + SAFE_UNLINK(FILENAME);
> +}
> +
> +static void test_open_compare(void)
>
> +{
> + int fd_file, fd_symlink;
> + int str_size;
> + char buff_file[128];
> + char buff_symlink[128];
> + char *symname = "my_symlink1";
> +
> + str_size = strlen(BIG_STRING);
> +
> + fd_file = SAFE_OPEN(FILENAME, O_CREAT | O_RDWR, 0777);
> + SAFE_WRITE(SAFE_WRITE_ALL, fd_file, BIG_STRING, str_size);
> +
> + SAFE_SYMLINK(FILENAME, symname);
> +
> + SAFE_LSEEK(fd_file, 0, 0);
> + SAFE_READ(1, fd_file, buff_file, str_size);
> +
> + fd_symlink = SAFE_OPEN(symname, O_RDWR, 0777);
> + SAFE_LSEEK(fd_symlink, 0, 0);
> + SAFE_READ(1, fd_symlink, buff_symlink, str_size);
>
>
> Isn't this tst_open_compare already cover the open symlink test?
> Maybe we could remove the test_open_symlink?
>
>
> But if we want to check that open() working correctly on symlink()
> create file,
> so just reversing the order of some code inside tst_open_compare
> should be fine?
>
> static void test_open_compare(void)
> {
> ...
>
> str_size = strlen(BIG_STRING);
>
> SAFE_SYMLINK(FILENAME, symname);
>
> fd_symlink = SAFE_OPEN(symname, O_CREAT | O_RDWR, 0777);
> SAFE_WRITE(SAFE_WRITE_ALL, fd_symlink, BIG_STRING, str_size);
> SAFE_LSEEK(fd_symlink, 0, 0);
> SAFE_READ(1, fd_symlink, buff_symlink, str_size);
>
> fd_file = SAFE_OPEN(FILENAME, O_RDWR, 0777);
> SAFE_LSEEK(fd_file, 0, 0);
> SAFE_READ(1, fd_file, buff_file, str_size);
>
> TST_EXP_EXPR(!strncmp(buff_file, buff_symlink, str_size),
> "file data is the equivalent to symlink generated file data");
>
> ...
> }
>
>
That's a good idea, i will apply it. Thanks
>
> +
> + TST_EXP_EXPR(!strncmp(buff_file, buff_symlink, str_size),
> + "file data is the equivalent to symlink
> generated file data");
> +
> + SAFE_CLOSE(fd_file);
> + SAFE_CLOSE(fd_symlink);
> +
> + SAFE_UNLINK(symname);
> + SAFE_UNLINK(FILENAME);
> +}
> +
> +static void run(void)
> +{
> + test_open_symlink();
> + test_open_compare();
> +}
> +
> +static struct tst_test test = {
> + .test_all = run,
> + .needs_tmpdir = 1,
> +};
>
> --
> 2.43.0
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
>
>
>
> --
> Regards,
> Li Wang
>
>
>
> --
> Regards,
> Li Wang
Andrea
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2024-07-09 10:31 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-02 14:12 [LTP] [PATCH 0/5] symlink01 split Andrea Cervesato
2024-07-02 14:12 ` [LTP] [PATCH 1/5] Add stat04 test Andrea Cervesato
2024-07-04 7:06 ` Li Wang
2024-07-04 9:17 ` Cyril Hrubis
2024-07-04 9:23 ` Cyril Hrubis
2024-07-04 11:27 ` Li Wang
2024-07-04 11:55 ` Cyril Hrubis
2024-07-04 12:02 ` Li Wang
2024-07-02 14:12 ` [LTP] [PATCH 2/5] Fix TST_EXP_EXTR() stringification Andrea Cervesato
2024-07-04 7:11 ` Li Wang
2024-07-04 9:19 ` Cyril Hrubis
2024-07-02 14:12 ` [LTP] [PATCH 3/5] Add lstat03 test Andrea Cervesato
2024-07-04 6:36 ` Li Wang
2024-07-04 6:56 ` Li Wang
2024-07-02 14:12 ` [LTP] [PATCH 4/5] Add chmod08 test Andrea Cervesato
2024-07-04 7:12 ` Li Wang
2024-07-02 14:12 ` [LTP] [PATCH 5/5] Add open15 test Andrea Cervesato
2024-07-04 7:18 ` Li Wang
2024-07-04 7:32 ` Li Wang
2024-07-09 10:31 ` Andrea Cervesato via ltp
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox