diff mbox series

[6/6] syscalls/sysfs: Convert sysfs06 to the new API

Message ID 20210806113115.8852-1-sujiaxun@uniontech.com
State Changes Requested
Headers show
Series None | expand

Commit Message

sujiaxun Aug. 6, 2021, 11:31 a.m. UTC
Signed-off-by: sujiaxun <sujiaxun@uniontech.com>
---
 testcases/kernel/syscalls/sysfs/sysfs06.c | 185 +++++-----------------
 1 file changed, 44 insertions(+), 141 deletions(-)

--
2.20.1

Comments

Cyril Hrubis Aug. 10, 2021, 11:36 a.m. UTC | #1
Hi!
And this is nearly the same as sysfs05, the only test that is missing in
sysfs05 is fs index out of bounds. So we should add that test to
sysfs05 and remove sysfs06.
sujiaxun Aug. 11, 2021, 12:46 p.m. UTC | #2
Thank you for your careful review. I have followed your suggestion and 
made changes and completed the submission.

在 2021/8/10 下午7:36, Cyril Hrubis 写道:
> Hi!
> And this is nearly the same as sysfs05, the only test that is missing in
> sysfs05 is fs index out of bounds. So we should add that test to
> sysfs05 and remove sysfs06.
>
diff mbox series

Patch

diff --git a/testcases/kernel/syscalls/sysfs/sysfs06.c b/testcases/kernel/syscalls/sysfs/sysfs06.c
index d9a8cd51c..118ebca3c 100644
--- a/testcases/kernel/syscalls/sysfs/sysfs06.c
+++ b/testcases/kernel/syscalls/sysfs/sysfs06.c
@@ -1,162 +1,65 @@ 
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * Copyright (c) Wipro Technologies Ltd, 2002.  All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
  */
-/**************************************************************************
- *
- *    TEST IDENTIFIER	: sysfs(2)
- *
- *
- *    EXECUTED BY	: anyone
- *
- *    TEST TITLE	: Test checking for basic error conditions
- *				 for sysfs(2)
- *
- *    TEST CASE TOTAL	: 3
- *
- *    AUTHOR		: Aniruddha Marathe <aniruddha.marathe@wipro.com>
- *
- *    SIGNALS
- *	Uses SIGUSR1 to pause before test if option set.
- *	(See the parse_opts(3) man page).
- *
- *    DESCRIPTION
- *	This test case checks whether sysfs(2) system call returns
- *	appropriate error number for invalid
- *	option and for invalid filesystem index and when
- *	buffer is out of address space
- *
- *	Setup:
- *	  Setup signal handling.
- *	  Pause for SIGUSR1 if option specified.
- *
- *	Test:
- *	  Loop if the proper options are given.
- *	  Execute system call with invaid option parameter and for
- *	  invalid filesystem index
- *	  Check return code, if system call fails with errno == expected errno
- *		Issue syscall passed with expected errno
- *	  Otherwise,
- *	  Issue syscall failed to produce expected errno
- *
- *	Cleanup:
- *	  Do cleanup for the test.
- *
- * USAGE:  <for command-line>
- *  sysfs06 [-c n] [-e] [-i n] [-I x] [-P x] [-t] [-h] [-f] [-p]
- *  where:
- *	-c n : Run n copies simultaneously
- *	-e   : Turn on errno logging.
- *	-i n : Execute test n times.
- *	-I x : Execute test for x seconds.
- *	-p   : Pause for SIGUSR1 before starting
- *	-P x : Pause for x seconds between iterations.
- *	-t   : Turn on syscall timing.
- *
- *RESTRICTIONS:
- *There is no libc or glibc support
- *****************************************************************************/
+
+/*
+ * [DESCRIPTION]
+ * This test case checks whether sysfs(2) system call return appropriate
+ * error number for invalid option and for invalid filesystem index and
+ * when  buffer is out of address space.
+ */

 #include <errno.h>
 #include <sys/syscall.h>
 #include <sys/mman.h>
-#include "test.h"
+#include "tst_test.h"
 #include "lapi/syscalls.h"

