public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
* [LTP]  [PATCH 1/2 v2] mount/mount03.c: clean up
@ 2013-07-08  5:17 DAN LI
  2013-07-08  5:18 ` [LTP] [PATCH 2/2 v2] mount/mount03.c: Test feature MS_NOATIME of mount(2) DAN LI
  2013-07-10  2:10 ` [LTP] [PATCH 1/2 v2] mount/mount03.c: clean up Wanlong Gao
  0 siblings, 2 replies; 3+ messages in thread
From: DAN LI @ 2013-07-08  5:17 UTC (permalink / raw)
  To: LTP list


Clean up mount03.c:
    xxx func() -> xxx func(void)

    clean up setup()


Signed-off-by: DAN LI <li.dan@cn.fujitsu.com>
---
 testcases/kernel/syscalls/mount/mount03.c | 179 +++++-------------------------
 1 file changed, 27 insertions(+), 152 deletions(-)

diff --git a/testcases/kernel/syscalls/mount/mount03.c b/testcases/kernel/syscalls/mount/mount03.c
index b1aa71f..a4c065a 100644
--- a/testcases/kernel/syscalls/mount/mount03.c
+++ b/testcases/kernel/syscalls/mount/mount03.c
@@ -16,15 +16,7 @@
  */

 /*
- *    EXECUTED BY	: root / superuser
- *
- *    TEST TITLE	: Test for checking mount(2) flags
- *
- *    TEST CASE TOTAL	: 6
- *
- *    AUTHOR		: Nirmala Devi Dhanasekar <nirmala.devi@wipro.com>
- *
- *    DESCRIPTION
+ * DESCRIPTION
  *	Check for basic mount(2) system call flags.
  *
  *	Verify that mount(2) syscall passes for each flag setting and validate
@@ -35,30 +27,7 @@
  *	4) MS_SYNCHRONOUS - writes are synced at once.
  *	5) MS_REMOUNT - alter flags of a mounted FS.
  *	6) MS_NOSUID - ignore suid and sgid bits.
- *
- *	Setup:
- *	  Setup signal handling.
- *	  Create a mount point.
- *	  Pause for SIGUSR1 if option specified.
- *
- *	Test:
- *	  Loop if the proper options are given.
- *	  Execute mount system call for each flag
- *	  Validate each flag setting. if validation fails
- *		Delete the mount point.
- *		Log the errno and Issue a FAIL message.
- *	  Delete the mount point.
- *	  Otherwise, Issue a PASS message.
- *
- *	Cleanup:
- *	  Print errno log and/or timing stats if options given
- *	  Delete the temporary directory(s)/file(s) created.
- *
- * RESTRICTIONS
- *	test must run with the -D option
- *	test doesn't support -c option to run it in parallel, as mount
- *	syscall is not supposed to run in parallel.
- *****************************************************************************/
+ */

 #ifndef _GNU_SOURCE
 #define _GNU_SOURCE
@@ -73,14 +42,15 @@
 #include <fcntl.h>
 #include <pwd.h>
 #include <unistd.h>
+
 #include "test.h"
 #include "usctest.h"
+#include "safe_macros.h"

 static void help(void);
 static void setup(void);
 static void cleanup(void);
 static int test_rwflag(int, int);
-static int setup_uid(void);

 char *TCID = "mount03";
 int TST_TOTAL = 6;
@@ -92,9 +62,9 @@ int TST_TOTAL = 6;
 			 S_IXGRP|S_IROTH|S_IXOTH)
 #define SUID_MODE	(S_ISUID|S_IRUSR|S_IXUSR|S_IXGRP|S_IXOTH)

-static char *fs_type;
+static const char *fs_type = "ext2";

-static char mntpoint[20];
+static const char mntpoint[] = "mntpoint";
 static char *fstype;
 static char *device;
 static int tflag;
@@ -104,9 +74,7 @@ static int fildes;
 static char write_buffer[BUFSIZ];
 static char read_buffer[BUFSIZ];
 static char path_name[PATH_MAX];
-static char testhome_path[PATH_MAX];
 static char file[PATH_MAX];
-static char *cmd = "cp";

 long rwflags[] = {
 	MS_RDONLY,
@@ -138,21 +106,9 @@ int main(int argc, char *argv[])
 			 "you must specify the device used for mounting with -D "
 			 "option");

