diff mbox series

getitimer03.c: convert to new LTP API

Message ID 20220720104430.8614-1-akumar@suse.de
State New
Headers show
Series getitimer03.c: convert to new LTP API | expand

Commit Message

Avinesh Kumar July 20, 2022, 10:44 a.m. UTC
Signed-off-by: Avinesh Kumar <akumar@suse.de>
---
 .../kernel/syscalls/getitimer/getitimer03.c   | 156 ++----------------
 1 file changed, 17 insertions(+), 139 deletions(-)

Comments

Li Wang July 21, 2022, 4:04 a.m. UTC | #1
Hi Avinesh,

Thank you for doing this. The code achievement is absolutely right but
we can do something unify to better manage the error test in LTP.

My suggestion is to combine this invalid-argument test into getitimer02.c
by creating a structure that populates with arguments of getitimer(). Then
we can traversal each item to complete all error tests for a syscall just
in one testcase. (see madvise02.c)

e.g.

static struct tcase {
       int which;
       struct itimerval *curr_value;
} tcases[] = {
       {},
};
Petr Vorel Sept. 14, 2022, 8:52 p.m. UTC | #2
Hi Avinesh, Li,

> Hi Avinesh,

> Thank you for doing this. The code achievement is absolutely right but
> we can do something unify to better manage the error test in LTP.

> My suggestion is to combine this invalid-argument test into getitimer02.c
> by creating a structure that populates with arguments of getitimer(). Then
> we can traversal each item to complete all error tests for a syscall just
> in one testcase. (see madvise02.c)

Avinesh, do you plan to follow Li's suggestion (which makes sense) and send a
patch this week (e.g. before git freeze due LTP releasing process?)

Kind regards,
Petr

> e.g.

> static struct tcase {
>        int which;
>        struct itimerval *curr_value;
> } tcases[] = {
>        {},
> };
diff mbox series

Patch

diff --git a/testcases/kernel/syscalls/getitimer/getitimer03.c b/testcases/kernel/syscalls/getitimer/getitimer03.c
index cc5e83fad..e26a121c1 100644
--- a/testcases/kernel/syscalls/getitimer/getitimer03.c
+++ b/testcases/kernel/syscalls/getitimer/getitimer03.c
@@ -1,152 +1,30 @@ 
+// 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
+ *	03/2001 - Written by Wayne Boyer
+ * Copyright (c) 2022 SUSE LLC Avinesh Kumar <avinesh.kumar@suse.com>
  */
 
-/* $Header: /cvsroot/ltp/ltp/testcases/kernel/syscalls/getitimer/getitimer03.c,v 1.7 2009/08/28 10:18:24 vapier Exp $ */
-
-/*
- * NAME
- *	getitimer03.c
- *
- * DESCRIPTION
- *	getitimer03 - check that a getitimer() call fails as expected
- *		      with an incorrect first argument.
- *
- * CALLS
- *	getitimer()
- *
- * ALGORITHM
- *	loop if that option was specified
- *	allocate space and set up needed values
- *	issue the system call
- *	check the errno value
- *	  issue a PASS message if we get EINVAL
- *	otherwise, the tests fails
- *	  issue a FAIL message
- *	  break any remaining tests
- *	  call cleanup
- *
- * USAGE:  <for command-line>
- *  getitmer03 [-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.
- *
- * USAGE
- *	./getitimer03
+/*\
+ * [Description]
  *
- * HISTORY
- *	03/2001 - Written by Wayne Boyer
- *
- * RESTRICTIONS
- *	none
+ * Verify that getitimer() fails with EINVAL when called with
+ * an invalid first argument.
  */
 
-#include "test.h"
-
-#include <errno.h>
-#include <sys/time.h>
-
-void cleanup(void);
-void setup(void);
-
-char *TCID = "getitimer03";
-int TST_TOTAL = 1;
+#include <stdlib.h>
+#include "tst_test.h"
 
-int main(int ac, char **av)
+static void run(void)
 {
-	int lc;
 	struct itimerval *value;
 
-	tst_parse_opts(ac, av, NULL, NULL);
-
-	setup();		/* global setup */
-
-	/* The following loop checks looping state if -i option given */
-
-	for (lc = 0; TEST_LOOPING(lc); lc++) {
-		/* reset tst_count in case we are looping */
-		tst_count = 0;
-
-		/* allocate some space for the timer structure */
-
-		if ((value = malloc((size_t)sizeof(struct itimerval))) ==
-		    NULL) {
-			tst_brkm(TBROK, cleanup, "value malloc failed");
-		}
-
-		/*
-		 * issue the system call with the TEST() macro
-		 * ITIMER_REAL = 0, ITIMER_VIRTUAL = 1 and ITIMER_PROF = 2
-		 */
-
-		/* make the first value negative to get a failure */
-		TEST(getitimer(-ITIMER_PROF, value));
-
-		if (TEST_RETURN == 0) {
-			tst_resm(TFAIL, "call failed to produce expected error "
-				 "- errno = %d - %s", TEST_ERRNO,
-				 strerror(TEST_ERRNO));
-			continue;
-		}
-
-		switch (TEST_ERRNO) {
-		case EINVAL:
-			tst_resm(TPASS, "expected failure - errno = %d - %s",
-				 TEST_ERRNO, strerror(TEST_ERRNO));
-			break;
-		default:
-			tst_resm(TFAIL, "call failed to produce expected error "
-				 "- errno = %d - %s", TEST_ERRNO,
-				 strerror(TEST_ERRNO));
-		}
-
-		/*
-		 * clean up things in case we are looping
-		 */
-
-		free(value);
-		value = NULL;
-	}
-
-	cleanup();
-
-	tst_exit();
-}
-
-/*
- * setup() - performs all the ONE TIME setup for this test.
- */
-void setup(void)
-{
-
-	tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
-	TEST_PAUSE;
+	value = SAFE_MALLOC(sizeof(struct itimerval));
+	TST_EXP_FAIL(getitimer(-ITIMER_PROF, value), EINVAL);
+	free(value);
+	value = NULL;
 }
 
-/*
- * cleanup() - performs all the ONE TIME cleanup for this test at completion
- * 	       or premature exit.
- */
-void cleanup(void)
-{
-
-}
+static struct tst_test test = {
+	.test_all = run
+};