-static void setup();
-static void cleanup();
-
-char *TCID = "sysfs06";
+char *bad_addr = 0;
 static int option[3] = { 2, 4, 2 };	/* valid and invalid option */
 static int fsindex[3] = { 10000, 0, 1 };	/*invalid and valid fsindex */

-static struct test_case_t {
-	char *err_desc;		/*error description */
-	int exp_errno;		/* expected error number */
-	char *exp_errval;	/*Expected errorvalue string */
-} testcase[] = {
-	{
-	"Invalid option", EINVAL, "EINVAL"}, {
-	"fs_index is out of bounds", EINVAL, "EINVAL"}, {
-	"buf is outside your accessible address space", EFAULT, "EFAULT"}
+static struct test_case {
+    char *err_desc;     /*error description */
+    int exp_errno;      /* expected error number */
+    char *exp_errval;   /*Expected errorvalue string */
+} tcases[] = {
+    {
+    "Invalid option", EINVAL, "EINVAL"}, {
+    "fs_index is out of bounds", EINVAL, "EINVAL"}, {
+    "buf is outside your accessible address space", EFAULT, "EFAULT"}
 };

-int TST_TOTAL = ARRAY_SIZE(testcase);
-
-char *bad_addr = 0;
-
-int main(int ac, char **av)
+static void verify_sysfs06(unsigned int nr)
 {
-	int lc, i;
-
-	tst_parse_opts(ac, av, NULL, NULL);
-
-	setup();
-
-	for (lc = 0; TEST_LOOPING(lc); lc++) {
-
-		for (i = 0; i < TST_TOTAL; i++) {
-
-			tst_count = 0;
-			TEST(ltp_syscall
-			     (__NR_sysfs, option[i], fsindex[i], bad_addr));
-
-			/* check return code */
-			if ((TEST_RETURN == -1)
-			    && (TEST_ERRNO == testcase[i].exp_errno)) {
-				tst_resm(TPASS,
-					 "sysfs(2) expected failure;"
-					 " Got errno - %s : %s",
-					 testcase[i].exp_errval,
-					 testcase[i].err_desc);
-			} else {
-				tst_resm(TFAIL, "sysfs(2) failed to produce"
-					 " expected error; %d, errno"
-					 ": %s and got %d",
-					 testcase[i].exp_errno,
-					 testcase[i].exp_errval, TEST_ERRNO);
-			}
-		}		/*End of TEST LOOPS */
-	}
-
-	/*Clean up and exit */
-	cleanup();
-
-	tst_exit();
-}				/*End of main */
+    TEST(tst_syscall(__NR_sysfs, option[nr], fsindex[nr], bad_addr));
+
+    /* check return code */
+    if ((TST_RET == -1)
+        && (TST_ERR == tcases[nr].exp_errno)) {
+        tst_res(TPASS,
+             "sysfs(2) expected failure;"
+             " Got errno - %s : %s",
+             tcases[nr].exp_errval,
+             tcases[nr].err_desc);
+    } else {
+        tst_res(TFAIL, "sysfs(2) failed to produce"
+             " expected error; %d, errno"
+             ": %s and got %d",
+             tcases[nr].exp_errno,
+             tcases[nr].exp_errval, TST_ERR);
+    }
+}

-/* setup() - performs all ONE TIME setup for this test */
 void setup(void)
 {
-
-	tst_sig(NOFORK, DEF_HANDLER, cleanup);
-
-	TEST_PAUSE;
-
-	bad_addr =
-	    mmap(0, 1, PROT_NONE, MAP_PRIVATE_EXCEPT_UCLINUX | MAP_ANONYMOUS, 0,
-		 0);
-	if (bad_addr == MAP_FAILED)
-		tst_brkm(TBROK, cleanup, "mmap failed");
+    bad_addr = tst_get_bad_addr(NULL);
 }

-/*
-* cleanup() - Performs one time cleanup for this test at
-* completion or premature exit
-*/
-void cleanup(void)
-{
+static struct tst_test test = {
+    .tcnt = ARRAY_SIZE(tcases),
+    .setup = setup,
+    .test = verify_sysfs06,
+};

-}