From: Avinesh Kumar <akumar@suse.de>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH v2 6/6] Rewrite utime06.c using new LTP API
Date: Thu, 23 Jun 2022 13:32:15 +0530 [thread overview]
Message-ID: <20220623080215.24186-7-akumar@suse.de> (raw)
In-Reply-To: <20220623080215.24186-1-akumar@suse.de>
Signed-off-by: Avinesh Kumar <akumar@suse.de>
---
testcases/kernel/syscalls/utime/utime06.c | 188 +++++-----------------
1 file changed, 43 insertions(+), 145 deletions(-)
diff --git a/testcases/kernel/syscalls/utime/utime06.c b/testcases/kernel/syscalls/utime/utime06.c
index 6d80677e4..9057c29da 100644
--- a/testcases/kernel/syscalls/utime/utime06.c
+++ b/testcases/kernel/syscalls/utime/utime06.c
@@ -1,174 +1,72 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
- * Copyright (c) International Business Machines Corp., 2001
- * 07/2001 John George
- *
- * 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) International Business Machines Corp., 2001
+ * 07/2001 John George
+ * Copyright (c) 2022 SUSE LLC Avinesh Kumar <avinesh.kumar@suse.com>
*/
-/*
- * Test Description:
- * 1. Verify that the system call utime() fails to set the modification
- * and access times of a file to the current time, under the following
- * constraints,
- * - The times argument is null.
- * - The user ID of the process is not "root".
- * 2. Verify that the system call utime() fails to set the modification
- * and access times of a file if the specified file doesn't exist.
- * 3. Verify that the system call utime() fails to set the modification
- * and access times of a file to the current time, under the following
- * constraints,
- * - The times argument is not null.
- * - The user ID of the process is not "root".
- * 4. Verify that the system call utime() fails to set the modification
- * and access times of a file that resides on a read-only file system.
+/*\
+ * [Description]
+ *
+ * Verify that system call utime() fails with
+ * - EACCES when times argument is NULL and user does not have rights
+ * to modify the file.
+ * - ENOENT when specified file does not exist.
+ * - EPERM when times argument is not NULL and user does not have rights
+ * to modify the file.
+ * - EROFS when the path resides on a read-only filesystem.
*/
-#include <errno.h>
-#include <fcntl.h>
#include <pwd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <string.h>
-#include <unistd.h>
#include <utime.h>
-#include <sys/wait.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/mount.h>
-#include "test.h"
-#include "safe_macros.h"
+#include "tst_test.h"
#define TEMP_FILE "tmp_file"
#define MNT_POINT "mntpoint"
+#define FILE_MODE 0644
+#define TEST_USERNAME "nobody"
-char *TCID = "utime06";
-static struct passwd *ltpuser;
static const struct utimbuf times;
-static const char *dev;
-static int mount_flag;
-static void setup_nobody(void);
-static void cleanup_nobody(void);
-struct test_case_t {
+static struct tcase {
char *pathname;
int exp_errno;
- const struct utimbuf *times;
- void (*setup_func)(void);
- void (*cleanup_func)(void);
-} Test_cases[] = {
- {TEMP_FILE, EACCES, NULL, setup_nobody, cleanup_nobody},
- {"", ENOENT, NULL, NULL, NULL},
- {TEMP_FILE, EPERM, ×, setup_nobody, cleanup_nobody},
- {MNT_POINT, EROFS, NULL, NULL, NULL},
+ const struct utimbuf *utimbuf;
+ char *err_desc;
+} tcases[] = {
+ {TEMP_FILE, EACCES, NULL, "No write access"},
+ {"", ENOENT, NULL, "File not exist"},
+ {TEMP_FILE, EPERM, ×, "Not file owner"},
+ {MNT_POINT, EROFS, NULL, "Read-only filesystem"}
};
-int TST_TOTAL = ARRAY_SIZE(Test_cases);
-static void setup(void);
-static void utime_verify(const struct test_case_t *);
-static void cleanup(void);
-
-int main(int ac, char **av)
-{
- int lc;
- int i;
-
- tst_parse_opts(ac, av, NULL, NULL);
-
- setup();
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- tst_count = 0;
- for (i = 0; i < TST_TOTAL; i++)
- utime_verify(&Test_cases[i]);
- }
-
- cleanup();
- tst_exit();
-}
static void setup(void)
{
- const char *fs_type;
-
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
- tst_require_root();
-
- TEST_PAUSE;
-
- tst_tmpdir();
-
- SAFE_TOUCH(cleanup, TEMP_FILE, 0644, NULL);
+ struct passwd *pw;
- fs_type = tst_dev_fs_type();
- dev = tst_acquire_device(cleanup);
- if (!dev)
- tst_brkm(TCONF, cleanup, "Failed to acquire test device");
+ SAFE_TOUCH(TEMP_FILE, FILE_MODE, NULL);
- tst_mkfs(cleanup, dev, fs_type, NULL, NULL);
-
- SAFE_MKDIR(cleanup, MNT_POINT, 0644);
- SAFE_MOUNT(cleanup, dev, MNT_POINT, fs_type, MS_RDONLY, NULL);
- mount_flag = 1;
-
- ltpuser = SAFE_GETPWNAM(cleanup, "nobody");
-}
-
-static void utime_verify(const struct test_case_t *test)
-{
- if (test->setup_func != NULL)
- test->setup_func();
-
- TEST(utime(test->pathname, test->times));
-
- if (test->cleanup_func != NULL)
- test->cleanup_func();
-
- if (TEST_RETURN != -1) {
- tst_resm(TFAIL, "utime succeeded unexpectedly");
- return;
- }
-
- if (TEST_ERRNO == test->exp_errno) {
- tst_resm(TPASS | TTERRNO, "utime failed as expected");
- } else {
- tst_resm(TFAIL | TTERRNO,
- "utime failed unexpectedly; expected: %d - %s",
- test->exp_errno, strerror(test->exp_errno));
- }
+ pw = SAFE_GETPWNAM(TEST_USERNAME);
+ tst_res(TINFO, "Switching effective user ID to user: %s", pw->pw_name);
+ SAFE_SETEUID(pw->pw_uid);
}
-static void setup_nobody(void)
+static void run(unsigned int i)
{
- SAFE_SETEUID(cleanup, ltpuser->pw_uid);
-}
+ struct tcase *tc = &tcases[i];
-static void cleanup_nobody(void)
-{
- SAFE_SETEUID(cleanup, 0);
+ TST_EXP_FAIL(utime(tc->pathname, tc->utimbuf),
+ tc->exp_errno, "%s", tc->err_desc);
}
-static void cleanup(void)
-{
- if (mount_flag && tst_umount(MNT_POINT) < 0)
- tst_resm(TWARN | TERRNO, "umount device:%s failed", dev);
-
- if (dev)
- tst_release_device(dev);
-
- tst_rmdir();
-}
+static struct tst_test test = {
+ .setup = setup,
+ .test = run,
+ .tcnt = ARRAY_SIZE(tcases),
+ .needs_root = 1,
+ .needs_tmpdir = 1,
+ .mntpoint = MNT_POINT,
+ .needs_rofs = 1
+};
--
2.36.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
next prev parent reply other threads:[~2022-06-23 8:03 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-23 8:02 [LTP] [PATCH v2 0/6] Convert utime tests to new LTP API Avinesh Kumar
2022-06-23 8:02 ` [LTP] [PATCH v2 1/6] Rewrite utime01.c using " Avinesh Kumar
2022-07-04 13:13 ` Richard Palethorpe
2022-06-23 8:02 ` [LTP] [PATCH v2 2/6] Rewrite utime02.c " Avinesh Kumar
2022-07-04 13:22 ` Richard Palethorpe
2022-06-23 8:02 ` [LTP] [PATCH v2 3/6] utime03.c: Remove unnecessary header includes Avinesh Kumar
2022-07-04 13:25 ` Richard Palethorpe
2022-06-23 8:02 ` [LTP] [PATCH v2 4/6] Rewrite utime04.c using new LTP API Avinesh Kumar
2022-07-04 13:31 ` Richard Palethorpe
2022-06-23 8:02 ` [LTP] [PATCH v2 5/6] Rewrite utime05.c " Avinesh Kumar
2022-07-04 13:35 ` Richard Palethorpe
2022-06-23 8:02 ` Avinesh Kumar [this message]
2022-07-04 13:47 ` [LTP] [PATCH v2 6/6] Rewrite utime06.c " Richard Palethorpe
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=20220623080215.24186-7-akumar@suse.de \
--to=akumar@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.