-	if (tflag) {
-		fs_type = malloc(strlen(fstype) + 1);
-		if (fs_type == NULL)
-			tst_brkm(TBROK | TERRNO, NULL, "malloc failed");
+	if (tflag)
+		fs_type = fstype;

-		fs_type[strlen(fstype)] = '\0';
-		strncpy(fs_type, fstype, strlen(fstype));
-	} else {
-		fs_type = malloc(strlen(DEFAULT_FSTYPE) + 1);
-		if (fs_type == NULL)
-			tst_brkm(TBROK | TERRNO, NULL, "malloc failed");
-
-		strncpy(fs_type, DEFAULT_FSTYPE, strlen(DEFAULT_FSTYPE));
-		fs_type[strlen(DEFAULT_FSTYPE)] = '\0';
-	}

 	if (STD_COPIES != 1) {
 		tst_resm(TINFO, "-c option has no effect for this testcase - "
@@ -169,11 +125,9 @@ int main(int argc, char *argv[])

 		for (i = 0; i < TST_TOTAL; ++i) {

-			/* Call mount(2) */
 			TEST(mount(device, mntpoint, fs_type, rwflags[i],
 				   NULL));

-			/* check return code */
 			if (TEST_RETURN != 0) {
 				tst_resm(TFAIL | TTERRNO, "mount(2) failed");
 				continue;
@@ -203,12 +157,12 @@ int main(int argc, char *argv[])
  * test_rwflag(int i, int cnt)
  * Validate the mount system call for rwflags.
  */
-
 int test_rwflag(int i, int cnt)
 {
 	int ret, fd, pid, status;
 	char nobody_uid[] = "nobody";
 	struct passwd *ltpuser;
+	struct stat setuid_test_stat;

 	switch (i) {
 	case 0:
@@ -337,21 +291,23 @@ int test_rwflag(int i, int cnt)
 	case 5:
 		/* Validate MS_NOSUID flag of mount call */

-		if (setup_uid() != 0) {
-			tst_resm(TBROK | TERRNO, "setup_uid failed");
-			return 1;
-		}
+		snprintf(file, PATH_MAX, "%ssetuid_test", path_name);
+		SAFE_FILE_PRINTF(cleanup, file, "TEST FILE");
+
+		if (stat(file, &setuid_test_stat) < 0)
+			tst_brkm(TBROK, cleanup, "stat for setuid_test failed");
+
+		if (setuid_test_stat.st_mode != SUID_MODE &&
+		    chmod(file, SUID_MODE) < 0)
+			tst_brkm(TBROK, cleanup,
+				 "setuid for setuid_test failed");
+
 		pid = fork();
 		switch (pid) {
 		case -1:
 			tst_resm(TBROK | TERRNO, "fork failed");
 			return 1;
 		case 0:
-			snprintf(file, PATH_MAX, "%ssetuid_test", path_name);
-			if (chmod(file, SUID_MODE) != 0)
-				tst_resm(TWARN, "chmod(%s, %#o) failed",
-					 file, SUID_MODE);
-
 			ltpuser = getpwnam(nobody_uid);
 			if (setreuid(ltpuser->pw_uid, ltpuser->pw_uid) == -1)
 				tst_resm(TWARN | TERRNO,
@@ -374,68 +330,18 @@ int test_rwflag(int i, int cnt)
 	return 0;
 }

-/* setup_uid() - performs setup for NOUID test */
-int setup_uid()
+void setup(void)
 {
-	int pid, status;
-	char command[PATH_MAX];
-
-	pid = fork();
-	switch (pid) {
-	case -1:
-		tst_resm(TWARN | TERRNO, "fork failed");
-		return 1;
-	case 0:
-		/* Put command into string */
-		sprintf(command, "%s %s %s", cmd, testhome_path, path_name);
-
-		/* Run command to cp file to right spot */
-		if (system(command) == 0)
-			execlp(file, basename(file), NULL);
-		else
-			printf("call to %s failed\n", command);
-
-		exit(1);
-	default:
-		waitpid(pid, &status, 0);
-		if (WIFEXITED(status)) {
-			return WEXITSTATUS(status);
-		} else if (WIFSIGNALED(status)) {
-			return WTERMSIG(status);
-		} else {
-			/* Should be 0. */
-			assert(status == 0);
-			return 0;
-		}
-	}
-}
-
-void setup()
-{
-	int fd;
 	char path[PATH_MAX];
-	char *test_home;
-	struct stat setuid_test_stat;

 	tst_sig(FORK, DEF_HANDLER, cleanup);

-	/* Check whether we are root */
-	if (geteuid() != 0) {
-		free(fs_type);
-		tst_brkm(TBROK, NULL, "Test must be run as root");
-	}
+	tst_require_root(NULL);

 	tst_tmpdir();

-	test_home = get_current_dir_name();
-
-	sprintf(mntpoint, "mnt_%d", getpid());
-
-	if (mkdir(mntpoint, DIR_MODE))
-		tst_brkm(TBROK | TERRNO, cleanup, "mkdir(%s, %#o) failed",
-			 mntpoint, DIR_MODE);
+	SAFE_MKDIR(cleanup, mntpoint, DIR_MODE);

-	/* Get the current working directory of the process */
 	if (getcwd(path_name, sizeof(path_name)) == NULL)
 		tst_brkm(TBROK, cleanup, "getcwd failed");

@@ -443,53 +349,22 @@ void setup()
 		tst_brkm(TBROK, cleanup, "chmod(%s, %#o) failed",
 			 path_name, DIR_MODE);

-	snprintf(file, PATH_MAX, "%s/setuid_test", path_name);
-	fd = open(file, O_CREAT | O_TRUNC, S_IRWXU);
-	if (fd == -1)
-		tst_brkm(TBROK, cleanup, "open file failed");
-	close(fd);
-
-	if (stat(file, &setuid_test_stat) < 0) {
-		tst_brkm(TBROK, cleanup, "stat for setuid_test failed");
-	} else {
-		if ((setuid_test_stat.st_uid || setuid_test_stat.st_gid) &&
-		    chown(file, 0, 0) < 0)
-			tst_brkm(TBROK, cleanup,
-				 "chown for setuid_test failed");
-
-		if (setuid_test_stat.st_mode != SUID_MODE &&
-		    chmod(file, SUID_MODE) < 0)
-			tst_brkm(TBROK, cleanup,
-				 "setuid for setuid_test failed");
-	}
-
-	/*
-	 * under temporary directory
-	 */
 	strncpy(path, path_name, PATH_MAX);
 	snprintf(path_name, PATH_MAX, "%s/%s/", path, mntpoint);
-	strcpy(testhome_path, test_home);
-	strcat(testhome_path, "/setuid_test");

 	TEST_PAUSE;
-
 }

-void cleanup()
+void cleanup(void)
 {
-	free(fs_type);
-
 	TEST_CLEANUP;

 	tst_rmdir();
 }

-/*
- * issue a help message
- */
-void help()
+void help(void)
 {
-	printf("-T type	  : specifies the type of filesystem to be mounted."
-	       " Default ext2.\n");
+	printf("-T type	  : specifies the type of filesystem to be mounted. "
+	       "Default ext2.\n");
 	printf("-D device : device used for mounting.\n");
 }
-- 
1.8.1

------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [LTP] [PATCH 2/2 v2] mount/mount03.c: Test feature MS_NOATIME of mount(2)
  2013-07-08  5:17 [LTP] [PATCH 1/2 v2] mount/mount03.c: clean up DAN LI
@ 2013-07-08  5:18 ` DAN LI
  2013-07-10  2:10 ` [LTP] [PATCH 1/2 v2] mount/mount03.c: clean up Wanlong Gao
  1 sibling, 0 replies; 3+ messages in thread
From: DAN LI @ 2013-07-08  5:18 UTC (permalink / raw)
  To: LTP list


Additional test for feature MS_NOATIME.

---
 testcases/kernel/syscalls/mount/mount03.c | 51 ++++++++++++++++++++++++++++---
 1 file changed, 47 insertions(+), 4 deletions(-)

diff --git a/testcases/kernel/syscalls/mount/mount03.c b/testcases/kernel/syscalls/mount/mount03.c
index a4c065a..d3f0733 100644
--- a/testcases/kernel/syscalls/mount/mount03.c
+++ b/testcases/kernel/syscalls/mount/mount03.c
@@ -27,6 +27,7 @@
  *	4) MS_SYNCHRONOUS - writes are synced at once.
  *	5) MS_REMOUNT - alter flags of a mounted FS.
  *	6) MS_NOSUID - ignore suid and sgid bits.
+ *	7) MS_NOATIME - do not update access times.
  */

 #ifndef _GNU_SOURCE
@@ -53,7 +54,7 @@ static void cleanup(void);
 static int test_rwflag(int, int);

 char *TCID = "mount03";
-int TST_TOTAL = 6;
+int TST_TOTAL = 7;

 #define DEFAULT_FSTYPE	"ext2"
 #define TEMP_FILE	"temp_file"
@@ -83,6 +84,7 @@ long rwflags[] = {
 	MS_SYNCHRONOUS,
 	MS_RDONLY,
 	MS_NOSUID,
+	MS_NOATIME,
 };

 static option_t options[] = {
@@ -161,8 +163,9 @@ int test_rwflag(int i, int cnt)
 {
 	int ret, fd, pid, status;
 	char nobody_uid[] = "nobody";
+	time_t atime;
 	struct passwd *ltpuser;
-	struct stat setuid_test_stat;
+	struct stat file_stat;

 	switch (i) {
 	case 0:
@@ -294,10 +297,10 @@ int test_rwflag(int i, int cnt)
 		snprintf(file, PATH_MAX, "%ssetuid_test", path_name);
 		SAFE_FILE_PRINTF(cleanup, file, "TEST FILE");

-		if (stat(file, &setuid_test_stat) < 0)
+		if (stat(file, &file_stat) < 0)
 			tst_brkm(TBROK, cleanup, "stat for setuid_test failed");

-		if (setuid_test_stat.st_mode != SUID_MODE &&
+		if (file_stat.st_mode != SUID_MODE &&
 		    chmod(file, SUID_MODE) < 0)
 			tst_brkm(TBROK, cleanup,
 				 "setuid for setuid_test failed");
@@ -326,6 +329,46 @@ int test_rwflag(int i, int cnt)
 					return 1;
 			}
 		}
+	case 6:
+		/* Validate MS_NOATIME flag of mount call */
+
+		snprintf(file, PATH_MAX, "%satime", path_name);
+		fd = open(file, O_CREAT | O_RDWR, S_IRWXU);
+		if (fd == -1) {
+			tst_resm(TWARN | TERRNO, "opening %s failed", file);
+			return 1;
+		}
+
+		if (write(fd, "TEST_MS_NOATIME", 15) != 15) {
+			tst_resm(TWARN | TERRNO, "write %s failed", file);
+			return 1;
+		}
+
+		if (fstat(fd, &file_stat) == -1) {
+			tst_resm(TWARN | TERRNO, "stat %s failed #1", file);
+			return 1;
+		}
+
+		atime = file_stat.st_atime;
+
+		sleep(1);
+
+		if (read(fd, NULL, 20) == -1) {
+			tst_resm(TWARN | TERRNO, "read %s failed", file);
+			return 1;
+		}
+
+		if (fstat(fd, &file_stat) == -1) {
+			tst_resm(TWARN | TERRNO, "stat %s failed #2", file);
+			return 1;
+		}
+		close(fd);
+
+		if (file_stat.st_atime != atime) {
+			tst_resm(TWARN, "access time is updated");
+			return 1;
+		}
+		return 0;
 	}
 	return 0;
 }
-- 
1.8.1



------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [LTP] [PATCH 1/2 v2] mount/mount03.c: clean up
  2013-07-08  5:17 [LTP] [PATCH 1/2 v2] mount/mount03.c: clean up DAN LI
  2013-07-08  5:18 ` [LTP] [PATCH 2/2 v2] mount/mount03.c: Test feature MS_NOATIME of mount(2) DAN LI
@ 2013-07-10  2:10 ` Wanlong Gao
  1 sibling, 0 replies; 3+ messages in thread
From: Wanlong Gao @ 2013-07-10  2:10 UTC (permalink / raw)
  To: DAN LI; +Cc: LTP list

On 07/08/2013 01:17 PM, DAN LI wrote:
> Clean up mount03.c:
>     xxx func() -> xxx func(void)
> 
>     clean up setup()
> 
> 
> Signed-off-by: DAN LI <li.dan@cn.fujitsu.com>

Applied V2 series, thank you.

Wanlong Gao


------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-07-10  2:10 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-08  5:17 [LTP] [PATCH 1/2 v2] mount/mount03.c: clean up DAN LI
2013-07-08  5:18 ` [LTP] [PATCH 2/2 v2] mount/mount03.c: Test feature MS_NOATIME of mount(2) DAN LI
2013-07-10  2:10 ` [LTP] [PATCH 1/2 v2] mount/mount03.c: clean up Wanlong Gao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox