* [LTP] [PATCH 1/2] syscalls/prctl01: Rewrite to the new library
@ 2018-04-19 2:50 Xiao Yang
2018-04-19 2:50 ` [LTP] [PATCH 2/2] syscalls/prctl02: " Xiao Yang
2018-05-17 15:10 ` [LTP] [PATCH 1/2] syscalls/prctl01: " Petr Vorel
0 siblings, 2 replies; 9+ messages in thread
From: Xiao Yang @ 2018-04-19 2:50 UTC (permalink / raw)
To: ltp
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
testcases/kernel/syscalls/prctl/prctl01.c | 197 ++++++------------------------
1 file changed, 40 insertions(+), 157 deletions(-)
diff --git a/testcases/kernel/syscalls/prctl/prctl01.c b/testcases/kernel/syscalls/prctl/prctl01.c
index 1857dfb..58e0ae7 100644
--- a/testcases/kernel/syscalls/prctl/prctl01.c
+++ b/testcases/kernel/syscalls/prctl/prctl01.c
@@ -1,174 +1,57 @@
/*
* 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.
- *
+ * 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, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * DESCRIPTION
+ * This is a Phase I test for the prctl(2) system call.
+ * It is intended to provide a limited exposure of the system call.
*/
-/**********************************************************
- *
- * TEST IDENTIFIER : prctl01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for prctl(2)
- *
- * TEST CASE TOTAL : 2
- *
- * AUTHOR : Saji Kumar.V.R <saji.kumar@wipro.com>
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * DESCRIPTION
- * This is a Phase I test for the prctl(2) system call.
- * It is intended to provide a limited exposure of the system call.
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * fork a child
- *
- * CHILD:
- * call prctl() with proper arguments
- * If call succeeds,
- * exit with 0
- * else
- * exit with 1
- * PARENT:
- * wait() for child.
- * If child exits with exit value 0,
- * Test passed
- * else
- * Test Failed
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- * USAGE: <for command-line>
- * prctl01 [-c n] [-e] [-i n] [-I x] [-P x] [-t] [-h] [-f] [-p]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -h : Show help screen
- * -f : Turn off functional testing
- * -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.
- *
- ****************************************************************/
#include <errno.h>
#include <signal.h>
#include <sys/prctl.h>
-#include <sys/wait.h>
-
-#include "test.h"
-
-static void setup(void);
-static void cleanup(void);
-char *TCID = "prctl01";
+#include "tst_test.h"
-int option[2] = { PR_GET_PDEATHSIG, PR_SET_PDEATHSIG };
-
-int TST_TOTAL = 2;
-
-int main(int ac, char **av)
+static void verify_prctl(void)
{
+ int get_sig = 0;
- int lc, i;
- pid_t child_pid;
- int status, sig;
-
- tst_parse_opts(ac, av, NULL, NULL);
-
- setup();
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- tst_count = 0;
-
- for (i = 0; i < TST_TOTAL; ++i) {
-
- switch (child_pid = FORK_OR_VFORK()) {
-
- case -1:
- /* fork() failed */
- tst_resm(TFAIL, "fork() failed");
- continue;
-
- case 0:
- /* Child */
- if (i == 1) {
- sig = SIGUSR2;
- TEST(prctl(option[i], sig));
- } else {
- TEST(prctl(option[i], &sig));
- }
-
- if (TEST_RETURN == 0) {
- exit(0);
- } else {
- tst_resm(TWARN | TTERRNO,
- "prctl() returned %ld",
- TEST_RETURN);
- exit(1);
- }
-
- default:
- /* Parent */
- if ((waitpid(child_pid, &status, 0)) < 0) {
- tst_resm(TFAIL, "waitpid() failed");
- continue;
- }
-
- if ((WIFEXITED(status)) &&
- (WEXITSTATUS(status) == 0)) {
- tst_resm(TPASS, "Test Passed");
- } else {
- tst_resm(TFAIL, "Test Failed");
- }
-
- }
- }
+ TEST(prctl(PR_SET_PDEATHSIG, SIGUSR2));
+ if (TEST_RETURN == -1) {
+ tst_res(TFAIL | TTERRNO, "prctl(PR_SET_PDEATHSIG) failed");
+ return;
}
- /* cleanup and exit */
- cleanup();
- tst_exit();
-
-}
-
-/* setup() - performs all ONE TIME setup for this test */
-void setup(void)
-{
-
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- TEST_PAUSE;
+ TEST(prctl(PR_GET_PDEATHSIG, &get_sig));
+ if (TEST_RETURN == -1) {
+ tst_res(TFAIL | TTERRNO, "prctl(PR_GET_PDEATHSIG) failed");
+ return;
+ }
+ if (get_sig == SIGUSR2) {
+ tst_res(TPASS,
+ "prctl(PR_GET_PDEATHSIG) got expected death signal");
+ } else {
+ tst_res(TFAIL, "prctl(PR_GET_PDEATHSIG) got death signal %d,"
+ " expected %d", get_sig, SIGUSR2);
+ }
}
-/*
- *cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void cleanup(void)
-{
-
-}
+static struct tst_test test = {
+ .test_all = verify_prctl,
+};
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread* [LTP] [PATCH 2/2] syscalls/prctl02: Rewrite to the new library
2018-04-19 2:50 [LTP] [PATCH 1/2] syscalls/prctl01: Rewrite to the new library Xiao Yang
@ 2018-04-19 2:50 ` Xiao Yang
2018-05-17 15:23 ` Petr Vorel
2018-05-17 15:10 ` [LTP] [PATCH 1/2] syscalls/prctl01: " Petr Vorel
1 sibling, 1 reply; 9+ messages in thread
From: Xiao Yang @ 2018-04-19 2:50 UTC (permalink / raw)
To: ltp
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
testcases/kernel/syscalls/prctl/prctl02.c | 203 ++++++------------------------
1 file changed, 39 insertions(+), 164 deletions(-)
diff --git a/testcases/kernel/syscalls/prctl/prctl02.c b/testcases/kernel/syscalls/prctl/prctl02.c
index 67e3b6f..f412e21 100644
--- a/testcases/kernel/syscalls/prctl/prctl02.c
+++ b/testcases/kernel/syscalls/prctl/prctl02.c
@@ -1,189 +1,64 @@
/*
* 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.
- *
+ * 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, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * DESCRIPTION
+ * 1) prctl() fails with EINVAL when an invalid value is given for option
+ * 2) prctl() fails with EINVAL when option is PR_SET_PDEATHSIG & arg2 is
+ * not zero or a valid signal number
*/
-/**********************************************************
- *
- * TEST IDENTIFIER : prctl02
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Tests for error conditions
- *
- * TEST CASE TOTAL : 2
- *
- * AUTHOR : Saji Kumar.V.R <saji.kumar@wipro.com>
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * DESCRIPTION
- * Verify that
- * 1) prctl() fails with errno, EINVAL when an invalid value is given for
- * option
- * 2) prctl() fails with errno, EINVAL when option is PR_SET_PDEATHSIG
- * & arg2 is not zero or a valid signal number
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * fork a child
- *
- * CHILD:
- * call prctl() with proper arguments
- * If call fails with expected errno,
- * exit with 0
- * else
- * exit with 1
- * PARENT:
- * wait() for child.
- * If child exits with exit value 0,
- * Test passed
- * else
- * Test Failed
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- * USAGE: <for command-line>
- * prctl02 [-c n] [-e] [-i n] [-I x] [-P x] [-t] [-h] [-f] [-p]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -h : Show help screen
- * -f : Turn off functional testing
- * -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.
- *
- ****************************************************************/
#include <errno.h>
#include <signal.h>
#include <sys/prctl.h>
-#include <sys/wait.h>
-#include "test.h"
+#include "tst_test.h"
#define OPTION_INVALID 999
#define INVALID_ARG 999
-static void setup(void);
-static void cleanup(void);
-
-char *TCID = "prctl02";
-
-struct test_cases_t {
+static struct test_cases_t {
int option;
unsigned long arg2;
int exp_errno;
} test_cases[] = {
- {
- OPTION_INVALID, 0, EINVAL}, {
- PR_SET_PDEATHSIG, INVALID_ARG, EINVAL}
+ {OPTION_INVALID, 0, EINVAL},
+ {PR_SET_PDEATHSIG, INVALID_ARG, EINVAL},
};
-int TST_TOTAL = sizeof(test_cases) / sizeof(test_cases[0]);
-
-int main(int ac, char **av)
+static void verify_prctl(unsigned int n)
{
+ struct test_cases_t *tc = &test_cases[n];
- int lc, i;
- pid_t child_pid;
- int status;
-
- tst_parse_opts(ac, av, NULL, NULL);
-
- setup();
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- tst_count = 0;
-
- for (i = 0; i < TST_TOTAL; ++i) {
-
- switch (child_pid = FORK_OR_VFORK()) {
-
- case -1:
- /* fork() failed */
- tst_resm(TFAIL, "fork() failed");
- continue;
-
- case 0:
- /* Child */
-
- TEST(prctl(test_cases[i].option,
- test_cases[i].arg2));
- if ((TEST_RETURN == -1) && (TEST_ERRNO ==
- test_cases
- [i].exp_errno)) {
- exit(TEST_ERRNO);
- } else {
- tst_resm(TWARN | TTERRNO,
- "prctl() returned %ld",
- TEST_RETURN);
- exit(TEST_ERRNO);
- }
-
- default:
- /* Parent */
- if ((waitpid(child_pid, &status, 0)) < 0) {
- tst_resm(TFAIL, "waitpid() failed");
- continue;
- }
-
- if ((WIFEXITED(status)) && (WEXITSTATUS(status)
- ==
- test_cases
- [i].exp_errno)) {
- tst_resm(TPASS, "Test Passed");
- } else {
- tst_resm(TFAIL, "Test Failed");
- }
-
- }
- }
+ TEST(prctl(tc->option, tc->arg2));
+ if (TEST_RETURN == 0) {
+ tst_res(TFAIL, "prctl() succeeded unexpectedly");
+ return;
}
- /* cleanup and exit */
- cleanup();
-
- tst_exit();
-
-}
-
-/* setup() - performs all ONE TIME setup for this test */
-void setup(void)
-{
-
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- TEST_PAUSE;
-
+ if (TEST_ERRNO == tc->exp_errno) {
+ tst_res(TPASS | TTERRNO, "prctl() failed as expected");
+ } else {
+ tst_res(TPASS | TTERRNO, "prctl() failed unexpectedly, "
+ "expected %s", tst_strerrno(tc->exp_errno));
+ }
}
-/*
- *cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void cleanup(void)
-{
-
-}
+static struct tst_test test = {
+ .tcnt = ARRAY_SIZE(test_cases),
+ .test = verify_prctl,
+};
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread* [LTP] [PATCH 2/2] syscalls/prctl02: Rewrite to the new library
2018-04-19 2:50 ` [LTP] [PATCH 2/2] syscalls/prctl02: " Xiao Yang
@ 2018-05-17 15:23 ` Petr Vorel
2018-05-18 1:30 ` [LTP] [PATCH v2 1/2] syscalls/prctl01: " Xiao Yang
2018-05-18 1:30 ` [LTP] [PATCH 2/2] syscalls/prctl02: " Xiao Yang
0 siblings, 2 replies; 9+ messages in thread
From: Petr Vorel @ 2018-05-17 15:23 UTC (permalink / raw)
To: ltp
Hi Xiao,
LGTM, with 2 very minor issues.
If you're ok with them I can change it before merging.
> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Reviewed-by: Petr Vorel <pvorel@suse.cz>
> ---
> testcases/kernel/syscalls/prctl/prctl02.c | 203 ++++++------------------------
...
> + * 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, see <http://www.gnu.org/licenses/>.
> + */
Again, if you want, you can use SPDX license identifier (it's much shorter):
// SPDX-License-Identifier: GPL-2.0-or-later
> -struct test_cases_t {
> +static struct test_cases_t {
Using tcase would be shorter.
...
> + if (TEST_ERRNO == tc->exp_errno) {
Can you please swap these to?
if (tc->exp_errno == TEST_ERRNO) {
> + tst_res(TPASS | TTERRNO, "prctl() failed as expected");
> + } else {
> + tst_res(TPASS | TTERRNO, "prctl() failed unexpectedly, "
> + "expected %s", tst_strerrno(tc->exp_errno));
> + }
> }
Kind regards,
Petr
^ permalink raw reply [flat|nested] 9+ messages in thread* [LTP] [PATCH v2 1/2] syscalls/prctl01: Rewrite to the new library
2018-05-17 15:23 ` Petr Vorel
@ 2018-05-18 1:30 ` Xiao Yang
2018-05-18 1:30 ` [LTP] [PATCH v2 2/2] syscalls/prctl02: " Xiao Yang
2018-05-18 15:21 ` [LTP] [PATCH v2 1/2] syscalls/prctl01: " Petr Vorel
2018-05-18 1:30 ` [LTP] [PATCH 2/2] syscalls/prctl02: " Xiao Yang
1 sibling, 2 replies; 9+ messages in thread
From: Xiao Yang @ 2018-05-18 1:30 UTC (permalink / raw)
To: ltp
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
testcases/kernel/syscalls/prctl/prctl01.c | 187 +++++-------------------------
1 file changed, 30 insertions(+), 157 deletions(-)
diff --git a/testcases/kernel/syscalls/prctl/prctl01.c b/testcases/kernel/syscalls/prctl/prctl01.c
index 1857dfb..4270e84 100644
--- a/testcases/kernel/syscalls/prctl/prctl01.c
+++ b/testcases/kernel/syscalls/prctl/prctl01.c
@@ -1,174 +1,47 @@
/*
+ * 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 : prctl01
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Basic test for prctl(2)
- *
- * TEST CASE TOTAL : 2
- *
- * AUTHOR : Saji Kumar.V.R <saji.kumar@wipro.com>
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * DESCRIPTION
- * This is a Phase I test for the prctl(2) system call.
- * It is intended to provide a limited exposure of the system call.
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * fork a child
- *
- * CHILD:
- * call prctl() with proper arguments
- * If call succeeds,
- * exit with 0
- * else
- * exit with 1
- * PARENT:
- * wait() for child.
- * If child exits with exit value 0,
- * Test passed
- * else
- * Test Failed
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- * USAGE: <for command-line>
- * prctl01 [-c n] [-e] [-i n] [-I x] [-P x] [-t] [-h] [-f] [-p]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -h : Show help screen
- * -f : Turn off functional testing
- * -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.
- *
- ****************************************************************/
+
+/*
+ * DESCRIPTION
+ * This is a Phase I test for the prctl(2) system call.
+ * It is intended to provide a limited exposure of the system call.
+ */
#include <errno.h>
#include <signal.h>
#include <sys/prctl.h>
-#include <sys/wait.h>
-
-#include "test.h"
-static void setup(void);
-static void cleanup(void);
+#include "tst_test.h"
-char *TCID = "prctl01";
-
-int option[2] = { PR_GET_PDEATHSIG, PR_SET_PDEATHSIG };
-
-int TST_TOTAL = 2;
-
-int main(int ac, char **av)
+static void verify_prctl(void)
{
+ int get_sig = 0;
- int lc, i;
- pid_t child_pid;
- int status, sig;
-
- tst_parse_opts(ac, av, NULL, NULL);
-
- setup();
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- tst_count = 0;
-
- for (i = 0; i < TST_TOTAL; ++i) {
-
- switch (child_pid = FORK_OR_VFORK()) {
-
- case -1:
- /* fork() failed */
- tst_resm(TFAIL, "fork() failed");
- continue;
-
- case 0:
- /* Child */
- if (i == 1) {
- sig = SIGUSR2;
- TEST(prctl(option[i], sig));
- } else {
- TEST(prctl(option[i], &sig));
- }
-
- if (TEST_RETURN == 0) {
- exit(0);
- } else {
- tst_resm(TWARN | TTERRNO,
- "prctl() returned %ld",
- TEST_RETURN);
- exit(1);
- }
-
- default:
- /* Parent */
- if ((waitpid(child_pid, &status, 0)) < 0) {
- tst_resm(TFAIL, "waitpid() failed");
- continue;
- }
-
- if ((WIFEXITED(status)) &&
- (WEXITSTATUS(status) == 0)) {
- tst_resm(TPASS, "Test Passed");
- } else {
- tst_resm(TFAIL, "Test Failed");
- }
-
- }
- }
+ TEST(prctl(PR_SET_PDEATHSIG, SIGUSR2));
+ if (TEST_RETURN == -1) {
+ tst_res(TFAIL | TTERRNO, "prctl(PR_SET_PDEATHSIG) failed");
+ return;
}
- /* cleanup and exit */
- cleanup();
- tst_exit();
-
-}
-
-/* setup() - performs all ONE TIME setup for this test */
-void setup(void)
-{
-
- tst_sig(FORK, DEF_HANDLER, cleanup);
+ tst_res(TINFO, "prctl(PR_SET_PDEATHSIG) succeeded");
- TEST_PAUSE;
+ TEST(prctl(PR_GET_PDEATHSIG, &get_sig));
+ if (TEST_RETURN == -1) {
+ tst_res(TFAIL | TTERRNO, "prctl(PR_GET_PDEATHSIG) failed");
+ return;
+ }
+ if (get_sig == SIGUSR2) {
+ tst_res(TPASS,
+ "prctl(PR_GET_PDEATHSIG) got expected death signal");
+ } else {
+ tst_res(TFAIL, "prctl(PR_GET_PDEATHSIG) got death signal %d,"
+ " expected %d", get_sig, SIGUSR2);
+ }
}
-/*
- *cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void cleanup(void)
-{
-
-}
+static struct tst_test test = {
+ .test_all = verify_prctl,
+};
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread* [LTP] [PATCH v2 2/2] syscalls/prctl02: Rewrite to the new library
2018-05-18 1:30 ` [LTP] [PATCH v2 1/2] syscalls/prctl01: " Xiao Yang
@ 2018-05-18 1:30 ` Xiao Yang
2018-05-18 15:23 ` Petr Vorel
2018-05-18 15:21 ` [LTP] [PATCH v2 1/2] syscalls/prctl01: " Petr Vorel
1 sibling, 1 reply; 9+ messages in thread
From: Xiao Yang @ 2018-05-18 1:30 UTC (permalink / raw)
To: ltp
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
testcases/kernel/syscalls/prctl/prctl02.c | 195 +++++-------------------------
1 file changed, 29 insertions(+), 166 deletions(-)
diff --git a/testcases/kernel/syscalls/prctl/prctl02.c b/testcases/kernel/syscalls/prctl/prctl02.c
index 67e3b6f..1e7640b 100644
--- a/testcases/kernel/syscalls/prctl/prctl02.c
+++ b/testcases/kernel/syscalls/prctl/prctl02.c
@@ -1,189 +1,52 @@
/*
+ * 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 : prctl02
- *
- * EXECUTED BY : anyone
- *
- * TEST TITLE : Tests for error conditions
- *
- * TEST CASE TOTAL : 2
- *
- * AUTHOR : Saji Kumar.V.R <saji.kumar@wipro.com>
- *
- * SIGNALS
- * Uses SIGUSR1 to pause before test if option set.
- * (See the parse_opts(3) man page).
- *
- * DESCRIPTION
- * Verify that
- * 1) prctl() fails with errno, EINVAL when an invalid value is given for
- * option
- * 2) prctl() fails with errno, EINVAL when option is PR_SET_PDEATHSIG
- * & arg2 is not zero or a valid signal number
- *
- * Setup:
- * Setup signal handling.
- * Pause for SIGUSR1 if option specified.
- *
- * Test:
- * Loop if the proper options are given.
- * fork a child
- *
- * CHILD:
- * call prctl() with proper arguments
- * If call fails with expected errno,
- * exit with 0
- * else
- * exit with 1
- * PARENT:
- * wait() for child.
- * If child exits with exit value 0,
- * Test passed
- * else
- * Test Failed
- *
- * Cleanup:
- * Print errno log and/or timing stats if options given
- *
- * USAGE: <for command-line>
- * prctl02 [-c n] [-e] [-i n] [-I x] [-P x] [-t] [-h] [-f] [-p]
- * where, -c n : Run n copies concurrently.
- * -e : Turn on errno logging.
- * -h : Show help screen
- * -f : Turn off functional testing
- * -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.
- *
- ****************************************************************/
+
+/*
+ * DESCRIPTION
+ * 1) prctl() fails with EINVAL when an invalid value is given for option
+ * 2) prctl() fails with EINVAL when option is PR_SET_PDEATHSIG & arg2 is
+ * not zero or a valid signal number
+ */
#include <errno.h>
#include <signal.h>
#include <sys/prctl.h>
-#include <sys/wait.h>
-#include "test.h"
+#include "tst_test.h"
#define OPTION_INVALID 999
#define INVALID_ARG 999
-static void setup(void);
-static void cleanup(void);
-
-char *TCID = "prctl02";
-
-struct test_cases_t {
+static struct tcase {
int option;
unsigned long arg2;
int exp_errno;
-} test_cases[] = {
- {
- OPTION_INVALID, 0, EINVAL}, {
- PR_SET_PDEATHSIG, INVALID_ARG, EINVAL}
+} tcases[] = {
+ {OPTION_INVALID, 0, EINVAL},
+ {PR_SET_PDEATHSIG, INVALID_ARG, EINVAL},
};
-int TST_TOTAL = sizeof(test_cases) / sizeof(test_cases[0]);
-
-int main(int ac, char **av)
+static void verify_prctl(unsigned int n)
{
+ struct tcase *tc = &tcases[n];
- int lc, i;
- pid_t child_pid;
- int status;
-
- tst_parse_opts(ac, av, NULL, NULL);
-
- setup();
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- tst_count = 0;
-
- for (i = 0; i < TST_TOTAL; ++i) {
-
- switch (child_pid = FORK_OR_VFORK()) {
-
- case -1:
- /* fork() failed */
- tst_resm(TFAIL, "fork() failed");
- continue;
-
- case 0:
- /* Child */
-
- TEST(prctl(test_cases[i].option,
- test_cases[i].arg2));
- if ((TEST_RETURN == -1) && (TEST_ERRNO ==
- test_cases
- [i].exp_errno)) {
- exit(TEST_ERRNO);
- } else {
- tst_resm(TWARN | TTERRNO,
- "prctl() returned %ld",
- TEST_RETURN);
- exit(TEST_ERRNO);
- }
-
- default:
- /* Parent */
- if ((waitpid(child_pid, &status, 0)) < 0) {
- tst_resm(TFAIL, "waitpid() failed");
- continue;
- }
-
- if ((WIFEXITED(status)) && (WEXITSTATUS(status)
- ==
- test_cases
- [i].exp_errno)) {
- tst_resm(TPASS, "Test Passed");
- } else {
- tst_resm(TFAIL, "Test Failed");
- }
-
- }
- }
+ TEST(prctl(tc->option, tc->arg2));
+ if (TEST_RETURN == 0) {
+ tst_res(TFAIL, "prctl() succeeded unexpectedly");
+ return;
}
- /* cleanup and exit */
- cleanup();
-
- tst_exit();
-
-}
-
-/* setup() - performs all ONE TIME setup for this test */
-void setup(void)
-{
-
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- TEST_PAUSE;
-
+ if (tc->exp_errno == TEST_ERRNO) {
+ tst_res(TPASS | TTERRNO, "prctl() failed as expected");
+ } else {
+ tst_res(TPASS | TTERRNO, "prctl() failed unexpectedly, "
+ "expected %s", tst_strerrno(tc->exp_errno));
+ }
}
-/*
- *cleanup() - performs all ONE TIME cleanup for this test at
- * completion or premature exit.
- */
-void cleanup(void)
-{
-
-}
+static struct tst_test test = {
+ .tcnt = ARRAY_SIZE(tcases),
+ .test = verify_prctl,
+};
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread* [LTP] [PATCH v2 2/2] syscalls/prctl02: Rewrite to the new library
2018-05-18 1:30 ` [LTP] [PATCH v2 2/2] syscalls/prctl02: " Xiao Yang
@ 2018-05-18 15:23 ` Petr Vorel
0 siblings, 0 replies; 9+ messages in thread
From: Petr Vorel @ 2018-05-18 15:23 UTC (permalink / raw)
To: ltp
Hi Xiao,
> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
> ---
> testcases/kernel/syscalls/prctl/prctl02.c | 195 +++++-------------------------
Pushed with minor changes (see patch bellow):
* Add SPDX-License-Identifier into first line (expected by checkpatch.pl script from kernel).
* Put TFAIL string into one line (refer not split quoted string if not too long).
* Removed obvious DESCRIPTION text.
Thanks for your patches!
Kind regards,
Petr
diff --git testcases/kernel/syscalls/prctl/prctl02.c testcases/kernel/syscalls/prctl/prctl02.c
index 1e7640b6d..ee4a6afe4 100644
--- testcases/kernel/syscalls/prctl/prctl02.c
+++ testcases/kernel/syscalls/prctl/prctl02.c
@@ -1,10 +1,7 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
- * SPDX-License-Identifier: GPL-2.0-or-later
* Copyright (c) Wipro Technologies Ltd, 2002. All Rights Reserved.
- */
-
-/*
- * DESCRIPTION
+ *
* 1) prctl() fails with EINVAL when an invalid value is given for option
* 2) prctl() fails with EINVAL when option is PR_SET_PDEATHSIG & arg2 is
* not zero or a valid signal number
@@ -41,8 +38,8 @@ static void verify_prctl(unsigned int n)
if (tc->exp_errno == TEST_ERRNO) {
tst_res(TPASS | TTERRNO, "prctl() failed as expected");
} else {
- tst_res(TPASS | TTERRNO, "prctl() failed unexpectedly, "
- "expected %s", tst_strerrno(tc->exp_errno));
+ tst_res(TPASS | TTERRNO, "prctl() failed unexpectedly, expected %s",
+ tst_strerrno(tc->exp_errno));
}
}
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [LTP] [PATCH v2 1/2] syscalls/prctl01: Rewrite to the new library
2018-05-18 1:30 ` [LTP] [PATCH v2 1/2] syscalls/prctl01: " Xiao Yang
2018-05-18 1:30 ` [LTP] [PATCH v2 2/2] syscalls/prctl02: " Xiao Yang
@ 2018-05-18 15:21 ` Petr Vorel
1 sibling, 0 replies; 9+ messages in thread
From: Petr Vorel @ 2018-05-18 15:21 UTC (permalink / raw)
To: ltp
Hi Xiao,
> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
> ---
> testcases/kernel/syscalls/prctl/prctl01.c | 187 +++++-------------------------
> 1 file changed, 30 insertions(+), 157 deletions(-)
Pushed with minor changes (see patch bellow):
* Add SPDX-License-Identifier into first line (expected by checkpatch.pl script from kernel).
* Changed message for PR_SET_PDEATHSIG from TINFO to TPASS.
* Put TFAIL string into one line (refer not split quoted string if not too long).
Kind regards,
Petr
diff --git testcases/kernel/syscalls/prctl/prctl01.c testcases/kernel/syscalls/prctl/prctl01.c
index 4270e8472..b235981e6 100644
--- testcases/kernel/syscalls/prctl/prctl01.c
+++ testcases/kernel/syscalls/prctl/prctl01.c
@@ -1,10 +1,7 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
- * SPDX-License-Identifier: GPL-2.0-or-later
* Copyright (c) Wipro Technologies Ltd, 2002. All Rights Reserved.
- */
-
-/*
- * DESCRIPTION
+ *
* This is a Phase I test for the prctl(2) system call.
* It is intended to provide a limited exposure of the system call.
*/
@@ -25,7 +22,7 @@ static void verify_prctl(void)
return;
}
- tst_res(TINFO, "prctl(PR_SET_PDEATHSIG) succeeded");
+ tst_res(TPASS, "prctl(PR_SET_PDEATHSIG) succeeded");
TEST(prctl(PR_GET_PDEATHSIG, &get_sig));
if (TEST_RETURN == -1) {
@@ -37,8 +34,8 @@ static void verify_prctl(void)
tst_res(TPASS,
"prctl(PR_GET_PDEATHSIG) got expected death signal");
} else {
- tst_res(TFAIL, "prctl(PR_GET_PDEATHSIG) got death signal %d,"
- " expected %d", get_sig, SIGUSR2);
+ tst_res(TFAIL, "prctl(PR_GET_PDEATHSIG) got death signal %d, expected %d",
+ get_sig, SIGUSR2);
}
}
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [LTP] [PATCH 2/2] syscalls/prctl02: Rewrite to the new library
2018-05-17 15:23 ` Petr Vorel
2018-05-18 1:30 ` [LTP] [PATCH v2 1/2] syscalls/prctl01: " Xiao Yang
@ 2018-05-18 1:30 ` Xiao Yang
1 sibling, 0 replies; 9+ messages in thread
From: Xiao Yang @ 2018-05-18 1:30 UTC (permalink / raw)
To: ltp
Hi Petr,
Thanks for your comment.
I will send v2 patch set as you suggested.
Thanks,
Xiao Yang
On 2018/05/17 23:23, Petr Vorel wrote:
> Hi Xiao,
>
> LGTM, with 2 very minor issues.
> If you're ok with them I can change it before merging.
>
>> Signed-off-by: Xiao Yang<yangx.jy@cn.fujitsu.com>
> Reviewed-by: Petr Vorel<pvorel@suse.cz>
>> ---
>> testcases/kernel/syscalls/prctl/prctl02.c | 203 ++++++------------------------
> ...
>> + * 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, see<http://www.gnu.org/licenses/>.
>> + */
> Again, if you want, you can use SPDX license identifier (it's much shorter):
> // SPDX-License-Identifier: GPL-2.0-or-later
>
>> -struct test_cases_t {
>> +static struct test_cases_t {
> Using tcase would be shorter.
>
> ...
>> + if (TEST_ERRNO == tc->exp_errno) {
> Can you please swap these to?
> if (tc->exp_errno == TEST_ERRNO) {
>> + tst_res(TPASS | TTERRNO, "prctl() failed as expected");
>> + } else {
>> + tst_res(TPASS | TTERRNO, "prctl() failed unexpectedly, "
>> + "expected %s", tst_strerrno(tc->exp_errno));
>> + }
>> }
> Kind regards,
> Petr
>
>
> .
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* [LTP] [PATCH 1/2] syscalls/prctl01: Rewrite to the new library
2018-04-19 2:50 [LTP] [PATCH 1/2] syscalls/prctl01: Rewrite to the new library Xiao Yang
2018-04-19 2:50 ` [LTP] [PATCH 2/2] syscalls/prctl02: " Xiao Yang
@ 2018-05-17 15:10 ` Petr Vorel
1 sibling, 0 replies; 9+ messages in thread
From: Petr Vorel @ 2018-05-17 15:10 UTC (permalink / raw)
To: ltp
Hi Xiao,
> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
> ---
Reviewed-by: Petr Vorel <pvorel@suse.cz>
> testcases/kernel/syscalls/prctl/prctl01.c | 197 ++++++------------------------
> 1 file changed, 40 insertions(+), 157 deletions(-)
> diff --git a/testcases/kernel/syscalls/prctl/prctl01.c b/testcases/kernel/syscalls/prctl/prctl01.c
> index 1857dfb..58e0ae7 100644
> --- a/testcases/kernel/syscalls/prctl/prctl01.c
> +++ b/testcases/kernel/syscalls/prctl/prctl01.c
> @@ -1,174 +1,57 @@
> /*
> * 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.
> - *
> + * 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, see <http://www.gnu.org/licenses/>.
> + */
If you want, you can use SPDX license identifier (it's much shorter):
// SPDX-License-Identifier: GPL-2.0-or-later
...
> + TEST(prctl(PR_SET_PDEATHSIG, SIGUSR2));
> + if (TEST_RETURN == -1) {
> + tst_res(TFAIL | TTERRNO, "prctl(PR_SET_PDEATHSIG) failed");
> + return;
> }
Maybe report here that PR_SET_PDEATHSIG succeed?
...
> + TEST(prctl(PR_GET_PDEATHSIG, &get_sig));
> + if (TEST_RETURN == -1) {
> + tst_res(TFAIL | TTERRNO, "prctl(PR_GET_PDEATHSIG) failed");
> + return;
> + }
> + if (get_sig == SIGUSR2) {
> + tst_res(TPASS,
> + "prctl(PR_GET_PDEATHSIG) got expected death signal");
> + } else {
> + tst_res(TFAIL, "prctl(PR_GET_PDEATHSIG) got death signal %d,"
> + " expected %d", get_sig, SIGUSR2);
> + }
> }
> -/*
> - *cleanup() - performs all ONE TIME cleanup for this test at
> - * completion or premature exit.
> - */
> -void cleanup(void)
> -{
> -
> -}
> +static struct tst_test test = {
> + .test_all = verify_prctl,
> +};
Kind regards,
Petr
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2018-05-18 15:23 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-04-19 2:50 [LTP] [PATCH 1/2] syscalls/prctl01: Rewrite to the new library Xiao Yang
2018-04-19 2:50 ` [LTP] [PATCH 2/2] syscalls/prctl02: " Xiao Yang
2018-05-17 15:23 ` Petr Vorel
2018-05-18 1:30 ` [LTP] [PATCH v2 1/2] syscalls/prctl01: " Xiao Yang
2018-05-18 1:30 ` [LTP] [PATCH v2 2/2] syscalls/prctl02: " Xiao Yang
2018-05-18 15:23 ` Petr Vorel
2018-05-18 15:21 ` [LTP] [PATCH v2 1/2] syscalls/prctl01: " Petr Vorel
2018-05-18 1:30 ` [LTP] [PATCH 2/2] syscalls/prctl02: " Xiao Yang
2018-05-17 15:10 ` [LTP] [PATCH 1/2] syscalls/prctl01: " Petr Vorel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox