From: Avinesh Kumar <akumar@suse.de>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH 5/6] Rewrite utime05.c using new LTP API
Date: Fri, 17 Jun 2022 22:50:24 +0530 [thread overview]
Message-ID: <20220617172025.23975-6-akumar@suse.de> (raw)
In-Reply-To: <20220617172025.23975-1-akumar@suse.de>
Signed-off-by: Avinesh Kumar <akumar@suse.de>
---
testcases/kernel/syscalls/utime/utime05.c | 218 +++++-----------------
1 file changed, 45 insertions(+), 173 deletions(-)
diff --git a/testcases/kernel/syscalls/utime/utime05.c b/testcases/kernel/syscalls/utime/utime05.c
index b2d2450bf..c289fcd2f 100644
--- a/testcases/kernel/syscalls/utime/utime05.c
+++ b/testcases/kernel/syscalls/utime/utime05.c
@@ -1,200 +1,72 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
- *
* Copyright (c) International Business Machines Corp., 2001
- *
- * 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
+ * 07/2001 ported by John George
+ * Copyright (c) 2022 SUSE LLC Avinesh Kumar <avinesh.kumar@suse.com>
*/
-/*
- * Test Name: utime05
- *
- * Test Description:
- * Verify that the system call utime() successfully sets the modification
- * and access times of a file to the value specified by the times argument
- * under the following constraints,
- * - The times argument is not null,
- * - The user ID of the process is not "root".
- * - The file is owned by the user ID of the process.
- *
- * Expected Result:
- * utime succeeds returning zero and sets the access and modification
- * times of the file to that specified by the times argument.
- *
- * Algorithm:
- * Setup:
- * Setup signal handling.
- * Create temporary directory.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * Execute system call
- * Check return code, if system call failed (return=-1)
- * Log the errno and Issue a FAIL message.
- * Otherwise,
- * Verify the Functionality of system call
- * if successful,
- * Issue Functionality-Pass message.
- * Otherwise,
- * Issue Functionality-Fail message.
- * Cleanup:
- * Print errno log and/or timing stats if options given
- * Delete the temporary directory created.
- *
- * Usage: <for command-line>
- * utime05 [-c n] [-e] [-f] [-i n] [-I x] [-p x] [-t]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -f : Turn off functionality Testing.
- * -i n : Execute test n times.
- * -I x : Execute test for x seconds.
- * -P x : Pause for x seconds between iterations.
- * -t : Turn on syscall timing.
- *
- * History
- * 07/2001 John George
- * -Ported
- *
- * Restrictions:
- *
+/*\
+ * [Description]
+ * Verify that the system call utime() successfully changes the last
+ * access and modification times of a file to the values specified by
+ * times argument, under the following constraints:
+ * - The times argument is not NULL.
+ * - The user ID of the process is not "root".
+ * - The file is owned by the user ID of the process.
*/
-#include <stdio.h>
-#include <sys/types.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
#include <utime.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <signal.h>
#include <pwd.h>
-#include "test.h"
-#include "safe_macros.h"
+#include "tst_test.h"
#define TEMP_FILE "tmp_file"
-#define FILE_MODE S_IRUSR | S_IRGRP | S_IROTH
-#define NEW_TIME 10000
-
-char *TCID = "utime05";
-int TST_TOTAL = 1;
-
-char nobody_uid[] = "nobody";
-struct passwd *ltpuser;
+#define FILE_MODE 0444
+#define NEW_MODF_TIME 10000
+#define NEW_ACCESS_TIME 20000
-struct utimbuf times; /* struct. buffer for utime() */
+#define TEST_USERNAME "nobody"
-void setup(); /* Main setup function of test */
-void cleanup(); /* cleanup function for the test */
+static struct utimbuf times;
-int main(int ac, char **av)
+static void setup(void)
{
- struct stat stat_buf; /* struct buffer to hold file info. */
- int lc;
- time_t modf_time, access_time;
- /* file modification/access time */
-
- tst_parse_opts(ac, av, NULL, NULL);
-
- setup();
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- tst_count = 0;
-
- /*
- * Invoke utime(2) to set TEMP_FILE access and
- * modification times to that specified by
- * times argument.
- */
- TEST(utime(TEMP_FILE, ×));
-
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL|TTERRNO, "utime(%s) failed", TEMP_FILE);
- } else {
- /*
- * Get the modification and access times of
- * temporary file using stat(2).
- */
- SAFE_STAT(cleanup, TEMP_FILE, &stat_buf);
- modf_time = stat_buf.st_mtime;
- access_time = stat_buf.st_atime;
-
- /* Now do the actual verification */
- if ((modf_time != NEW_TIME) ||
- (access_time != NEW_TIME)) {
- tst_resm(TFAIL, "%s access and "
- "modification times not set",
- TEMP_FILE);
- } else {
- tst_resm(TPASS, "Functionality of "
- "utime(%s, ×) successful",
- TEMP_FILE);
- }
- }
- tst_count++; /* incr TEST_LOOP counter */
- }
+ struct passwd *pw;
- cleanup();
- tst_exit();
-}
-
-/*
- * void
- * setup() - performs all ONE TIME setup for this test.
- * Create a temporary directory and change directory to it.
- * Create a test file under temporary directory and close it
- */
-void setup(void)
-{
- int fildes; /* file handle for temp file */
+ pw = SAFE_GETPWNAM(TEST_USERNAME);
- tst_require_root();
+ tst_res(TINFO, "Switching effective user ID to user: %s", pw->pw_name);
+ SAFE_SETEUID(pw->pw_uid);
- tst_sig(FORK, DEF_HANDLER, cleanup);
+ SAFE_TOUCH(TEMP_FILE, FILE_MODE, NULL);
- /* Switch to nobody user for correct error code collection */
- ltpuser = SAFE_GETPWNAM(NULL, nobody_uid);
- SAFE_SETUID(NULL, ltpuser->pw_uid);
+ times.actime = NEW_ACCESS_TIME;
+ times.modtime = NEW_MODF_TIME;
+}
- TEST_PAUSE;
+static void run(void)
+{
+ struct stat stat_buf;
- tst_tmpdir();
+ TST_EXP_PASS(utime(TEMP_FILE, ×), "utime(%s, ×)", TEMP_FILE);
- /* Creat a temporary file under above directory */
- fildes = SAFE_CREAT(cleanup, TEMP_FILE, FILE_MODE);
+ if (!TST_PASS) {
+ tst_res(TFAIL | TTERRNO, "utime(%s, ×) failed", TEMP_FILE);
+ return;
+ }
- /* Close the temporary file created */
- SAFE_CLOSE(cleanup, fildes);
+ SAFE_STAT(TEMP_FILE, &stat_buf);
- /* Initialize the modification and access time in the times arg */
- times.actime = NEW_TIME;
- times.modtime = NEW_TIME;
+ if (stat_buf.st_mtime != NEW_MODF_TIME)
+ tst_res(TFAIL, "utime() did not set expected mtime");
+ if (stat_buf.st_atime != NEW_ACCESS_TIME)
+ tst_res(TFAIL, "utime() did not set expected atime");
}
-/*
- * void
- * cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- * Remove the test directory and testfile created in the setup.
- */
-void cleanup(void)
-{
-
- tst_rmdir();
-
-}
+static struct tst_test test = {
+ .test_all = run,
+ .setup = setup,
+ .needs_root = 1,
+ .needs_tmpdir = 1
+};
--
2.36.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
next prev parent reply other threads:[~2022-06-17 17:21 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-17 17:20 [LTP] [PATCH 0/6] Convert utime tests to new LTP API Avinesh Kumar
2022-06-17 17:20 ` [LTP] [PATCH 1/6] Rewrite utime01.c using " Avinesh Kumar
2022-06-21 10:17 ` Cyril Hrubis
2022-06-17 17:20 ` [LTP] [PATCH 2/6] Rewrite utime02.c " Avinesh Kumar
2022-06-21 10:19 ` Cyril Hrubis
2022-06-17 17:20 ` [LTP] [PATCH 3/6] Remove unnecessary header includes Avinesh Kumar
2022-06-21 10:24 ` Cyril Hrubis
2022-06-17 17:20 ` [LTP] [PATCH 4/6] Rewrite utime04.c using new LTP API Avinesh Kumar
2022-06-21 12:38 ` Cyril Hrubis
2022-06-17 17:20 ` Avinesh Kumar [this message]
2022-06-21 12:40 ` [LTP] [PATCH 5/6] Rewrite utime05.c " Cyril Hrubis
2022-06-17 17:20 ` [LTP] [PATCH 6/6] Rewrite utime06.c " Avinesh Kumar
2022-06-21 12:59 ` Cyril Hrubis
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=20220617172025.23975-6-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.