public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
* [LTP] [PATCH 1/2] semop/semop02.c: cleanup
@ 2013-12-26  6:22 Xiaoguang Wang
  2014-01-21  2:09 ` Wanlong Gao
  0 siblings, 1 reply; 2+ messages in thread
From: Xiaoguang Wang @ 2013-12-26  6:22 UTC (permalink / raw)
  To: ltp-list


* Delete some useless commtents.
* Move the test body form main to a new
  semop_verify function.
* Use some SAFE_* macros.
* Some cleanup.

Signed-off-by: Xiaoguang Wang <wangxg.fnst@cn.fujitsu.com>
---
 testcases/kernel/syscalls/ipc/semop/semop02.c | 175 +++++++++-----------------
 1 file changed, 58 insertions(+), 117 deletions(-)

diff --git a/testcases/kernel/syscalls/ipc/semop/semop02.c b/testcases/kernel/syscalls/ipc/semop/semop02.c
index b97cc3f..08fc43c 100644
--- a/testcases/kernel/syscalls/ipc/semop/semop02.c
+++ b/testcases/kernel/syscalls/ipc/semop/semop02.c
@@ -18,56 +18,30 @@
  */
 
 /*
- * NAME
- *	semop02.c
- *
  * DESCRIPTION
  *	semop02 - test for E2BIG, EACCES, EFAULT and EINVAL errors
  *
- * ALGORITHM
- *	create a semaphore set with read and alter permissions
- *	create a semaphore set without read and alter permissions
- *	loop if that option was specified
- *	call semop with five different invalid cases
- *	check the errno value
- *	  issue a PASS message if we get E2BIG, EACCES, EFAULT or EINVAL
- *	otherwise, the tests fails
- *	  issue a FAIL message
- *	call cleanup
- *
- * USAGE:  <for command-line>
- *  semop02 [-c n] [-e] [-i n] [-I x] [-P x] [-t]
- *     where,  -c n : Run n copies concurrently.
- *             -e   : Turn on errno logging.
- *	       -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
  *	03/2001 - Written by Wayne Boyer
  *
  *      10/03/2008 Renaud Lottiaux (Renaud.Lottiaux@kerlabs.com)
  *      - Fix concurrency issue. The second key used for this test could
  *        conflict with the key from another task.
- *
- * RESTRICTIONS
- *	none
  */
-#include <pwd.h>
 
+#include <pwd.h>
+#include "test.h"
+#include "safe_macros.h"
 #include "ipcsem.h"
 
 char *TCID = "semop02";
-int TST_TOTAL = 5;
 
-int exp_enos[] = { E2BIG, EACCES, EFAULT, EINVAL, 0 };
+static void semop_verify(int i);
 
-int sem_id_1 = -1;		/* a semaphore set with read & alter permissions */
-int sem_id_2 = -1;		/* a semaphore set without read & alter permissions */
+static int exp_enos[] = { E2BIG, EACCES, EFAULT, EINVAL, 0 };
+int sem_id_1 = -1;	/* a semaphore set with read & alter permissions */
+int sem_id_2 = -1;	/* a semaphore set without read & alter permissions */
 int bad_id = -1;
-char nobody_uid[] = "nobody";
-struct passwd *ltpuser;
 
 struct sembuf s_buf[PSEMS];
 
@@ -78,143 +52,110 @@ int badbuf = -1;
 				/* of semop operations that are permitted   */
 
 struct test_case_t {
-	int *semid;		/* the semaphore id */
-	struct sembuf *t_sbuf;	/* the first in an array of sembuf structures */
-	unsigned t_ops;		/* the number of elements in the above array */
-	int error;		/* the expected error number */
+	int *semid;
+	struct sembuf *t_sbuf;
+	unsigned t_ops;
+	int error;
 } TC[] = {
-	/* E2BIG - the number of operations is too big */
-	{
-	&sem_id_1, (struct sembuf *)&s_buf, BIGOPS, E2BIG},
-	    /* EACCES - the semaphore set has no access permission */
-	{
-	&sem_id_2, (struct sembuf *)&s_buf, NSOPS, EACCES},
-	    /* EFAULT - the address for the s_buf value is not accessible */
-	{
-	&sem_id_1, (struct sembuf *)-1, NSOPS, EFAULT},
-	    /* EINVAL - the number of elments (t_ops) is 0 */
-	{
-	&sem_id_1, (struct sembuf *)&s_buf, 0, EINVAL},
-	    /* EINVAL - the semaphore set doesn't exist */
-	{
-	&bad_id, (struct sembuf *)&s_buf, NSOPS, EINVAL}
+	{&sem_id_1, (struct sembuf *)&s_buf, BIGOPS, E2BIG},
+	{&sem_id_2, (struct sembuf *)&s_buf, NSOPS, EACCES},
+	{&sem_id_1, (struct sembuf *)-1, NSOPS, EFAULT},
+	{&sem_id_1, (struct sembuf *)&s_buf, 0, EINVAL},
+	{&bad_id, (struct sembuf *)&s_buf, NSOPS, EINVAL}
 };
 
+int TST_TOTAL = ARRAY_SIZE(TC);
+
 int main(int ac, char **av)
 {
 	int lc;
 	char *msg;
 	int i;
 
-	if ((msg = parse_opts(ac, av, NULL, NULL)) != NULL) {
+	msg = parse_opts(ac, av, NULL, NULL);
+	if (msg != NULL)
 		tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
-	}
-
-	setup();		/* global setup */
 
-	/* The following loop checks looping state if -i option given */
+	setup();
 
 	for (lc = 0; TEST_LOOPING(lc); lc++) {
-		/* reset tst_count in case we are looping */
 		tst_count = 0;
 
-		for (i = 0; i < TST_TOTAL; i++) {
-			/*
-			 * use the TEST macro to make the call
-			 */
-
-			TEST(semop(*(TC[i].semid), TC[i].t_sbuf, TC[i].t_ops));
-
-			if (TEST_RETURN != -1) {
-				tst_resm(TFAIL, "call succeeded unexpectedly");
-				continue;
-			}
-
-			TEST_ERROR_LOG(TEST_ERRNO);
-
-			if (TEST_ERRNO == TC[i].error) {
-				tst_resm(TPASS, "expected failure - errno = "
-					 "%d : %s", TEST_ERRNO,
-					 strerror(TEST_ERRNO));
-			} else {
-				tst_resm(TFAIL, "unexpected error - "
-					 "%d : %s", TEST_ERRNO,
-					 strerror(TEST_ERRNO));
-			}
-		}
+		for (i = 0; i < TST_TOTAL; i++)
+			semop_verify(i);
 	}
 
 	cleanup();
-
 	tst_exit();
 }
 
-/*
- * setup() - performs all the ONE TIME setup for this test.
- */
 void setup(void)
 {
+	char nobody_uid[] = "nobody";
+	struct passwd *ltpuser;
 	key_t semkey2;
 
-	/* Switch to nobody user for correct error code collection */
-	if (geteuid() != 0) {
-		tst_brkm(TBROK, NULL, "Test must be run as root");
-	}
-	ltpuser = getpwnam(nobody_uid);
-	if (seteuid(ltpuser->pw_uid) == -1) {
-		tst_resm(TINFO, "setreuid failed to "
-			 "to set the effective uid to %d", ltpuser->pw_uid);
-		perror("setreuid");
-	}
+	tst_require_root(NULL);
+
+	ltpuser = SAFE_GETPWNAM(NULL, nobody_uid);
+	SAFE_SETUID(NULL, ltpuser->pw_uid);
 
 	tst_sig(NOFORK, DEF_HANDLER, cleanup);
 
-	/* Set up the expected error numbers for -e option */
 	TEST_EXP_ENOS(exp_enos);
 
 	TEST_PAUSE;
 
-	/*
-	 * Create a temporary directory and cd into it.
-	 * This helps to ensure that a unique msgkey is created.
-	 * See ../lib/libipc.c for more information.
-	 */
 	tst_tmpdir();
 
 	/* get an IPC resource key */
 	semkey = getipckey();
 
 	/* create a semaphore set with read and alter permissions */
-	if ((sem_id_1 =
-	     semget(semkey, PSEMS, IPC_CREAT | IPC_EXCL | SEM_RA)) == -1) {
-		tst_brkm(TBROK, cleanup, "couldn't create semaphore in setup");
+	sem_id_1 = semget(semkey, PSEMS, IPC_CREAT | IPC_EXCL | SEM_RA);
+	if (sem_id_1 == -1) {
+		tst_brkm(TBROK | TERRNO, cleanup,
+			 "couldn't create semaphore in setup");
 	}
 
 	/* Get an new IPC resource key. */
 	semkey2 = getipckey();
 
 	/* create a semaphore set without read and alter permissions */
-	if ((sem_id_2 = semget(semkey2, PSEMS, IPC_CREAT | IPC_EXCL)) == -1) {
-		tst_brkm(TBROK, cleanup, "couldn't create semaphore in setup");
+	sem_id_2 = semget(semkey2, PSEMS, IPC_CREAT | IPC_EXCL);
+	if (sem_id_2 == -1) {
+		tst_brkm(TBROK | TERRNO, cleanup,
+			 "couldn't create semaphore in setup");
+	}
+}
+
+static void semop_verify(int i)
+{
+	TEST(semop(*(TC[i].semid), TC[i].t_sbuf, TC[i].t_ops));
+
+	if (TEST_RETURN != -1) {
+		tst_resm(TFAIL, "call succeeded unexpectedly");
+		return;
+	}
+
+	TEST_ERROR_LOG(TEST_ERRNO);
+
+	if (TEST_ERRNO == TC[i].error) {
+		tst_resm(TPASS | TTERRNO, "semop failed as expected");
+	} else {
+		tst_resm(TFAIL | TTERRNO,
+			 "semop failed unexpectedly; expected: "
+			 "%d - %s", TC[i].error, strerror(TC[i].error));
 	}
 }
 
-/*
- * cleanup() - performs all the ONE TIME cleanup for this test at completion
- * 	       or premature exit.
- */
 void cleanup(void)
 {
 	/* if they exist, remove the semaphore resources */
 	rm_sema(sem_id_1);
 	rm_sema(sem_id_2);
 
-	tst_rmdir();
-
-	/*
-	 * print timing stats if that option was specified.
-	 * print errno log if that option was specified.
-	 */
 	TEST_CLEANUP;
 
+	tst_rmdir();
 }
-- 
1.8.2.1


------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

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

* Re: [LTP] [PATCH 1/2] semop/semop02.c: cleanup
  2013-12-26  6:22 [LTP] [PATCH 1/2] semop/semop02.c: cleanup Xiaoguang Wang
@ 2014-01-21  2:09 ` Wanlong Gao
  0 siblings, 0 replies; 2+ messages in thread
From: Wanlong Gao @ 2014-01-21  2:09 UTC (permalink / raw)
  To: Xiaoguang Wang; +Cc: ltp-list

On 12/26/2013 02:22 PM, Xiaoguang Wang wrote:
> * Delete some useless commtents.
> * Move the test body form main to a new
>   semop_verify function.
> * Use some SAFE_* macros.
> * Some cleanup.
> 
> Signed-off-by: Xiaoguang Wang <wangxg.fnst@cn.fujitsu.com>

Applied, thank you.

Wanlong Gao


------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today. 
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&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] 2+ messages in thread

end of thread, other threads:[~2014-01-21  2:16 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-26  6:22 [LTP] [PATCH 1/2] semop/semop02.c: cleanup Xiaoguang Wang
2014-01-21  2:09 ` Wanlong Gao

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